wordpress做导语合肥网站seo
容器镜像的导入导出
第1关:导入导出容器
任务描述
本关任务是学习导入导出容器,要求学习者参照示例完成将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,对应的语句如下:
docker 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
任务要求
本关的编程任务是补全step3/imexport.sh文件中的内容,要求实现导入导出容器。具体要求如下,
- 将
busyboxContainer容器的文件系统保存为一个tar包; - 通过该
tar包导入一个busybox:v1.0镜像。
本关涉及的代码文件step3/imexport.sh的代码框架如下:
#!/bin/bash
#以busybox为镜像创建一个容器,容器名为busyboxContainer
docker run --name busyboxContainer busybox echo "hello"
#1.然后将busyboxContainer导出为容器快照:busybox.tar
#********** Begin *********#
#********** End **********#
#2.最后使用该容器快照导入镜像,镜像名为busybox:v1.0。
#********** Begin *********#
#********** End **********#
测评说明
下面是对平台如何评测你所实现功能的说明及样例测试。本关的测试文件是step3/imexporttest.sh。
具体测试过程如下:
- 平台运行
step3/imexport.sh; - 平台运行
step3/imexporttest.sh,并以标准输入方式提供测试输入; - 平台获取
step3/imexporttest.sh的输出,然后将其与预期输出比较,如果一致则测试通过;否则测试失败。
以下是平台对step3/imexport.sh的样例测试集: 测试输入: 无 测试输出: success
参考答案:
#以busybox为镜像创建一个容器,容器名为busyboxContainer
#拉取busybox 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。
docker pull busybox
docker run --name busyboxContainer busybox echo "hello"
#1.然后将busyboxContainer导出为容器快照:busybox.tar
#********** Begin *********#
docker export busyboxContainer > busybox.tar.gz
#********** End **********#
#2.最后使用该容器快照导入镜像,镜像名为busybox:v1.0
#********** Begin *********#
cat busybox.tar.gz | docker import - busybox:v1.0
#********** End **********#
