UNPKG

hudada-cli

Version:

专为程序员准备的本地文档搜索,快捷开发工具

159 lines (123 loc) 3.29 kB
# Docker 镜像迁移指南 ## 一、使用 save 和 load 命令 ### 1. 保存镜像到文件 ```bash # 基本语法 docker save -o <输出文件名>.tar <镜像名称>:<标签> # 示例 docker save -o my-app.tar my-app:v1 docker save -o nginx-custom.tar nginx:latest ``` ### 2. 传输文件到服务器 ```bash # 使用 scp 命令 scp my-app.tar username@remote-server:/path/to/destination # 使用 rsync 命令(推荐,支持断点续传) rsync -avzP my-app.tar username@remote-server:/path/to/destination ``` ### 3. 在服务器上加载镜像 ```bash # 基本语法 docker load -i <文件名>.tar # 示例 docker load -i my-app.tar ``` ## 二、使用 Docker Registry ### 1. 搭建私有仓库 ```bash # 在服务器上运行 Registry 容器 docker run -d \ -p 5000:5000 \ --restart=always \ --name registry \ -v /mnt/registry:/var/lib/registry \ registry:2 ``` ### 2. 推送镜像到私有仓库 ```bash # 1. 标记本地镜像 docker tag my-app:v1 server-ip:5000/my-app:v1 # 2. 推送镜像 docker push server-ip:5000/my-app:v1 ``` ### 3. 在服务器上拉取镜像 ```bash docker pull localhost:5000/my-app:v1 ``` ## 三、使用 Docker Hub ### 1. 推送到 Docker Hub ```bash # 1. 登录 Docker Hub docker login # 2. 标记镜像 docker tag my-app:v1 username/my-app:v1 # 3. 推送镜像 docker push username/my-app:v1 ``` ### 2. 在服务器上拉取 ```bash # 1. 登录 Docker Hub(如果是私有镜像) docker login # 2. 拉取镜像 docker pull username/my-app:v1 ``` ## 四、最佳实践 ### 1. 压缩传输文件 ```bash # 使用 gzip 压缩 docker save my-app:v1 | gzip > my-app.tar.gz # 在服务器上解压并加载 gunzip -c my-app.tar.gz | docker load ``` ### 2. 批量迁移 ```bash # 保存多个镜像 docker save -o images.tar image1:tag1 image2:tag2 # 使用脚本批量处理 for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do docker save $image | gzip > "${image//\//_}.tar.gz" done ``` ### 3. 验证迁移 ```bash # 检查镜像完整性 docker images # 测试运行容器 docker run --rm my-app:v1 echo "Test successful" ``` ## 五、注意事项 1. **镜像大小考虑** - 大型镜像建议使用压缩传输 - 考虑使用多阶段构建减小镜像体积 - 可以使用 `docker history` 查看镜像层信息 2. **网络因素** - 使用私有仓库时确保网络连通性 - 大文件传输建议使��� rsync - 考虑使用镜像加速器 3. **安全性** - 使用 HTTPS 进行镜像传输 - 定期清理不使用的镜像 - 注意权限控制 4. **版本管理** - 使用明确的版本标签 - 保留版本记录 - 建议使用语义化版本号 ## 六、常见问题解决 ### 1. 磁盘空间不足 ```bash # 清理未使用的镜像 docker system prune -a # 检查镜像和容器占用空间 docker system df ``` ### 2. 传输中断 ```bash # 使用 rsync 断点续传 rsync -avzP --partial my-app.tar username@remote-server:/path/to/destination ``` ### 3. 权限问题 ```bash # 修改文件权限 chmod 644 my-app.tar # 修改目录权限 chmod 755 /path/to/registry