局域网部署docker服务器:

一、整体架构与角色划分(先明确边界)

1️⃣ 拉取服务器(Build / Pull 节点)

定位

  • 允许频繁 docker restart / reboot

  • 可访问公网(或代理)

  • 专门负责:

    • docker pull

    • docker save

    • 镜像归档、校验

特点

  • 不承载任何生产业务

  • 出问题可随时重建

  • 可以是虚机 / 物理机 / 临时节点

    2️⃣ 生产服务器(Runtime 节点)

    定位

    • 只做:

      • docker load

      • docker run / compose up

    • 不直接 pull 公网镜像

    • 不允许无计划重启 Docker

    特点

    • 服务稳定优先

    • 镜像来源可控、可审计

      二、拉取服务器的标准化准备步骤

      Step 1:安装 Docker(最小化)
      # Rocky / openEuler / RHEL 系
      dnf install -y docker
      systemctl enable docker --now

      Step 2:配置镜像加速(强烈建议)

      mkdir -p /etc/docker
      cat > /etc/docker/daemon.json <<'EOF'
      {
      "registry-mirrors": [
      "https://docker.mirrors.ustc.edu.cn",
      "https://mirror.ccs.tencentyun.com"
      ],
      "log-driver": "json-file",
      "log-opts": {
      "max-size": "100m",
      "max-file": "3"
      }
      }
      EOF

      systemctl restart docker

      三、镜像拉取与固化流程(核心)

      Step 3:明确镜像清单(非常关键)

      不要随手 pull
      必须形成一个镜像清单文件

      示例:images.txt

      nginx:1.24
      redis:7.2
      postgres:15.6
      jumpserver/jms_all:v3.10.6

      Step 4:拉取镜像(带校验)
      while read img; do
      docker pull "$img"
      done < images.txt

      docker images

      Step 5:镜像重新打 tag(推荐)

      避免生产环境 tag 混乱:
      docker tag nginx:1.24 registry.local/nginx:1.24
      docker tag redis:7.2 registry.local/redis:7.2

      registry.local 只是逻辑前缀,不是真的仓库)

      Step 6:镜像导出(save)

      单镜像导出(调试用)
      docker save nginx:1.24 -o nginx_1.24.tar

      生产推荐:一次性打包
      docker save \
      nginx:1.24 \
      redis:7.2 \
      postgres:15.6 \
      -o prod_images_2026-01-28.tar

      压缩(可选):
      xz -T0 prod_images_2026-01-28.tar
      # 或
      gzip prod_images_2026-01-28.tar

      Step 7:生成校验文件(强烈建议)
      sha256sum prod_images_2026-01-28.tar.xz \
      > prod_images_2026-01-28.tar.xz.sha256

      四、传输到生产服务器

      推荐方式:
      scp prod_images_2026-01-28.tar.xz root@prod:/opt/docker-images/
      scp prod_images_2026-01-28.tar.xz.sha256 root@prod:/opt/docker-images/

      或:

      • 内网 SFTP

      • 内网对象存储

      • NAS / NFS

      五、生产服务器加载流程(零影响)

      Step 8:校验完整性
      cd /opt/docker-images
      sha256sum -c prod_images_2026-01-28.tar.xz.sha256

      Step 9:加载镜像(不会影响正在运行容器
      xz -d prod_images_2026-01-28.tar.xz
      docker load -i prod_images_2026-01-28.tar

      ⚠️ 关键认知:

      docker load 不会重启 Docker daemon
      不会中断任何正在运行的容器

      Step 10:确认镜像已就绪
      docker images | grep nginx

      六、生产部署时的规范(你这个方案的“闭环”)

      强制原则

      1. ❌ 生产机 禁止 docker pull

      2. ✅ 只允许 docker load

      3. ✅ docker-compose / run 使用 明确版本 tag

      4. ❌ 禁止 latest

      示例:
      services:
      web:
      image: nginx:1.24

      七、进阶增强方案(你以后一定会用到)

      方案 A:私有 Registry(推荐规模化后)

      在拉取服务器上部署:
      docker run -d \
      --name registry \
      -p 5000:5000 \
      -v /data/registry:/var/lib/registry \
      registry:2

      然后:
      docker tag nginx:1.24 10.0.0.10:5000/nginx:1.24
      docker push 10.0.0.10:5000/nginx:1.24

      生产服务器:
      docker pull 10.0.0.10:5000/nginx:1.24
      (此时 pull 走内网,不影响外网、不重启 Docker)

      方案 B:镜像交付目录规范
      /docker-release/
      ├── 2026-01-28/
      │ ├── images.tar.xz
      │ ├── images.sha256
      │ └── images.txt

版权声明:
作者:yxbinghe
链接:https://www.zhanhao.ch/?p=623
来源:ice.99
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>