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 config

3. 打包数据docker-compose.yml+config与data

下面是两种工具

打包和压缩文件通常使用targzip命令

  1. 使用tar打包文件或文件夹:

    tar -cvf output_name.tar directory_or_file_to_tar

    解释:

    • c - 创建新的归档文件

    • v - 显示进度在终端 (verbose)

    • f - 使用归档文件名。在这种情况下,它是output_name.tar

    1. 使用gzipbzip2压缩.tar文件:

      使用gzip:

      gzip output_name.tar

      使用bzip2:

      bzip2 output_name.tar
  2. 打包和压缩一步完成: 使用targzip一起,你可以在一个命令中完成打包和压缩:

    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.gzoutput_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之类的工具将备份包传输到目标机器后,解压。

解压命令:

  1. .tar 文件:

    tar -xvf filename.tar

    解释:

    • x - 提取

    • v - 显示进度 (verbose)

    • f - 指定要操作的文件名

  2. .gz 文件 (通常与 tar 结合使用为 .tar.gz.tgz 文件):

    解压 .gz 文件:

    gunzip filename.gz

    或者如果是 .tar.gz.tgz 文件:

    tar -xzvf filename.tar.gz

    解释:

    • x - 提取

    • z - 使用 gzip 解压

    • v - 显示进度 (verbose)

    • f - 指定要操作的文件名

  3. .bz2 文件 (通常与 tar 结合使用为 .tar.bz2 文件):

    解压 .bz2 文件:

    bunzip2 filename.bz2

    或者如果是 .tar.bz2 文件:

    tar -xjvf filename.tar.bz2

    解释:

    • x - 提取

    • j - 使用 bzip2 解压

    • v - 显示进度 (verbose)

    • f - 指定要操作的文件名

  4. .zip 文件:

    unzip filename.zip
  5. .rar 文件 (需要安装 rarunrar 工具):

    unrar x filename.rar

每次执行上述命令时,它们都会在当前目录下解压文件。如果你想在特定目录中解压,可以指定路径,或者先cd到目标目录,然后执行解压命令。

解压后,

按照需求修改基本内容,例如路径 端口,docker-compose up -d部署。

完成。

文章作者: scotee
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 思考题Scotee
喜欢就支持一下吧