Docker—备份、恢复及迁移
用容器生成镜像
[root@git docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e950a988d058 twang2218/gitlab-ce-zh "/assets/wrapper" 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp gitlab-wahaha [root@git docker]# docker commit e950a988d058 gitalb-zh sha256:dd61a1ec3cdc782d6076e47afc10a35e19700a9ad56df6630a8c1de1c1c105c3 [root@git docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE gitalb-zh latest dd61a1ec3cdc 6 seconds ago 1.72 GB docker.io/twang2218/gitlab-ce-zh latest 1f71f185271a 9 days ago 1.63 GB
备份:
查看镜像
[root@git docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/twang2218/gitlab-ce-zh latest 1f71f185271a 9 days ago 1.63 GB
docker save -o [tar包真实路径] [镜像名 ](ID也可以)
ocker save -o /opt/docker-gitlab-ce-zh.tar docker.io/twang2218/gitlab-ce-zh
恢复:
docker load -i [tar包真实路径]
docker load -i /opt/docker-gitlab-ce-zh.tar
导出:是根据容器的 ID 进行导出镜像
[root@git docker]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e950a988d058 twang2218/gitlab-ce-zh "/assets/wrapper" 3 hours ago Up 3 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp gitlab-wahaha [root@git docker]# docker export e950a988d058 > /opt/gitlab-zh.tar
[root@git docker]# ls -lh /opt/ total 3.1G -rw------- 1 root root 1.7G Mar 20 02:16 docker-gitlab-ce-zh.tar -rw-r--r-- 1 root root 1.5G Mar 20 02:38 gitlab-zh.tar 可以看出导出的镜像比备份的镜像小很多,是因为导出的镜像没历史数据,不能回滚
导入:
[root@git docker]# docker import - git-mast < /opt/gitlab-zh.tar git-mast镜像名(注意中间的 - )
[root@git docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE git-mast latest 6dfab05161f9 14 seconds ago 1.49 GB docker/gitlab-zh latest aebe317ba2a3 16 minutes ago 1.72 GB gitalb-zh latest dd61a1ec3cdc 25 minutes ago 1.72 GB docker.io/twang2218/gitlab-ce-zh latest 1f71f185271a 9 days ago 1.63 GB
注:导出 export 与 保存 save 的区别
(1).export导出的镜像文件大小 小于 save保存的镜像
(2).export 导出(import导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);而save保存(load加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。(查看方式:docker images --tree)