跳到主要内容

docker搭建堡垒机环境

通过本地来搭建堡垒机环境,来模拟公司的堡垒机服务场景,通过Docker来跑JumpServer、Linux容器

  • 需要具备熟悉JumpServer操作、linux服务器、Nginx配置
  • docker搭建jumpServer和linux服务器的容器
  • Linux本身就有大量 Docker 镜像,可以直接启动一个 Linux 容器来模拟服务器
  • 注意:通过docker容器搭建的linux,很多命令没办法用
    • 比如systemctl、journalctl 依赖 systemd
    • 想要完整的学习运维linux服务器,,更适合再搭一个完整 Ubuntu 虚拟机,而不是普通 Docker 容器
    • 注意:普通的docker容器是不支持systemd服务,但是可以把容器改造下就可以支持!

Mac搭建​

text
Mac
│
└── Docker Desktop
│
├── JumpServer 容器
│ └── 模拟公司的堡垒机
│
└── Linux SSH 容器
└── 模拟一台真正的 Linux 服务器

本地搭建​

  • JumpServer + Linux SSH 容器
    • SSH、资产配置、用户授权、JumpServer 登录、文件传输、容器管理和本地项目挂载

改造docker的linux容器​

普通的docker的linux容器不支持systemd服务,普通的linux-server服务不支持systemd,因此没办法在Linux容器中学习这些命令,需要改造下容器,让其可以支持systemd等命令

  • 让 systemd 作为容器 PID 1。
  • Compose 增加 privileged、cgroup、/run 临时文件系统和 cgroup 挂载
    • privileged: true: 给容器更高权限
    • cgroup:Linux 的 “进程资源分组和限制机制”

JumpServer初始化​

  • 管理员初始账号
    • 用户名:admin 密码:ChangeMe
  • 首次登录进去之后,需要修改密码
  • 创建 Linux 资产
    • 地址名是:linux-server
      • jumpserver 和 linux-server 在同一个 Docker Network
      • 因此jumpserver可以直接通过容器服务名来找到linux容器
      • 不能通过localhost,否则jumpserver会尝试自己连接自己

Linux 资产创建资产账号​

  • 用于JumpServer通过SSH 登录 Linux 的账号
  • 名称是 JumpServer 自己管理这个账号时使用的名字
配置项建议填写作用
名称developerJumpServer 中显示的账号名称
用户名developerLinux 真实 SSH 用户名
特权账号不勾选普通实验账号
切换自不选当前不需要 sudo/账号切换
密文类型密码使用密码 SSH 登录
密码LabPass1234Linux 用户密码
可改密建议不勾学习阶段暂时不需要 JumpServer 改 Linux 密码
立即推送不勾选Linux 已经存在这个账号,不需要创建
激活勾选启用该账号

JumpServer资产授权​

  • 通过资产授权之后,dev登录 JumpServer就能看到服务器了
  • 在资产中-选择对应的linux服务器即可
bash
名称:linux-lab-01

用户:
dev
↑ 你登录 JumpServer 的用户

资产:
linux-lab-01

账号:
dev
↑ Linux 的资产账号

SSH登录linux服务器​

  • 通过ssh登录linux服务器,需要在linux服务器创建账号
  • JumpServer 最终要通过 SSH 连接 Linux 资产,那么 Linux 上必须存在一个可用于 SSH 登录的真实账号,需要在Linux服务器创建账号
  • JumpServer本质上也是通过ssh的方式去连接linux资产
text
ssh 用户名@地址 -p 端口

# 通过dev用户进去linux容器
ssh dev@localhost -p 2223

创建linux服务器账号​

bash
# 进入linux服务器
docker exec -it linux-server bash
# 创建账号
useradd -m -s /bin/bash dev
# 修改密码
passwd dev

跑项目流程​

  • 跑本地项目,把本地的项目挂载同步到linux容器中,就可以在jumpServer中操作linux,来跑项目
  • 公司项目,会有一个gitlab仓库的服务,在linux通过git clone来获取项目 通常会有业务服务器,构建服务器,构建服务器构建完之后推送到业务服务器中执行
  • 建议不要直接在业务服务器中构建项目,因为在构建过程中,会消耗内存,容易造成业务服务器内存不足,导致资源紧张,会有宕机的风险

项目日志导出​

  • pm2日志
bash
pm2 status
# 查看pm2的全部进程
pm2 list
# 查看某个进程的信息,可以看到进程的日志文件路径
pm2 show name

# 查看2026-08-22的pm2日志写入到 tmp/pm2-2026-08-22.log
grep "2026-08-22" -r /var/log/lab/demo-node-out.log > /tmp/pm2-2026-08-22.log
  • 在本机终端执行scp下载日志导出
    • 远程到linux服务器
    • 找到tmp/pm2-2026-08-22.log文件
    • 复制到~/Downloads/目录中
bash
# 在Mac 终端里执行
scp -P 2223 dev@localhost:/tmp/pm2-2026-08-22.log ~/Downloads/

在linux容器安装nginx​

在linux容器中安装nginx,来使用nginx配置、反向代理等流程

  • Nginx放在linux-server 容器中
  • 在现有的 linux-server 容器中直接安装并运行 Nginx
  • Nginx 是通过 Dockerfile 直接构建到 linux-server 镜像中的,可以不需要手动进入容器安装。
bash
# 在Dockerfile中增加
apt-get install nginx