Docker系统迁移步骤(备份和恢复方法)
粗略的转变趋势
-
- 获取容器镜像备份(源)
-
- 获取数据卷备份(源)
-
- 恢复容器镜像备份(目标)
- 恢复数据卷备份(目标)

为什么要进行容器镜像备份?
在本来的情况下,不应该有需要进行容器镜像备份的机制。备份是不应该被需要的。应该使用docker-compose文件或Dockerfile来实现一切,并且只要有文件,就应该能够始终构建(重新分配给他人)相同的环境。
然而,有时候可能需要进行无法自动化的设置。(例如Redmine的Backlogs插件等)
或者,如果不了解Docker的他人可能会未经许可访问容器并使用yum进行额外安装。因此,定期对容器进行镜像备份或在迁移至另一台机器时,需要获取最近的容器镜像。
为什么要进行容器卷的备份?
容器映像不包含卷,因此需要单独备份卷。
详细的转移步骤 de
请用中文翻译以下的题目,只需一种选项:
以下是使用docker-compose构建的Redmine迁移步骤的概述。请参考以下链接:
https://github.com/sameersbn/docker-redmine/tree/2.6-stable
假设将 docker-compose.yml 配置在以下目录中以进行构建:
/root/docker/redmine2.6/docker-compose.yml
切换初始操作
备份docker-compose.yml文件
# 创建一个名为 /root/bkup.yyyymmdd 的目录。
# 进入 /root/bkup.yyyymmdd 目录。
# 将 /root/docker/redmine2.6/docker-compose.yml 复制到当前目录,并保留原文件的权限和属性。
2. 备份容器映像。
docker镜像
→ 确认sameersbn_mod_yyyymmdd/redmine:2.6.10-2不存在
→ 确认sameersbn_mod_yyyymmdd/postgresql:9.4-18不存在
docker commit redmine26_redmine_1 sameersbn_mod_yyyymmdd/redmine:2.6.10-2 -> 将 redmine26_redmine_1 提交为 sameersbn_mod_yyyymmdd/redmine:2.6.10-2 的 Docker 镜像。
docker commit redmine26_postgresql_1 sameersbn_mod_yyyymmdd/postgresql:9.4-18 -> 将 redmine26_postgresql_1 提交为 sameersbn_mod_yyyymmdd/postgresql:9.4-18 的 Docker 镜像。
将redmine_yyyymmdd/redmine:2.6.10-2保存为redmine_bk_yyyymmdd.tar文件。
将redmine_yyyymmdd/postgresql:9.4-18保存为redmine_postgresql_bk_yyyymmdd.tar文件。
3.备份音量
使用docker运行最新版本的debian,从redmine26_postgresql_1容器中获取卷,并将当前目录绑定到/backup目录。然后,将/var/lib/postgresql目录打包成/backup/postgresql-data.tar文件。
使用docker运行最新版本的debian,从redmine26_redmine_1容器中获取卷,并将当前目录绑定到/backup目录。然后,将/home/redmine/data目录打包成/backup/redmine-data.tar文件。
4. 将传输转移到目标位置。
将docker-compose.yml和所有.tar文件通过scp命令发送到root@xxx.xxx.xxx.xxx:/root/docker/redmine
过渡阶段的操作
1. 恢复容器镜像
# cd /root/docker/redmine
# docker images
→ 确认sameersbn_mod_yyyymmdd/redmine:2.6.10-2不存在
→ 确认sameersbn_mod_yyyymmdd/postgresql:9.4-18不存在
用中文原生的方式重新表达以下内容,只需要一个选项:
#docker负载 -i redmine_bk_yyyymmdd.tar
#docker负载 -i redmine_postgresql_bk_yyyymmdd.tar
加载redmine_bk_yyyymmdd.tar的docker映像。
加载redmine_postgresql_bk_yyyymmdd.tar的docker映像。
# docker images
→ 确认存在 sameersbn_mod_yyyymmdd/redmine:2.6.10-2
→ 确认存在 sameersbn_mod_yyyymmdd/postgresql:9.4-18
2. 修改 docker-compose
编辑docker-compose.yml文件
将「sameersbn/redmine:2.6.10-2」改为「sameersbn_mod_yyyymmdd/redmine:2.6.10-2」
将「sameersbn/postgresql:9.4-18」改为「sameersbn_mod_yyyymmdd/postgresql:9.4-18」
3. 创建容器
当看到「redmine_redmine_1 exited with code 0」显示在最后时,按Ctrl-C停止docker-compose。
4. 音量恢复.
解压 postgresql-data.tar 文件。
# rm -rf /srv/docker/redmine/postgresql/9.4/main/*
重新放置解压的备份数据。
# cp -irp var/lib/postgresql/9.4/main/* /srv/docker/redmine/postgresql/9.4/main/
# ls -l /srv/docker/redmine/postgresql/
→ 确认权限
根据上述确认的权限进行设置。
# chown 102:106 -R /srv/docker/redmine/postgresql/9.4/main/
删除不再需要的目录。
rm -rf var/
这些操作需要重复执行,就像上面所写的一样。
# tar xvf redmine-data.tar
# rm -rf /srv/docker/redmine/redmine/*
# cp -irp home/redmine/data/* /srv/docker/redmine/redmine/
# ls -l /srv/docker/redmine/
→ 确认redmine目录的权限
# chown 1000:1000 -R /srv/docker/redmine/redmine/
# rm -rf home/
5. 重新启动容器
– 开始 Docker Compose
– 获取 Docker Compose 日志
– 确认是否没有输出错误消息
参考来源
http://qiita.com/lciel/items/e21a4ede3bac7fb3ec5a
https://docs.docker.com/engine/tutorials/dockervolumes/
以下是相关链接:
http://qiita.com/lciel/items/e21a4ede3bac7fb3ec5a
https://docs.docker.com/engine/tutorials/dockervolumes/
以上。 .)