数据迁移与克隆
容器数据需要迁移和备份,下面介绍 Docker 数据迁移方法。
docker cp 命令
容器到宿主机
Bash
# 拷贝容器文件到宿主机
docker cp my-container:/app/data ./data
# 拷贝目录
docker cp my-container:/var/lib/mysql ./mysql-backup
宿主机到容器
Bash
# 拷贝宿主机文件到容器
docker cp ./config.yml my-container:/app/config.yml
# 拷贝目录
docker cp ./data my-container:/app/data
docker cp类似 scp,支持容器与宿主机之间文件传输。
Volume 备份
备份数据卷
Bash
# 创建临时容器备份
docker run --rm \
-v my-volume:/data \
-v $(pwd):/backup \
alpine \
tar czf /backup/volume-backup.tar.gz -C /data .
# 输出: volume-backup.tar.gz
恢复数据卷
Bash
# 创建新卷
docker volume create new-volume
# 从备份恢复
docker run --rm \
-v new-volume:/data \
-v $(pwd):/backup \
alpine \
tar xzf /backup/volume-backup.tar.gz -C /data
容器迁移
导出容器
Bash
# 导出容器为 tar 包
docker export my-container > container.tar
# 查看导出内容
tar -tf container.tar
导入容器
Bash
# 导入为镜像
docker import container.tar my-image:latest
# 指定标签
docker import -c 'CMD ["/bin/bash"]' container.tar my-image:latest
docker export/import导出文件系统,不包含元数据(端口、环境变量等)。
镜像迁移
保存与加载
Bash
# 保存镜像为 tar 包
docker save my-image:latest > image.tar
# 加载镜像
docker load < image.tar
# 查看加载的镜像
docker images
docker save/load保存完整镜像(包含层和元数据),推荐用于迁移。
推送到仓库
Bash
# 标记镜像
docker tag my-image:latest registry.example.com/my-image:latest
# 推送
docker push registry.example.com/my-image:latest
# 拉取
docker pull registry.example.com/my-image:latest
环境克隆
克隆容器
Bash
# 从容器创建镜像
docker commit my-container cloned-image:latest
# 运行克隆
docker run -d --name cloned-container cloned-image:latest
docker commit保留容器当前状态,但不包含数据卷内容。
完整迁移示例
Bash
# 1. 备份数据卷
docker run --rm -v db-data:/data -v $(pwd):/backup alpine \
tar czf /backup/db-data.tar.gz -C /data .
# 2. 保存镜像
docker save postgres:15 > postgres.tar
# 3. 迁移到新主机
scp db-data.tar.gz postgres.tar user@new-host:~
# 4. 新主机恢复
docker load < postgres.tar
docker volume create db-data
docker run --rm -v db-data:/data -v $(pwd):/backup alpine \
tar xzf /backup/db-data.tar.gz -C /data
# 5. 启动容器
docker run -d --name db -v db-data:/var/lib/postgresql/data postgres:15
要点总结
docker cp在容器与宿主机之间拷贝文件- Volume 备份使用临时容器 + tar 打包
docker export/import导出文件系统,不含元数据docker save/load保存完整镜像,推荐用于迁移docker commit克隆容器状态,但不包含数据卷
📝 发现内容有误?点击此处直接编辑