📜  编写 Dockerfile 的最佳实践

📅  最后修改于: 2021-10-28 02:20:16             🧑  作者: Mango

如果您是 Docker 开发人员,或者您一直在尝试接触 Docker,那么您一定已经注意到创建高效的dockerfile 的重要性Dockerfile允许您提及一系列逐步执行的指令,每次执行都会在基础镜像之上创建一个中间镜像层。执行完最后一条指令后,您将获得最终的 Docker 映像。它可以帮助您自动化整个过程并帮助跟踪您所做的所有更改。基本上,它是您图像的蓝图。

Docker 容器的性能可能因您在dockerfile 中指定的步骤顺序而异。因此,非常注意包含在 dockerfile中的步骤,这一点非常重要。在本文中,我们将讨论您可以采用的最佳实践,以确保您的最终 Docker 镜像以低资源消耗高效构建和运行。

1. 避免安装不必要的包。

如果您在 dockerfile 中安装了不必要的软件包,则会增加构建时间和镜像大小。此外,每次在dockerfile 中进行更改时,您都必须一次又一次地完成所有步骤来构建相同的大图像。这会对性能产生级联的向下影响。为避免这种情况,始终建议只包含那些最重要的包,并尽量避免一次又一次地安装相同的包。

您可以使用需求文件来安装您需要的所有软件包。使用以下命令执行此操作。

RUN pip3 install -r requirements.txt

2. 链接所有 RUN 命令

每个 RUN 命令都会创建一个可缓存的单元并每次构建一个新的中间图像层。您可以通过将所有 RUN 命令链接到单个 RUN 命令中来避免这种情况。此外,尽量避免链接太多可缓存的 RUN 命令,因为这会导致创建大缓存并最终导致缓存爆裂。

RUN apt-get -y install firefox
RUN apt-get -y install vim
RUN apt-get -y update

上述命令可以链接成单个 RUN 命令。

RUN apt-get -y install firefox \
   && apt-get -y install vim \
   && apt-get -y update

3. 使用 .dockerignore 文件

相似 。 .gitignore文件,你可以在 .gitignore 文件中指定文件和目录。您希望从 Docker 构建上下文中排除的dockerignore 文件。这将导致从 Docker 容器中删除不必要的文件,减小 Docker 映像的大小,并提高构建性能。

4. 使用最好的语句顺序

在 dockerfile末尾包含最常更改的语句。这背后的原因是,当您更改dockerfile 中的语句时,其缓存将失效,并且所有后续语句缓存也将中断。例如,在顶部包含 RUN 命令,在底部包含 COPY 命令。包括在dockerfile结束的CMD,入口点的命令。

5.避免安装不必要的包依赖

您可以在构建映像时使用 –no-install-recommends 标志。它会告诉 apt 包管理器不要安装多余的依赖项。安装不必要的包只会增加构建时间和镜像的大小,这会导致性能下降。

总而言之,在编写 dockerfile时不选择正确的顺序会增加构建时间、图像大小并降低整个过程的性能。我们还讨论了一些您可以遵循的重要提示,以提高整体构建性能,减少构建中间图像层的缓存数量。