Docker备份迁移的一个小思路
Docker备份迁移的一个小思路
以本次备份迁移的使用volume的nginx应用为例。

1. 首先是迁移数据。
两种情况,如果是直接在根目录的数据,保存即可
如果是volume目录
则需要cp命令导出:
dock ps
#找到对应的容器ID
docker cp <container-ID>:/data /root/nginx/data
docker cp <container-ID>:/etc/letsencrypt /root/nginx/letsencrypt
#导出到对应的目录!! 注意容器需要在启动状态。
2.其次是获取docker-compose.yml配置
因为可能在①第一次没有docker-compose部署;②初次docker-compose部署后进行了修改;③莫名的原因复活不了容器。
所以采取以下方法
!! 注意容器需要在停止状态。
通过portainer webui depulicate一次容器,命名为 <原名-test>。
#这步也可以省略,请自行测试。要么通过这个方式手动把所有的volume移动到根目录,制作新的容器。要么依照后文,直接把根目录和volume全都打包。

启动后docker ps
获取-test容器的ID
使用 docker-autocompose进行以下操作
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose <container-name-or-id>
或者
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose 921e16094deb > /root/autocompose/docker-compose.yml
获取容器的compose文件。
为多个容器生成:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose <container-1-name-or-id> <container-2-name-or-id>为所有运行的容器生成:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose $(docker ps -aq) # 或 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose $(docker ps -aq) > /root/docker-compose-generated.yml # Docker 宿主机上运行和停止的容器
修改其中的参数。(尽量不修改,如需修改最好在duplicate容器的时候就在portainer中修改好,可以测试是否运行没有问题)
验证输出:
当你获得docker-compose.yml文件后,你可以使用以下命令验证其结构是否正确:
docker-compose config3. 打包数据docker-compose.yml+config与data
下面是两种工具
打包和压缩文件通常使用tar和gzip命令
使用
tar打包文件或文件夹:tar -cvf output_name.tar directory_or_file_to_tar解释:
c- 创建新的归档文件v- 显示进度在终端 (verbose)f- 使用归档文件名。在这种情况下,它是output_name.tar
使用
gzip或bzip2压缩.tar文件:使用
gzip:gzip output_name.tar使用
bzip2:bzip2 output_name.tar
打包和压缩一步完成: 使用
tar与gzip一起,你可以在一个命令中完成打包和压缩:tar -czvf output_name.tar.gz directory_or_file_to_tar使用
bzip2的情况:tar -cjvf output_name.tar.bz2 directory_or_file_to_tar解释:
c- 创建新的归档文件z- 使用gzip压缩j- 使用bzip2压缩v- 显示进度 (verbose)f- 使用归档文件名
选择gzip还是bzip2主要取决于你的需要。通常,bzip2会提供更好的压缩率,但在压缩和解压时速度较慢。而gzip的速度较快,但压缩率稍差。
完成以上步骤后,你将获得一个名为output_name.tar.gz或output_name.tar.bz2的压缩文件,取决于你选择的压缩方法。
同时打包文件夹和docker-compose,最好docker-compose.yml直接生成在目录中。
du -sh /root #确认目录大小 mkdir -p /home/backup && tar -czvf /home/backup/root_backup.tar.gz -C /root .4. 解压数据docker-compose.yml+config与data
使用SCP或者FTP之类的工具将备份包传输到目标机器后,解压。
解压命令:
.tar文件:tar -xvf filename.tar解释:
x- 提取v- 显示进度 (verbose)f- 指定要操作的文件名
.gz文件 (通常与tar结合使用为.tar.gz或.tgz文件):解压
.gz文件:gunzip filename.gz或者如果是
.tar.gz或.tgz文件:tar -xzvf filename.tar.gz解释:
x- 提取z- 使用gzip解压v- 显示进度 (verbose)f- 指定要操作的文件名
.bz2文件 (通常与tar结合使用为.tar.bz2文件):解压
.bz2文件:bunzip2 filename.bz2或者如果是
.tar.bz2文件:tar -xjvf filename.tar.bz2解释:
x- 提取j- 使用bzip2解压v- 显示进度 (verbose)f- 指定要操作的文件名
.zip文件:unzip filename.zip.rar文件 (需要安装rar或unrar工具):unrar x filename.rar
每次执行上述命令时,它们都会在当前目录下解压文件。如果你想在特定目录中解压,可以指定路径,或者先cd到目标目录,然后执行解压命令。
解压后,
按照需求修改基本内容,例如路径 端口,docker-compose up -d部署。
完成。