简介:本文详细阐述离线环境下Docker引擎安装、私有镜像仓库搭建及镜像管理的完整流程,包含离线包制作、安全配置、镜像同步等关键技术点。
在金融、政务、工业控制等对网络隔离有严格要求的场景中,Docker的离线部署面临三大核心挑战:
以CentOS 7为例,通过在线服务器制作离线包:
# 1. 安装Docker CE依赖sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 2. 添加Docker仓库(在线服务器执行)sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 3. 下载完整RPM包(含依赖)yum install --downloadonly --downloaddir=/docker_offline docker-ce docker-ce-cli containerd.io# 4. 生成依赖树文件yum deplist docker-ce > docker-dependencies.txt
将生成的/docker_offline目录和依赖树文件拷贝至离线环境。
在目标服务器执行:
# 1. 安装基础依赖sudo yum install -y /docker_offline/*.rpm# 2. 配置daemon.json(禁用默认网络)cat > /etc/docker/daemon.json <<EOF{"bip": "172.18.0.1/24","storage-driver": "overlay2","exec-opts": ["native.cgroupdriver=systemd"]}EOF# 3. 启动服务并验证sudo systemctl enable --now dockersudo docker run --rm hello-world
在/etc/sysctl.conf中添加:
net.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1fs.inotify.max_user_watches=524288
执行sysctl -p生效,解决容器间网络互通问题。
# 1. 基础部署命令sudo docker run -d \--name registry \--restart=always \-p 5000:5000 \-v /data/registry:/var/lib/registry \registry:2.8.1# 2. 添加基础镜像(示例)sudo docker pull alpine:3.16sudo docker tag alpine:3.16 localhost:5000/alpine:3.16sudo docker push localhost:5000/alpine:3.16
sudo docker run -d \
—name registry-secure \
-p 5000:5000 \
-v /certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2.8.1
2. **基本认证配置**:```bash# 生成密码文件mkdir -p /authdocker run --entrypoint htpasswd httpd:2 -Bbn testuser testpass > /auth/htpasswd# 修改启动参数-e REGISTRY_AUTH=htpasswd \-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \-v /auth:/auth \
IMAGES=(“alpine:3.16” “nginx:latest” “redis:6.2”)
for img in “${IMAGES[@]}”; do
sudo docker save -o “${img//:/_}.tar” $img
done
2. **镜像导入验证**:```bash# 导入镜像并验证sudo docker load -i nginx_latest.tarsudo docker images | grep nginx# 检查镜像层完整性docker inspect nginx:latest | grep "Layers"
定期更新机制:
skopeo工具进行跨环境镜像复制:
skopeo copy docker://registry.example.com/nginx:latest docker-archive:nginx.tar
资源监控方案:
sudo docker run -d \--name=cadvisor \-p 8080:8080 \-v /:/rootfs:ro \-v /var/run:/var/run:rw \-v /sys:/sys:ro \-v /var/lib/docker/:/var/lib/docker:ro \google/cadvisor:latest
灾难恢复方案:
/var/lib/docker和/var/lib/registry目录存储驱动错误处理:
failed to register layer错误时,检查/var/lib/docker目录权限daemon.json切换存储驱动:
{ "storage-driver": "devicemapper" }
网络配置问题:
bridge-utils检查网络桥接:
brctl showip addr show docker0
sudo docker network create --subnet=172.19.0.0/16 mynet
镜像推送失败排查:
/etc/hosts文件是否包含正确的仓库域名解析curl -v http://registry:5000/v2/_catalog验证仓库可达性通过上述方案,可在完全离线的生产环境中实现Docker的稳定运行和镜像的安全管理。实际部署时建议先在测试环境验证完整流程,特别注意内核版本与Docker存储驱动的兼容性,以及私有仓库的认证配置完整性。