背景:
为什么要备份容器?
作为一名合格的程序猿, 时时刻刻都要思考应用或者(service)的容错以及灾备, 他是保障我们日后快速恢复工作必不可少的条件.
容器由于种种原因会损坏而无法正常work, 这时候全公司的人都等着这个系统使用, 这是后排查问题还不如直接使用一个备份镜像更为便捷和快速 .
备份容器:
1. 在远程主机上查看当前容器列表
docker ps -a
[zhouhuwei@localhost ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
403e6db0c jenkins/jenkins "/sbin/tini -- /usr/…" 9 days ago Up 9 days 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins
a7d775e3d mysql "docker-entrypoint.s…" 10 days ago Up 9 days 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
2.制作容器备份
docker commit -p 403e6db0c jenkins_backup
其中 403e6db0c 是容器id, jenkins_backup是备份名称
3. 查看备份是否成功
docker images
[zhouhuwei@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql_backup latest a35fea6c 37 minutes ago 514MB
jenkins_backup latest edfced2 38 minutes ago 444MB
确认已经成功备份
4. 将镜像制作成文件
说明:
使用docker save 可能需要使用root权限
保存的命令是:
docker save -o [filename] [image]
[zhouhuwei@localhost ~]$ docker save -o jenkins_backup.tar jenkins_backup
[zhouhuwei@localhost ~]$ ls
jenkins_backup.tar
备份文件制作完成
5. 在本地使用命令将镜像从远程备份到本地
louie-mac:~ louiezhou$ scp zhouhuwei@192.168.10.10:/home/zhouhuwei/jenkins_backup.tar /Users/louiezhou/home/sf/DockerImageBackup
zhouhuwei@192.168.10.10's password:
jenkins_backup.tar 100% 639MB 7.7MB/s 01:23
备份到本地目录是:/Users/louiezhou/home/sf/DockerImageBackup
到此就将镜像备份到本地, 我们去对应目录check下:
louie-mac:~ louiezhou$ cd /Users/louiezhou/home/sf/DockerImageBackup
louie-mac:DockerImageBackup louiezhou$ ls -lh
total 1310752
-rw------- 1 louiezhou staff 639M 10 18 10:42 jenkins_backup.tar
恢复容器:
1. 为了验证容器是否能正常导入, 先删除docker 里的镜像
docker rmi jenkins
2.导入
docker load < /Users/louiezhou/home/sf/DockerImageBackup/jenkins_backup.tar
louie-mac:sf louiezhou$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins_backup latest edfced27a56e 32 minutes ago 444MB
3.运行镜像
sudo docker run -p 8080:8080 -name jenkins -d jenkins_backup
4. 启动成功
903e6db0c jenkins/jenkins "/sbin/tini -- /usr/…" Up 1 min 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins
温馨提示:文字上有错位的建议在电脑端阅读更为友好.
总结:
测试是一门技术, 更是一门艺术. 也许你今天拥有的技术, 明天就会被淘汰. 同时需要我们开拓思维和眼界, 积极拥抱变化, 学习新知识, 新方法,新技能, 计算机领域讲究的是实践, 学习更要讲究方式方法. 学习和动手一定要结合, 光看不练,犹如看武功秘籍, 是永远成不了武功大侠的.