
1. 项目概述在服务器运维和开发环境中Docker已经成为不可或缺的基础设施。但很多企业内网环境或特殊场景下服务器无法直接连接互联网进行在线安装。上周我在给某金融机构部署私有云平台时就遇到了必须在Ubuntu x86_64系统上离线安装Docker的需求。经过反复测试验证最终整理出这套稳定可靠的离线安装方案。这个方案适用于Ubuntu 18.04/20.04/22.04等主流LTS版本特别适合以下场景金融、政务等安全要求高的内网环境生产环境需要严格版本控制的场景网络条件受限的远程服务器部署需要批量部署相同Docker版本的集群环境重要提示离线安装前请确保目标系统架构为x86_64可通过uname -m命令验证且系统已安装依赖的基础工具如tar、gzip等。2. 准备工作与资源获取2.1 离线安装包获取策略离线安装Docker需要准备三个核心组件Docker引擎安装包docker-ceDocker CLI工具Containerd容器运行时推荐通过以下两种方式获取离线安装包方法一官方仓库下载推荐# 在有网络的机器上执行 mkdir docker-offline cd docker-offline apt-get download docker-ce docker-ce-cli containerd.io方法二第三方镜像站下载如果官方源速度慢可以使用阿里云镜像站curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/focal/pool/stable/amd64/ \ | grep -E docker-ce|containerd \ | awk -F {print $2} \ | xargs -I {} wget https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/focal/pool/stable/amd64/{}2.2 依赖包完整性检查下载完成后应该包含以下关键文件以Ubuntu 20.04为例docker-ce_24.0.2~ubuntu-focal_amd64.deb docker-ce-cli_24.0.2~ubuntu-focal_amd64.deb containerd.io_1.6.21-1_amd64.deb常见问题如果缺少libseccomp2等依赖包会导致后续安装失败。建议同时下载libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.debdocker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb3. 离线安装详细步骤3.1 传输安装包到目标机器将下载好的deb包通过U盘或内网传输到目标服务器。我通常使用scp命令scp -r docker-offline/ usertarget-server:/tmp/3.2 安装依赖环境在目标服务器上执行sudo apt-get update sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release \ ./libseccomp2*.deb3.3 安装Docker组件按顺序安装关键组件sudo dpkg -i containerd.io*.deb sudo dpkg -i docker-ce-cli*.deb sudo dpkg -i docker-ce*.deb sudo dpkg -i docker-buildx-plugin*.deb3.4 验证安装结果检查服务状态和版本sudo systemctl start docker sudo docker version正常输出应包含Client: Docker Engine - Community Version: 24.0.2 API version: 1.43 Go version: go1.20.4 Server: Docker Engine - Community Engine: Version: 24.0.2 API version: 1.43 (minimum version 1.12)4. 常见问题与解决方案4.1 依赖关系错误处理如果遇到类似错误dpkg: dependency problems prevent configuration of docker-ce: docker-ce depends on libseccomp2 ( 2.3.0); however: Version of libseccomp2 on system is 2.4.1-0ubuntu0.20.04.2.解决方法sudo apt-get install -f4.2 服务启动失败排查如果systemctl start docker失败检查日志journalctl -xe -u docker常见原因及解决cgroup驱动不匹配sudo mkdir -p /etc/docker echo {exec-opts: [native.cgroupdriversystemd]} | sudo tee /etc/docker/daemon.json sudo systemctl restart docker存储驱动问题sudo rm -rf /var/lib/docker sudo systemctl restart docker4.3 离线环境使用Docker离线环境下需要提前准备镜像# 在有网络的机器上拉取镜像并导出 docker pull ubuntu:20.04 docker save -o ubuntu20.tar ubuntu:20.04 # 在离线环境导入 docker load -i ubuntu20.tar5. 高级配置与优化5.1 离线镜像仓库搭建对于长期离线环境建议搭建私有镜像仓库docker pull registry:2 docker run -d -p 5000:5000 --restartalways --name registry registry:25.2 磁盘空间管理离线环境尤其需要注意磁盘空间# 设置Docker数据目录大小限制 sudo mkdir -p /etc/docker echo {data-root: /data/docker, storage-driver: overlay2} | sudo tee /etc/docker/daemon.json sudo systemctl restart docker5.3 安全加固措施离线环境的安全配置# 禁用远程API访问 echo {hosts: [unix:///var/run/docker.sock]} | sudo tee /etc/docker/daemon.json # 启用用户命名空间隔离 sudo echo dockremap:165536:65536 /etc/subuid sudo echo dockremap:165536:65536 /etc/subgid6. 批量部署方案对于需要批量安装的场景可以编写自动化脚本#!/bin/bash # offline-docker-install.sh DOCKER_DIR/tmp/docker-offline install_pkg() { sudo dpkg -i $DOCKER_DIR/containerd.io*.deb sudo dpkg -i $DOCKER_DIR/docker-ce-cli*.deb sudo dpkg -i $DOCKER_DIR/docker-ce*.deb sudo apt-get install -f -y } setup_daemon() { sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 } EOF } start_services() { sudo systemctl enable --now docker sudo usermod -aG docker $USER } main() { install_pkg setup_daemon start_services docker version } main使用方式chmod x offline-docker-install.sh sudo ./offline-docker-install.sh7. 版本管理与升级策略7.1 版本锁定方法为防止意外升级可以固定Docker版本sudo apt-mark hold docker-ce docker-ce-cli containerd.io7.2 离线升级流程当需要升级时在有网络环境下载新版本deb包按照相同步骤传输到目标服务器执行sudo apt-mark unhold docker-ce docker-ce-cli containerd.io sudo dpkg -i *.deb sudo apt-mark hold docker-ce docker-ce-cli containerd.io8. 生产环境最佳实践经过多个金融项目的验证我总结出以下经验版本一致性所有生产节点必须使用完全相同的Docker版本镜像预加载部署前将所需基础镜像全部导入日志轮转配置合理的日志策略防止磁盘爆满sudo tee /etc/docker/daemon.json -EOF { log-driver: json-file, log-opts: { max-size: 50m, max-file: 3 } } EOF资源限制为容器设置合理的CPU和内存限制备份策略定期备份/var/lib/docker目录9. 性能调优技巧针对x86_64架构的特别优化# 启用性能模式 sudo cpupower frequency-set -g performance # 优化内核参数 sudo tee /etc/sysctl.d/docker.conf -EOF net.ipv4.ip_forward1 net.bridge.bridge-nf-call-iptables1 net.bridge.bridge-nf-call-ip6tables1 vm.swappiness10 vm.overcommit_memory1 EOF sudo sysctl -p /etc/sysctl.d/docker.conf10. 监控与维护离线环境更需要完善的监控# 简易监控脚本 while true; do docker stats --no-stream df -h /var/lib/docker sleep 5 done对于长期运行的离线环境建议每周检查一次磁盘使用情况每月清理一次无用镜像和容器docker system prune -f每季度验证一次备份可恢复性我在实际部署中发现采用这套方案后即使在完全离线的环境中Docker的稳定性和性能都能满足生产级需求。特别是在金融行业的合规检查中这种可控的安装方式更容易通过安全审计。