欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Docker容器/实例、数据的备份和迁移

Docker容器/实例、数据的备份和迁移

2025/10/25 17:40:38 来源:https://blog.csdn.net/abu935009066/article/details/143429375  浏览:    关键词:Docker容器/实例、数据的备份和迁移

文章目录

  • 应用场景
    • 测试环境的快速迁移
    • 多环境的并行开发
  • 备份容器运行环境,但不包括数据卷的数据
    • 1.查找容器ID
    • 2.创建新镜像
    • 3.备份新镜像为tar文件
    • 4.加载新镜像
    • 5.使用新镜像启动容器
  • 备份数据卷
    • 1.找到容器使用的数据卷挂载路径
    • 2.备份数据卷
    • 3.数据卷恢复数据

应用场景

测试环境的快速迁移

在实际应用中,我们常常需要迁移测试环境。如果完全重新安装,过程不仅费时费力,而且容易出错。在这种情况下,可以利用 Docker 的移植性和快速部署特性,快速迁移一套完整的测试环境。通过备份当前测试环境的容器镜像和数据卷,我们可以在新的环境中迅速还原,实现无缝过渡。

多环境的并行开发

开发和测试团队往往需要同时处理多个项目。Docker 可以让我们在同一台机器上并行运行多个容器,每个容器可以对应不同的项目环境。这样,不仅节省了硬件资源,还减少了环境切换带来的麻烦。

备份容器运行环境,但不包括数据卷的数据

1.查找容器ID

# 查看所有容器
docker ps -a
# 查看镜像
docker images
# 一次性删除所有的容器
docker rm $(docker ps -q -a) 
# 一次性删除所有的镜像
docker rmi $(docker images -q) 
# 删除 image 文件
docker image rm [imageName]

2.创建新镜像

# 把容器创建一个新的镜像。
docker commit 容器ID 新镜像名称:标签
docker commit e80ebe336e4f mysql:laker.1.0# 查看镜像
docker images

推送镜像:如果希望将镜像推送到Docker注册中心,需要先运行docker login命令登录进Docker注册中心,然后使用docker push命令推送所需的镜像。例如,docker push image-name命令将把镜像推送到Docker注册中心。

3.备份新镜像为tar文件

# 保存镜像文件,执行命令等一会儿
docker save -o 备份文件名.tar 新镜像名称:标签
docker save -o mysql-laker.tar mysql:laker.1.0
# 查看大小
du -sh mysql-laker.tar

4.加载新镜像

把tar包上传到新备份服务器,以下命令下新服务器执行

scp mysql-laker.tar 用户@目标主机IP:/path/to/destination

# 从tar文件加载镜像
docker load -i mysql-laker.tar
# 查看镜像
docker images

5.使用新镜像启动容器

docker run -d --name 新容器名称 新镜像名称:标签
docker run -d --name laker-mysql-test -p 3306:3306 mysql:laker.1.0
# 停止并删除容器
docker stop laker-mysql-test
docker rm laker-mysql-test

备份数据卷

1.找到容器使用的数据卷挂载路径

# 找出容器使用的数据卷
docker inspect 容器ID
# 查看数据卷挂载路径
docker inspect 容器ID | grep "Mounts" -A 10
# 查看所有卷
docker volume ls
# 查看容器内部的挂载路径
docker inspect 容器ID | grep "Destination"
docker inspect e80ebe336e4f | grep "Destination"

在输出中查找 Mounts 部分,这一节包含了挂载的所有卷的详细信息,包括卷的名称和挂载路径。以下是典型的 Mounts 信息:

"Mounts": [{"Type": "volume","Name": "my_data_volume", # 数据卷的名称"Source": "/var/lib/docker/volumes/my_data_volume/_data",# 数据卷在主机系统中的实际存储路径"Destination": "/var/lib/mysql",#数据卷在容器内的挂载路径"Driver": "local","Mode": "rw","RW": true,"Propagation": ""}
]
  • Name:数据卷的名称(如 my_data_volume)。
  • Source:数据卷在主机系统中的实际存储路径。
  • Destination:数据卷在容器内的挂载路径。

2.备份数据卷

# /路径/数据卷 为上面的 Destination 数据卷在容器内的挂载路径
docker run --rm --volumes-from 容器ID -v $(pwd):/backup ubuntu tar cvf /backup/备份文件名.tar /路径/数据卷docker run --rm --volumes-from e80ebe336e4f -v $(pwd):/backup ubuntu tar cvf /backup/laker-data.tar /var/lib/mysql

-v $(pwd):/backup 的意思是将主机的当前目录(由 $(pwd) 获取)挂载到容器内的 /backup 路径下。具体解释如下:

  • -v 参数:用于在 Docker 容器中挂载一个卷或目录,允许在容器和主机之间共享文件或目录。
  • $(pwd):这是一个 Shell 命令,返回当前的工作目录路径。$(pwd) 的实际值会被替换成当前目录的绝对路径。例如,如果当前工作目录是 /home/user, 那么 $(pwd) 的值就是 /home/user
  • /backup:这是容器内部的路径。在容器启动后,容器内的 /backup 路径将指向主机上的当前目录($(pwd))。

3.数据卷恢复数据

# 查找新的容器ID
docker ps -a
# 在恢复数据之前,确保容器处于停止状态,特别是在进行物理备份恢复时。
docker stop laker-mysql-test
# 注意是新容器ID
# cd /路径/数据卷 进入数据卷在容器内的挂载路径。需要替换为实际的挂载路径。即上面的 Destination
docker run --rm --volumes-from 新容器ID -v $(pwd):/backup ubuntu bash -c "cd /路径/数据卷 && tar xvf /backup/备份文件名.tar --strip 1"docker run --rm --volumes-from b4006a68eb30 -v $(pwd):/backup ubuntu bash -c "cd /var/lib/mysql && tar xvf /backup/laker-data.tar --strip 1"# 重启容器
docker restart <container_name>
docker restart laker-mysql-test
# 查看日志
docker logs <container_name>
docker logs laker-mysql-test
# 查看文件 
docker exec -it laker-mysql-test bash
cd /var/lib/mysql
rm -rf *
# 如果有问题可以先清空数据卷(注意:这将删除所有现有数据)
# VOLUME_NAME 参考上面找 docker inspect 容器ID | grep "Mounts" -A 10
docker run --rm -v $VOLUME_NAME:/var/lib/mysql ubuntu bash -c "rm -rf /var/lib/mysql/*"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词