偷偷学 Docker 系列 | 镜像分层概念 | 容器创建方法 - 基于已有镜像 - 基于本地模板 - 基于 Dockerfile(重点)

本文详细介绍了Docker镜像的分层原理,每条Dockerfile指令对应镜像的一层,并讨论了如何基于已有镜像、本地模板以及Dockerfile创建容器。重点探讨了Dockerfile的结构和指令,以及如何通过它来构建定制化镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Docker 镜像分层

Dockerfile 由多条指令构成,随着深入研究 Dockerfile 与镜像的关系,很快大家就会发现,Dockerfile 中的每一条指令都会对应于 Docker 镜像中的一层。

继续以如下 Dockerfile 为例:

FROM ubuntu:14.04		#指定新镜像所基于的镜像,用于创建镜像
ADD run.sh /			#将脚本添加至该镜像中,启动容器后就可以使用了
VOLUME /data			#在容器中创建挂载点(-v)
CMD ["./run.sh"] 		#启动该脚本/命令

通过 docker build 以上 Dockerfile 的时候,会在 ubuntu:14.04 镜像基础上,添加三层独立的镜像,依次对应于三条不同的命令。镜像示意图如下:

mark

可以看出,镜像在生成的过程中是以分层的方式生成的:

  1. Dockerfile 中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)
  2. 镜像层将被缓存和复用(后续的镜像层将基于前面的一层)
  3. 当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了(后续操作必然更改前面的镜像层),那么对应的镜像层缓存就会失效(就会自动销毁)
  4. 某一层的镜像缓存失效之后,它之后的镜像层缓存就都会失效(第一层不成功,那么第二层也就再成功,相当于地基)
  5. 容器的修改并不会影响镜像,如果在某一层中添加一个文件,如果在下一层中就会删除它,镜像中依然会包含该文件

二、Docker 容器创建方法

1.基于已有镜像创建

本创建方法实质上就是将一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像

命令格式:
docker commit [选项] 容器ID/名称 仓库名称:[标签]

常用选项:
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行

例:
1.创建容器
[root@docker ~]# docke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xucf1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值