hudada-cli
Version:
专为程序员准备的本地文档搜索,快捷开发工具
159 lines (123 loc) • 3.29 kB
Markdown
# 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