Skip to main content

docker-compose 导出导入容器教程

在Ubuntu 23.04上,如果你使用 docker-compose 创建了容器,并且希望将其导出并拷贝到另一台服务器上进行恢复,可以按照以下步骤进行操作:

在源服务器上导出容器和数据
1. 停止容器
首先,停止通过 docker-compose 创建的容器:
docker-compose down


2. 导出镜像
导出 docker-compose 中定义的所有镜像:

docker-compose config | awk '/image:/{print $2}' | xargs -I {} docker save -o {}.tar {}

这将为 docker-compose.yml 中定义的所有镜像创建 .tar 文件。

3. 导出数据卷(如果有使用数据卷)
如果容器使用了数据卷并且你想备份这些数据卷,可以使用以下命令:
首先,列出容器使用的数据卷:


docker volume ls

然后,导出特定的数据卷(例如 my_volume):
docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar czf /backup/my_volume.tar.gz -C /volume .


4. 打包为 tar.gz
将导出的镜像和数据卷一起打包为 tar.gz 文件:

tar czf docker_backup.tar.gz *.tar *.tar.gz
拷贝文件到目标服务器
将 docker_backup.tar.gz 文件拷贝到目标服务器,可以使用 scp 或其他文件传输工具。

scp docker_backup.tar.gz user@target_server:/path/to/destination

在目标服务器上恢复

1. 解压 tar.gz 文件
在目标服务器上解压 docker_backup.tar.gz 文件:

tar xzf docker_backup.tar.gz

2. 加载镜像
加载导出的Docker镜像:

for image in *.tar; do docker load -i $image; done

3. 还原数据卷(如果有备份数据卷)

还原数据卷:
docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar xzf /backup/my_volume.tar.gz -C /volume

4. 启动容器
确保 docker-compose.yml 文件已复制到目标服务器,然后启动容器:

docker-compose up -d

示例操作总结
在源服务器上:

停止容器:

docker-compose down
导出镜像:

docker-compose config | awk '/image:/{print $2}' | xargs -I {} docker save -o {}.tar {}

docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar czf /backup/my_volume.tar.gz -C /volume .
打包为 tar.gz:

tar czf docker_backup.tar.gz *.tar *.tar.gz
传输文件:

scp docker_backup.tar.gz user@target_server:/path/to/destination
在目标服务器上:

解压 tar.gz 文件:

tar xzf docker_backup.tar.gz
加载镜像:

for image in *.tar; do docker load -i $image; done
还原数据卷(可选):

docker run --rm -v my_volume:/volume -v $(pwd):/backup busybox tar xzf /backup/my_volume.tar.gz -C /volume
启动容器:

docker-compose up -d
通过这些步骤,你可以成功地将 docker-compose 创建的容器从一台服务器导出并恢复到另一台服务器上