网站建设培训东莞市,网站原创性,宁波外贸公司实力排名,淄网站做网站容器镜像的导入导出
第1关#xff1a;导入导出容器
任务描述
本关任务是学习导入导出容器#xff0c;要求学习者参照示例完成将busyboxContainer容器的文件系统保存为一个tar包#xff0c;通过该tar包导入一个busybox:v1.0镜像。
相关知识
将 容器的文件系统导入导出容器
任务描述
本关任务是学习导入导出容器要求学习者参照示例完成将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文件。
[rootlocalhost step2]# docker run -it ubuntu /bin/bash
roota2864c3ed14f:/# touch /dir1/1.txt
roota2864c3ed14f:/# touch /dir1/2.txt
[rootlocalhost tempdir]# docker export a286 ubuntu-test.tar
[rootlocalhost 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都存在。
[rootlocalhost tempdir]# cat ubuntu-test.tar | docker import - ubuntu:test
sha256:34be0173049d9f177d84117a786bc02de18c9c84137ea9c61288810c0917c671docker export 和 docker save的区别
首先两者的操作对象不同。docker save是将一个镜像保存为一个tar包而docker export是将一个容器快照保存为一个tar包。
然后docker export导出的容器快照文件将丢弃所有的历史记录和元数据信息即仅保存容器当时的快照状态而docker save保存的镜像存储文件将保存完整记录体积也要大。下图就能够很好的说明ubuntu:test仅仅占97.8MB而ubuntu:latest却占了120MB。
[rootlocalhost 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
[rootlocalhost 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 **********#