高效编写Dockerfile的几条准则

  • 时间:
  • 浏览:1
  • 来源:神彩大发快3_彩神大发快3官方

后来 下面就结合实践来讲十几条 Dockerfile 的实践心得!

Dockerfile 制作镜像时,会组合 CMD 和 ENTRYPOINT 指令来作为容器运行时的默认命令:即 CMD + ENTRYPOINT。此时的默认命令组成中:

相似后边的某种centos镜像是用来做wordpress用的,好多好多 后来集成了wordpress功能,某种看就很清晰明了

在我的文章 《利用K8S技术栈打造一点人私有云(连载之:基础镜像制作与实验)》 中,朋友 是基于某个Linux基础镜像作为底包,后来 打包进我才能 的功能从而形成一点人的镜像。

docker build镜像时,会顺序执行Dockerfile中的指令,并一起比较当前指令和其基础镜像的所有子镜像,若发现有原本子镜像也是由相同的指令生成,则 命中缓存,一起都才能直接使用该子镜像而防止再去重新生成了。

除此之外,在才能 再加多个文件到镜像中的后来,不须一次性集中再加,要是选择 按需 在必要时 逐个 再加即可,后来原本促进利用镜像缓存

举例:假如有一天我能要用 Dockerfile法子 基于最基本的 CentOS 镜像来构建原本不同的镜像时,原本Dockerfile的开头都才能相同:

若以默认命令运行容器,都才能发现,执行的是 ls -a -l 命令:

好多好多 应该在 docker run 命令中来用 -p 参数来指定端口映射,而不须将该工作置于 Dockerfile 之中:

就典型的Linux基础镜像来说,大小关系如下:

真是后边一根绳子 原则说推荐通过 COPY 命令来向镜像中再加多个文件,然而实际清况 中,若文件 大而多 的后来还是应该优先用 docker -v 命令来挂载文件,而前会 依赖于 ADD 后来 COPY

举个例子:

Dockerfile 都才能通过 EXPOSE指令 将容器端口映射到主机端口上,但原本会愿因 镜像在一台主机上仅能启动原本容器!

后来 推荐的使用法子是:

真是两者都都才能再加文件到镜像中,但在一般用法中,还是推荐以COPY指令为首选,愿因 在于ADD指令并这么COPY指令来的纯粹,ADD会再加一点额外功能,典型的如下 ADD 原本压缩包时,其不仅会克隆,前会 自动解压,而有时朋友 不须才能 某种额外的功能。

后来 相比 Ubuntu,真是更推荐使用最轻量级的 Debian镜像,后来 它也是原本完全的Release版,都才能放心使用

推荐通过共享 Dockerfile 的法子来共享镜像,优点多多:

也都才能发现执行的是 ls -l -t,即 Dockerfile 中的 CMD 原参数被覆盖了:

那些是镜像缓存?

作者相关的SpringBt实践文章在此:

然而写 Dockerfile 也像写代码一样,一份精心设计、Clean Code 的 Dockerfile 能在提高可读性的一起也大大提升Docker的使用效率

这里选择基础镜像时是有讲究的:

docker run 中增加参数 -t

后来有兴趣,也都才能抽点时间看看作者一点关于容器化、微服务化方面的文章:

为了有效地使用缓存,才能 保证 Dockerfile 中指令的 连续一致,尽量将相同指令的要素放满前面,而将有差异性的指令放满后边

由 Dockerfile 最终构建出来的镜像是在基础镜像之上一层层叠加而得,后来 在过程中会产生原本个新的 镜像层。Docker daemon 在构建镜像的过程中会缓存一系列后边镜像。