Docker 之 打包

今天我们来谈一谈怎样保存对一个容器的修改,生成自己的镜像。
先来看一个例子,然后详细分析一下每一步具体都做了什么:

  1. docker run --name hw_container ubuntu:latest touch /helloworld

启动一个容器,并创建一个 helloworld 目录

  1. docker commit hw_container hw_image

将我们之前所作的修改,保存成一个镜像

  1. docker rm -vf hw_container

删除容器

  1. docker run --rm hw_image ls -l /helloworld

检查更新是否生效

在这里插入图片描述
上图描述了从容器到一个新镜像的流程。

当执行docker commit命令一个新的层就会被写入到镜像,于此同时运行容器的环境变量、工作目录、暴露的端口、挂载目录、可执行的命令以及参数都会被写入到新的镜像中。我们来看一个例子:

  1. docker run --name rich-image-example -e ENV_EXAMPLE1=Rich -e ENV_EXAMPLE2=Example busytbox:latest
  2. docker commit rich-image-example rie
  3. docker run --rm rie /bin/sh -c “echo \$ENV_EXAMPLE1 \$ENV_EXAMPLE2”

将entrypoint 和 command 写入到 镜像
  1. docker run --name rich-image-example2 --entrypoint “/bin/sh” rie -c “echo \$ENV_EXAMPLE1 \$ENV_EXAMPLE2”
  2. docker commit rich-image-example2 rie
  3. docker run --rm rie

要理解一个镜像的生成过程,我们需要深入的了解UFS (Union File System)。 请看下图:
在这里插入图片描述
Docker commit 命令之后新的可写成将变为只读层,这也是为什么每次commit 之后镜像的size会变大的原因。

怎样知道我们对容器进行了哪些修改?

docker diff container_name
A 表添加 C 表修改 D表删除

怎样查看镜像有哪些层组成?

docker history image_name

这里我们另外再介绍一种生成镜像的方式, 我们可以把对容器的改动导出成一个tar文件,然后导入tar文件生成镜像。命令如下:

  1. docker export
  2. docker import

具体如何使用,这里不做详细介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值