使用.Dockerignore文件

我们知道,我们可以在云服务上运行docker映像,从而以低成本提供高计算量。因此,有人可能想知道为什么我们需要优化Docker映像。想一想您在Docker容器中复制了一个大文件而实际上并不需要它的情况。显然,这将增加docker映像的大小,这将增加映像的总体构建时间,并且还会引起很多缓存问题。因此,为什么不使用简单的技术来避免所有这些问题并提高docker构建过程的整体性能。

什么是.dockerignore文件?

与.gitignore文件类似,.Dockerignore文件使您可以提及在构建映像时可能要忽略的文件和/或目录的列表。这肯定会减小映像的大小,也有助于加快docker构建过程。要了解整个过程,我们首先需要了解什么是Docker构建上下文

什么是docker build上下文?

我们知道Docker基本上是一个Client-Server应用程序。它有一个Docker客户端,我们通过命令行工具在本地计算机上运行它,还有一个docker服务器,也称为docker daemon。通过命令行运行的Docker客户端需要与Docker服务器(Daemeon)进行通信,这就是执行指令的方式。任务之一是构建docker映像。另外,要注意的另一件事是,docker服务器可以在远程计算机,本地计算机甚至云上运行。

当我们尝试构建docker映像时,我们需要将文件发送到docker服务器。这些文件基本上是构建上下文。这些文件由Docker客户端归档到.tar文件中,然后将它们上传到docker服务器。

有什么帮助?

在将文件发送到docker服务器之前,docker客户端(命令行界面)开始在Build Context的根目录中搜索名为.dockerignore的文件。如果找到了这样的文件,CLI(客户端)将修改构建上下文,以排除.dockerignore文件中提到的那些文件和目录。

使用.dockerignore文件的好处

缩小图像尺寸

显然,如果构建上下文的大小较小,则docker映像的大小将较小,因此与较大的映像大小相比,将较小的映像上载到任何云服务或将其发送到另一台远程服务器的成本将更低。

缓存失效

重要的是要了解,最常见的做法是使用以下命令复制整个目录或构建上下文以创建映像。

WORKDIR /usr/src/app
COPY . .

现在,如果我们决定在构建上下文中进行更改,则构建过程将每次创建一个新的图像层,如果docker图像的大小很大,换句话说,如果其中包含较大的图像,这将非常昂贵不必要的文件。任何更改都将导致缓存无效,并且还会破坏以下命令的缓存。因此,从构建上下文中删除较大的不必要文件始终是更好的做法。

安全问题

您可能有一些重要的源文件或在构建上下文中包含秘密密钥或密码短语的文件。您可能不希望将这些重要文件公开到最终的docker映像中。例如,将您的.git文件夹暴露在docker映像中。因此,始终建议通过在.dockerignore文件中提及这些文件和文件夹来忽略它们。

如何创建.dockerignore文件?

以下是一些示例说明如何在.dockerignore文件中提及文件,文件夹和目录。

#忽略日志目录
logs/

#忽略密码文件
passwords.txt

#忽略git和cache文件夹
.git
.cache

#忽略所有markdown和class文件
*.md
**/*.class

忽略dockerfile?

这里可能会出现另一个问题,在构建Docker映像时我们是否可以并且应该忽略Dockerfile?

这个问题的答案主要取决于开发人员的偏好。如果要允许用户了解创建Docker映像的规则,则不应在.dockerignore文件中提及该映像。如果要保密,则可以添加它。

总之,始终建议您在构建上下文中创建一个.dockerignore文件,以使Docker映像小而安全,并加快构建过程。