网站首页 > 基础教程 正文
介绍
在生产环境和测试环境下,使用Docker进行应用程序的容器化部署时,我们经常需要对容器进行备份和恢复操作。备份容器可以保证数据的安全性,而恢复操作可以帮助我们快速恢复出现问题的容器。Docker提供了docker export和docker commit两种方式。
docker export: 这个命令将一个正在运行或已停止的容器的文件系统打包为一个压缩的 tar 文件,但不保留历史记录和元数据。它不包含容器的运行时状态、进程、环境变量等信息,只包含容器的文件系统快照。使用 docker export 创建的 tar 文件可以在其他 Docker 环境中通过 docker import 命令导入为镜像。导入后的镜像没有与原始容器相同的历史记录和元数据。
docker commit: 这个命令将容器的当前状态保存为一个新的镜像,并保留历史记录和元数据。它将容器的文件系统更改、进程状态等保存到新的镜像中。使用 docker commit 创建的镜像可以直接用作基于此镜像的新容器的基础。镜像中包含容器的文件系统和运行时状态。
两者的主要区别:
(1)docker commit 导出的镜像包含容器的完整文件系统和运行时状态,可以直接用作基于此镜像的新容器的基础。
(2)docker export 导出的 tar 文件只包含容器的文件系统快照,不包含容器的运行时状态或元数据。需要使用 docker import 将其导入为镜像后才能使用。
因此,如果您需要保留容器的完整状态并将其作为基础创建新容器,可以使用 docker commit。如果只需要容器的文件系统快照,并将其在其他 Docker 环境中导入为镜像,可以使用 docker export 和 docker import 组合。
docker commit用法
[root@docker-operation ~]# docker commit --help Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] Create a new image from a container's changes Aliases: docker container commit, docker commit Options: -a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>") -c, --change list Apply Dockerfile instruction to the created image -m, --message string Commit message -p, --pause Pause container during commit (default true) |
docker export用法
[root@docker-operation ~]# docker export --help Usage: docker export [OPTIONS] CONTAINER Export a container's filesystem as a tar archive Aliases: docker container export, docker export Options: -o, --output string Write to a file, instead of STDOUT |
docker import用法
[root@docker-operation ~]# docker import --help Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] Import the contents from a tarball to create a filesystem image Aliases: docker image import, docker import Options: -c, --change list Apply Dockerfile instruction to the created image -m, --message string Set commit message for imported image --platform string Set platform if server is multi-platform capable |
docker commit操作效果
具体操作效果如下:
说明:测试centos-ssh镜像安装vi后备份和恢复效果。
# 下载pull cenos-ssh |
[root@docker-operation ~]# docker pull jdeathe/centos-ssh Using default tag: latest latest: Pulling from jdeathe/centos-ssh ac9208207ada: Pull complete 1cde45171c62: Pull complete c063da263f82: Pull complete f20f3b11e67b: Pull complete Digest: sha256:808153e5a72a4e0e0683a4c445bb8b3bb5f6c01cba5ee3eb5cc059ea3bd565c8 Status: Downloaded newer image for jdeathe/centos-ssh:latest docker.io/jdeathe/centos-ssh:latest |
# 查看下载的centos images |
[root@docker-operation ~]# docker images|grep centos-ssh jdeathe/centos-ssh latest f47765d0cf63 4 years ago 228MB |
# 启动centos-ssh容器 |
[root@docker-operation ~]# docker run -d --name centos-ssh -p 32768:22 jdeathe/centos-ssh f484f494f0432cb190ce85faa7be9a252aaf9e706b6aa7793d66720f9abe97d9 |
# 查看容器运行情况 |
[root@docker-operation ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f484f494f043 jdeathe/centos-ssh "/usr/bin/supervisor…" 36 seconds ago Up 35 seconds (healthy) 0.0.0.0:32768->22/tcp, :::32768->22/tcp centos-ssh |
# 进入centsos-ssh容器,yum安装vi |
[root@docker-operation ~]# docker exec -it centos-ssh /bin/bash [root@f484f494f043 /]# vi test.log bash: vi: command not found [root@f484f494f043 /]# yum install -y vi Loaded plugins: fastestmirror, ovl, versionlock Determining fastest mirrors epel/x86_64/metalink | 12 kB 00:00:00 * base: mirrors.cqu.edu.cn * centos-sclo-rh: mirrors.cqu.edu.cn * centos-sclo-sclo: mirrors.cqu.edu.cn * epel: mirrors.aliyun.com * extras: mirrors.cqu.edu.cn * updates: mirrors.cqu.edu.cn base | 3.6 kB 00:00:00 centos-sclo-rh | 3.0 kB 00:00:00 centos-sclo-sclo | 3.0 kB 00:00:00 epel | 4.3 kB 00:00:00 extras | 2.9 kB 00:00:00 ius | 1.3 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/10): base/7/x86_64/group_gz | 153 kB 00:00:00 (2/10): centos-sclo-rh/x86_64/primary_db | 3.4 MB 00:00:00 (3/10): centos-sclo-sclo/x86_64/primary_db | 300 kB 00:00:00 (4/10): extras/7/x86_64/primary_db | 253 kB 00:00:00 (5/10): epel/x86_64/group | 399 kB 00:00:00 (6/10): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (7/10): updates/7/x86_64/primary_db | 27 MB 00:00:00 (8/10): epel/x86_64/primary_db | 8.7 MB 00:00:00 (9/10): ius/x86_64/primary | 40 kB 00:00:02 (10/10): base/7/x86_64/primary_db | 6.1 MB 00:00:03 ius 159/159 Excluding 6 updates due to versionlock (use "yum versionlock status" to show them) Resolving Dependencies --> Running transaction check ---> Package vim-minimal.x86_64 2:7.4.160-5.el7 will be updated ---> Package vim-minimal.x86_64 2:7.4.629-8.el7_9 will be an update --> Finished Dependency Resolution Dependencies Resolved =============================================================================================================================================================================================================== Package Arch Version Repository Size =============================================================================================================================================================================================================== Updating: vim-minimal x86_64 2:7.4.629-8.el7_9 updates 443 k Transaction Summary =============================================================================================================================================================================================================== Upgrade 1 Package Total download size: 443 k Downloading packages: Delta RPMs disabled because /usr/bin/applydeltarpm not installed. vim-minimal-7.4.629-8.el7_9.x86_64.rpm | 443 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating 2:vim-minimal-7.4.629-8.el7_9.x86_64 1/2 Cleanup : 2:vim-minimal-7.4.160-5.el7.x86_64 2/2 Verifying : 2:vim-minimal-7.4.629-8.el7_9.x86_64 1/2 Verifying : 2:vim-minimal-7.4.160-5.el7.x86_64 2/2 Updated: vim-minimal.x86_64 2:7.4.629-8.el7_9 Complete! [root@f484f494f043 /]# whereis vi vi: /usr/bin/vi [root@f484f494f043 /]# vi centos_vi.log [root@f484f494f043 /]# cat centos—?i.log This is test centos vi tools!!!!: |
# 停止centos-ssh容器并备份 # 建议执行commit前,必须从容器中退出,可以不停止容器。 |
[root@docker-operation ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f484f494f043 jdeathe/centos-ssh "/usr/bin/supervisor…" 11 minutes ago Up 11 minutes (healthy) 0.0.0.0:32768->22/tcp, :::32768->22/tcp centos-ssh [root@docker-operation ~]# docker stop centos-ssh centos-ssh [root@docker-operation ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f484f494f043 jdeathe/centos-ssh "/usr/bin/supervisor…" 11 minutes ago Exited (0) 1 second ago centos-ssh [root@docker-operation ~]# docker commit centos-ssh centos-ssh-vi:1.0 sha256:ee058d711294f7c52f6ad9045395761c27812407319f6fd46cacc9df55b45598 [root@docker-operation ~]# docker images |grep centos-ssh-vi centos-ssh-vi 1.0 ee058d711294 52 seconds ago 542MB |
# 基于新的centos-ssh-vi images创建一个容器 |
[root@docker-operation ~]# docker run -d --name centos-ssh-vi centos-ssh-vi:1.0 9c46b58edfc2bab4be5338a4ddf4d9161502e30e0612251c3c08f44bd87de5de [root@docker-operation ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c46b58edfc2 centos-ssh-vi:1.0 "/usr/bin/supervisor…" 8 seconds ago Up 7 seconds (healthy) 22/tcp centos-ssh-vi f484f494f043 jdeathe/centos-ssh "/usr/bin/supervisor…" 16 minutes ago Exited (0) 5 minutes ago centos-ssh |
# 进入centos-ssh-vi容器,检查vi是否可用 |
[root@docker-operation ~]# docker exec -it centos-ssh-vi /bin/bash [root@9c46b58edfc2 /]# whereis vi vi: /usr/bin/vi |
通过以上操作,就可以成功进行docker 容器的备份和恢复。 |
说明:docker 容器的备份和恢复仅仅局限在本机OS内,若是想将备份images用于其他OS的docker,还需docker save来完成。
docker export和import操作效果
本次操作以centos-ssh容器来完成export和import,以及与commit的区别。操作如下:
# 查看镜像和容器 |
[root@docker-operation-02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-ssh-vi 1.0 ee058d711294 17 minutes ago 542MB busybox latest beae173ccac6 2 years ago 1.24MB httpd latest dabbfbe0c57b 2 years ago 144MB jdeathe/centos-ssh latest f47765d0cf63 4 years ago 228MB [root@docker-operation-02 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c46b58edfc2 centos-ssh-vi:1.0 "/usr/bin/supervisor…" 17 minutes ago Up 17 minutes (healthy) 22/tcp centos-ssh-vi f484f494f043 jdeathe/centos-ssh "/usr/bin/supervisor…" 34 minutes ago Up 2 seconds (healthy) 0.0.0.0:32768->22/tcp, :::32768->22/tcp centos-ssh |
# export导出centos-ssh-vi容器,如下: |
[root@docker-operation-02 ~]# docker export -o "centos-ssh-vi.tar" centos-ssh-vi [root@docker-operation-02 ~]# ls anaconda-ks.cfg centos-ssh-vi.tar initial-setup-ks.cfg |
# import导入新镜像 |
[root@docker-operation-02 ~]# docker import --message "import centos-ssh-vi:2.0" centos-ssh-vi.tar centos-ssh-vi:2.0 sha256:6883779f89b8faef4e47ed6ec50fa9b5cbf18ea9e4b7f8cd3515b23713a3c669 [root@docker-operation-02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-ssh-vi 2.0 6883779f89b8 14 seconds ago 472MB centos-ssh-vi 1.0 ee058d711294 29 minutes ago 542MB busybox latest beae173ccac6 2 years ago 1.24MB httpd latest dabbfbe0c57b 2 years ago 144MB jdeathe/centos-ssh latest f47765d0cf63 4 years ago 228MB |
# 测试新镜像centos-ssh-vi:2.0是否存在vi工具 |
[root@docker-operation-02 ~]# docker run -d centos-ssh-vi:2.0 bash 817fd7ee62f4c3e6ace5711a34a50c0959c14032a38cadd620532bdd207aa6a8 |
# 查看容器状态 |
截止:docker export和import完成。
docker import镜像运行容器常见错误
(1)错误现象
借用刚刚导入镜像centos-ssh-vi:2.0,如下:
错误现象“docker: Error response from daemon: No command specified.”,如下:
注意:运行导入的镜像的时候必须带command,否则启动报如下错误
查看原有镜像启动时的command,如下:
猜你喜欢
- 2024-10-17 Gulp 导出任务 excel正在导出请稍后前往导出任务列表下载
- 2024-10-17 word转pdf免费网站 word转化pdf免费
- 2024-10-17 Linux知识点之变量与环境变量 linux环境变量生效顺序
- 2024-10-17 JS module的导出和导入的实现代码
- 2024-10-17 Linux下的文件操作和系统交互 linux与linux之间文件传输
- 2024-10-17 linux source命令是干啥的? linux source命令作用
- 2024-10-17 oracle逻辑备份与恢复|常用导出导入命令介绍
- 2024-10-17 快来看看这些shell基础知识你知道几个
- 2024-10-17 Linux怎么设置环境变量 linux设置环境变量ld_library_path
- 2024-10-17 Linux 系统中PATH一个示例 linux的path
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)