容器镜像的导入导出

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 容器镜像的导入导出

容器镜像的导入导出


第1关:导入导出容器


任务描述


本关任务是学习导入导出容器,要求学习者参照示例完成将busyboxContainer容器的文件系统保存为一个tar包,通过该tar包导入一个busybox:v1.0镜像。


相关知识


将 "容器的文件系统"保存到 tar 包


docker export是将“容器的文件系统”导出为一个tar包。注意是操作的对象是容器!它的具体语法如下:


  1. 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包加载为一个镜像。它的具体语法如下:


  1. docker import [OPTIONS] 文件|URL|- [镜像名]


其中:


  • docker import: Dockertar包加载镜像的命令关键词;


  • OPTIIONS: 命令选项;


  • 文件|URL|: 指定docker import的对象,可以是文件或者某个URL


  • [镜像名]: 以<仓库名>:<标签>的方式来指定。


例如,从container1.tar中加载镜像,镜像名为test:v1.0,对应的语句如下:


docker cat container1.tar | docker import - test:v1.0


实例


在本机以ubuntu镜像为基础创建了一个容器,并在容器的/dir1目录下创建了1.txt2.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


具体测试过程如下:


  1. 平台运行step3/imexport.sh


  1. 平台运行step3/imexporttest.sh,并以标准输入方式提供测试输入;


  1. 平台获取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 **********#
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Docker 容器
Docker入门(8)-- Docker 将容器打包成镜像以及导入导出
Docker 将容器打包成镜像以及导入导出
7282 0
|
5月前
|
Docker 容器
Docker容器导入导出
Docker容器导入导出
74 1
|
Ubuntu Docker Python
Docker-05-容器导入导出
Docker-05-容器导入导出
143 0
|
Linux Docker 容器
docker 镜像与容器的导入导出操作实践
公司有一台测试服务器,网速比较慢,特别是下载一些国外站点镜像的时候,而我本机则比较快,还有梯子,所以在思考一个问题;是否能在我本地把镜像下载下来,然后复制到测试服务器中。
459 0
|
Docker 容器
docker学习系列17 镜像和容器的导入导出
先说总结: docker save保存的是镜像(image),docker export保存的是容器(container); docker load用来载入镜像包,docker import用来载入容器,但两者都会恢复为镜像; docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
1119 0
|
20天前
|
Linux iOS开发 Docker
Docker:容器化技术的领航者 —— 从基础到实践的全面解析
在云计算与微服务架构日益盛行的今天,Docker作为容器化技术的佼佼者,正引领着一场软件开发与部署的革命。它不仅极大地提升了应用部署的灵活性与效率,还为持续集成/持续部署(CI/CD)提供了强有力的支撑。
201 69
|
7天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
10天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
20天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。