Docker容器如何备份?

2021-11-01 15:36:14 浏览数 (1)

背景:

为什么要备份容器?

作为一名合格的程序猿, 时时刻刻都要思考应用或者(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

温馨提示:文字上有错位的建议在电脑端阅读更为友好.

总结:

测试是一门技术, 更是一门艺术. 也许你今天拥有的技术, 明天就会被淘汰. 同时需要我们开拓思维和眼界, 积极拥抱变化, 学习新知识, 新方法,新技能, 计算机领域讲究的是实践, 学习更要讲究方式方法. 学习和动手一定要结合, 光看不练,犹如看武功秘籍, 是永远成不了武功大侠的.

0 人点赞