当前位置: 首页 > news >正文

容器镜像的导入导出

容器镜像的导入导出

第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.txt2.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.8MBubuntu: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
  2. 平台运行step3/imexporttest.sh,并以标准输入方式提供测试输入;
  3. 平台获取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 **********#

http://www.lryc.cn/news/63899.html

相关文章:

  • Java每日一练(20230502)
  • JVM学习(九):堆
  • golang - switch
  • 浙大数据结构与算法一些有意思的理论基础题
  • 【热门框架】Mybatis-Plus怎样进行映射匹配兼容?Mybatis-Plus的ID有哪些生成策略
  • Http1.0 、1.1、2.0、3.0的区别
  • Python——基于YOLOV8的车牌识别(源码+教程)
  • c# 数据保存为PDF(一) (spire pdf篇)
  • Stable Diffusion使用方法
  • 高性能:负载均衡
  • Matplotlib 安装介绍
  • DNS:关于 DNS 基本概念的一些笔记整理
  • 机器人学一些知识
  • 应用,auto,内联函数
  • Flask框架的学习---01
  • 免费gpt-4-国内使用gpt-4
  • 《程序员面试金典(第6版)面试题 16.09. 运算
  • asp.net基于web的校园美食派送配送系统
  • 【JAVA】#详细介绍!!! 文件操作之File对象(1)!
  • Vue基本的内置指令
  • 华为孟晚舟当值首秀:2030年AI算力将增长500倍!
  • 关于python异常的总结
  • 基于Java+SpringBoot+vue学生学习平台详细设计实现
  • 【云原生网关】Kong 使用详解
  • 浅谈之Java多线程
  • 【Vue3学习笔记1】一个清单应用帮你入门Vue.js
  • go破冰之旅·8·go函数基本实践及各种玩法
  • Qt - 从零到壹的 打地鼠 游戏
  • 代码自动发布系统
  • qemu-基础篇(一)——安装