断网救急!手把手教你用U盘完成Docker环境迁移(Ubuntu版)
·
断网救急!手把手教你用U盘完成Docker环境迁移(Ubuntu版)
当你在工业现场调试设备时,突然发现网络中断,而客户的生产线正等着你的Docker环境部署——这种场景对工程师来说简直是噩梦。本文将分享一套经过实战验证的U盘迁移方案,让你在完全离线的环境下,15分钟内恢复完整的Docker工作环境。
1. 准备工作:制作便携式安装U盘
选择Ubuntu 20.04 LTS(Focal)作为基准系统并非偶然。这个长期支持版本不仅稳定,其官方deb包还保留了完整的依赖关系链,特别适合离线安装。以下是制作安装U盘的关键步骤:
-
下载官方deb包组合:
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/{containerd.io_*.deb,docker-ce_*.deb,docker-ce-cli_*.deb} -
验证文件完整性(重要!):
sha256sum docker-ce_*.deb > checksums.txt -
U盘目录结构建议:
/docker-offline/ ├── deb-packages/ │ ├── containerd.io_1.4.12-1_amd64.deb │ ├── docker-ce-cli_20.10.12~3-0~ubuntu-focal_amd64.deb │ └── docker-ce_20.10.12~3-0~ubuntu-focal_amd64.deb ├── docker-compose └── images/ └── app-backup.tar
提示:建议使用exFAT格式的U盘,既能支持大文件又兼容Linux/Windows双系统
2. 离线安装核心组件
2.1 Docker引擎安装
在目标机器上执行以下命令序列时,注意观察依赖报错(虽然官方包通常能自动解决):
sudo dpkg -i containerd.io_*.deb
sudo dpkg -i docker-ce-cli_*.deb
sudo dpkg -i docker-ce_*.deb
常见问题处理:
- 若出现
libseccomp2依赖错误,可从Ubuntu官方仓库下载对应版本的deb包 - 工业设备常遇到的时区问题可通过以下命令预防:
sudo timedatectl set-timezone Asia/Shanghai
2.2 极简版docker-compose部署
不同于常规的Python安装方式,我们采用静态编译的二进制文件:
sudo cp docker-compose /usr/local/bin/
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
验证安装:
docker-compose --version
# 输出应类似:Docker Compose version v2.3.3
3. 镜像迁移的两种策略对比
3.1 docker save vs docker export
| 特性 | docker save | docker export |
|---|---|---|
| 保存格式 | 分层存储(完整镜像) | 扁平化文件系统(仅容器快照) |
| 元数据保留 | 完整保留标签、历史记录 | 仅保留文件系统 |
| 典型用途 | 镜像备份/迁移 | 容器状态快照 |
| 恢复命令 | docker load | docker import |
| 文件大小 | 较大(保留所有层) | 较小(单层) |
实战建议:
- 需要完整开发环境时用
docker save:docker save -o /mnt/usb/images/full-env.tar myapp:1.2 - 只需运行态数据时用
docker export:docker export mycontainer > /mnt/usb/data/container-snapshot.tar
4. 断网环境下的生存技巧
4.1 容器自启动方案
在/etc/systemd/system/下创建服务单元:
[Unit]
Description=MyApp Container
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a myapp
ExecStop=/usr/bin/docker stop -t 2 myapp
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable myapp-container
4.2 空间不足的应急处理
当U盘空间紧张时,可以:
- 清理Docker缓存:
docker system prune -af - 使用
--exclude参数选择性备份:tar -cvf backup.tar --exclude='*.log' appdata/ - 压缩镜像(节省30%-50%空间):
docker save myapp:1.2 | gzip > myapp-1.2.tar.gz
5. 实战案例:工业控制器迁移
某PLC控制系统的Docker环境包含:
- ModbusTCP网关容器
- 数据采集服务
- 时序数据库
迁移步骤:
-
在联网机器上打包完整环境:
docker save modbus-gateway:2.1 data-collector:1.4 influxdb:1.8 > plc-system.tar -
将tar文件和安装包拷贝到U盘
-
在目标设备上:
docker load < plc-system.tar docker network create plc-net docker run -d --net=plc-net --restart unless-stopped --name modbus modbus-gateway:2.1
注意:工业现场务必测试容器启动顺序,可使用
depends_on或健康检查机制
这套方案已在多个智能制造现场验证,最典型的成功案例是在某汽车焊装车间,工程师仅用8分钟就恢复了因网络故障瘫痪的视觉检测系统。关键点在于提前准备好包含所有依赖的U盘工具包,并定期更新镜像备份。
更多推荐
所有评论(0)