优秀的编程知识分享平台

网站首页 > 技术文章 正文

Dockerfile文件书写建议(dockerfile用法)

nanyue 2024-07-22 14:01:41 技术文章 8 ℃

从镜像仓库得到Docker镜像,很多时候为了适应实际的生产环境,需要对镜像进行定制,首选方法就是编辑Dockerfile文件来Build镜像。Dockerfile文件书写有一些需要注意的地方,这篇文章给出一些书写Dockerfile文件的建议。

  • 运行apt-get

为了运行自己的代码,依赖的软件包需要安装,常用包管理工具来完成,比如apt-get。为了安装软件的最新版本,“apt-get install”之前会跟上"apt-get update"。应该将这两个命令放在一个RUN 语句里面,如果使用如下代码片段:

FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y curl

"apt-get install -y curl"命令会执行失败,因为它并没有使用到前面命令创建的缓存。

  • 使用COPY代替ADD

ADD有比COPY更多的功能,比如自动解归档tar文件(当通过URL拉取文件的时候,这个功能是失效的)、从远程URL获取文件。但为了避免一些非预料的问题,还是建议用COPY,尽量少用ADD。

  • 尽量不要使用 latest TAG

基镜像使用latest TAG一般没有什么问题,但是当基镜像有更新时,镜像的Build过程可能会突然中止,为了有一个稳定的构建过程,建议选择基镜像的固定版本,这样保证镜像build的顺利进行,比如:

FROM node:6.2.1
  • 不要在Dockerfile的开头使用EXPOSE和ENV

这两个语句的开销比较小,如果你破坏了为它们创建的缓存,也可以快速的重建,所以尽可能将这两个语句放到Dockerfile文件的后面,这样的话,如果你需要对EXPOSE或ENV的参数做修改,rebuild的过程也会非常快。

  • 使用VOLUME

Dockerfile中的VOLUME是在运行容器时添加的,而不是在镜像构建过程时添加。

FROM busybox:1.24
VOLUME /data
RUN echo "hello-world!!!!" > /data/myfile.txt

CMD ["cat", "/data/myfile.txt"]

$ docker run volume-in-build
cat: can't open '/data/myfile.txt': No such file or directory
  • 不要在一个容器中运行多个服务

在测试环境中,为了快速迭代可以这样操作,但是在生产环境中,不建议这样操作,第一是会影响容器的水平扩展,第二是因为越多的服务意味着更多的依赖,会影响镜像的构建速度,最后的弊端是这样的Dockerfile文件通常难以书写、维护和调试。
希望这篇文章对你书写Dockerfile文件有所帮助。

最近发表
标签列表