要求学习者参照示例完成将busyboxContainer
容器的文件系统保存为一个tar
包,通过该tar
包导入一个busybox:v1.0
镜像。
相关知识
将“容器的文件系统”保存到tar包
docker export
是将“容器的文件系统”导出为一个tar
包。注意是操作的对象是容器!它的具体语法如下:
docker export [OPTIONS] CONTAINER
其中:
docker export
:Docker
将容器导出到tar
包的命令关键词;OPTIIONS
: 命令选项,-o
指定写到一个文件中,而不是标准输出流中;Container
: 需要导出到tar
包的容器。
例如,将容器container1
的“文件系统”保存到tar
包,对应的语句如下:
docker export container1 > container1.tar
或者
docker export container1 -o container1.tar
从tar包导入一个镜像
docker import
使用docker export
导出的tar包加载为一个镜像。它的具体语法如下:
docker import [OPTIONS] 文件|URL|- [镜像名]
其中:
docker import
:Docker
从tar
包加载镜像的命令关键词;OPTIIONS
: 命令选项;文件|URL|
: 指定docker import
的对象,可以是文件或者某个URL
;[镜像名]
: 以<仓库名>:<标签>
的方式来指定。
例如,从container1.tar
中加载镜像,镜像名为test:v1.0
,对应的语句如下:
cat container1.tar | docker import - test:v1.0
实例
在本机以ubuntu
镜像为基础创建了一个容器,并在容器的/dir1
目录下创建了1.txt
和2.txt
两个文件,然后将改容器导出为tar
文件。
[root@localhost step2]# docker run -it ubuntu /bin/bash
root@a2864c3ed14f:/# touch /dir1/1.txt
root@a2864c3ed14f:/# touch /dir1/2.txt
[root@localhost tempdir]# docker export a286 > ubuntu-test.tar
[root@localhost tempdir]# ls
ubuntu-test.tar
执行cat ubuntu-test.tar | docker import - ubuntu:test
命令,将导出的tar
包(ubuntu-test.tar)
导入成一个镜像,镜像名为ubuntu:test
。然后使用ubuntu:test
创建一个容器,查看容器中/dir1
的内容,发现1.txt
和2.txt
都存在。
[root@localhost tempdir]# cat ubuntu-test.tar | docker import - ubuntu:test
sha256:34be0173049d9f177d84117a786bc02de18c9c84137ea9c61288810c0917c671
docker export和docker save的区别
首先,两者的操作对象不同。docker save
是将一个镜像保存为一个tar
包,而docker export
是将一个容器快照保存为一个tar
包。
然后,docker export
导出的容器快照文件将丢弃所有的历史记录和元数据信息,即仅保存容器当时的快照状态;而docker save
保存的镜像存储文件将保存完整记录,体积也要大。下图就能够很好的说明,ubuntu:test
仅仅占97.8MB
而ubuntu:latest
却占了120MB
。
[root@localhost step2]# docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu test 34be0173049d 5 seconds ago 97.8 MB
ubuntu latest 14f60031763d 2 weeks ago 120 MB
[root@localhost tempdir]# docker run ubuntu:test ls /dir1
1.txt
2.txt