容器镜像制作2

本文详细介绍了通过Dockerfile和docker build命令构建容器镜像的过程,包括FROM、RUN、WORKDIR、ADD等关键命令的用法,并通过示例解释了ENV、CMD、ENTRYPOINT命令的作用。在构建过程中,Docker会自动压缩无数据修改的镜像层,多个中间状态的镜像可能被合并为一层。此外,文章还强调了Dockerfile用于记录镜像制作过程的重要性,便于理解和复用。
摘要由CSDN通过智能技术生成

在上一个实验中我们验证了通过docker commit命令生成镜像时,会在原有的镜像层之上添加一个新的层。接下来我们来看一下通过docker build方式生成的镜像的层次结构。

  1. 查看镜像层次

我们也用docker inspect命令来查看一下镜像img6-1的层次信息,结果会发现docker build在基础镜像之上构建多个了新的镜像。

docker inspect -f "{
  {json .RootFS.Layers}}" img6-1 | jq

  1. 查看镜像历史

通过docker build生成的镜像。除了docker inspcet之外,还可以通过docker history命令来查看通过Dockerfile定义的镜像的生成方式。我们可以看到docker history命令输出了镜像构建的过程信息,通过这一信息我们能比较清晰的看到镜像作者在制作镜像时的具体操作。

docker history img6-1

  1. 镜像层次和镜像历史之间的关系

当我们执行上两个步骤的时候,细心的同学可能会发现,docker history中的每一个步骤都会生成一个中间状态的镜像,但是镜像的层数和镜像的步骤并不是严格的一一对应关系。这是因为docker会自动压缩一些没有实际产生数据修改的镜像,将多个临时镜像压缩成一层。比如WORKDIR命令所生成的中间状态。

同样我们可以比较img6-2和img6-3镜像。我们会发现虽然这两个镜像包含了很多的步骤,但是由于没有实际向镜像中写入文件,因此这两个镜像的存储层实际上和基础镜像ubuntu的存储层保持一致,这就以为着这两个镜像并没有在看本地镜像仓库中额外消耗存储控件。

docker history img6-2
docker inspect -f "{
  {json .RootFS.Layers}}" img6-2 | jq
docker history img6-3
docker inspect -f "{
  {json .RootFS.Layers}}" img6-3 | jq
docker inspect -f "{
  {json .RootFS.Layers}}" ubuntu | jq

前面的实验中我们学习了如何通过docker commit命令将一个编辑好的容器,生成一个新的镜像。但是这种方法生成的容器可以查看的只有文件层面的变更内容,容器的使用者往往会搞不清楚在容器制作过程中执行了什么命令,按什么顺序执行了这些命令或者操作。因此除了这种方法之外,Docker还提供了另一种docker build的方式来构建容器。

  1. 制作Dockerfile文件

要使用docker build的方式制作容器,我们需要先制作Dockerfile文件。D

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值