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-ce)
- Docker 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.deb
- docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb
3. 离线安装详细步骤
3.1 传输安装包到目标机器
将下载好的deb包通过U盘或内网传输到目标服务器。我通常使用scp命令:
scp -r docker-offline/ user@target-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.cgroupdriver=systemd"]}' | sudo tee /etc/docker/daemon.json sudo systemctl restart docker存储驱动问题:
sudo rm -rf /var/lib/docker sudo systemctl restart docker
4.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 --restart=always --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.cgroupdriver=systemd"], "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.io
8. 生产环境最佳实践
经过多个金融项目的验证,我总结出以下经验:
- 版本一致性:所有生产节点必须使用完全相同的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_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 vm.swappiness=10 vm.overcommit_memory=1 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的稳定性和性能都能满足生产级需求。特别是在金融行业的合规检查中,这种可控的安装方式更容易通过安全审计。