如果您是Docker开发人员,您可能已经注意到,当您使用Dockerfile或直接从Docker注册表中提取映像来构建Docker映像时,根据Docker Build Context的不同,映像的大小可能会很大。
由于Docker是一个客户端服务器应用程序,因此我们知道Docker客户端是我们用来访问Docker容器的实际命令行界面,而Docker服务器实际上称为Docker守护程序,它可以帮助您维护容器。在尝试构建Docker映像时,我们需要将一些文件发送到Docker守护进程或服务器,以便可以使用这些文件并将其包含在我们尝试构建的Docker容器中。这组文件和目录称为Docker Build Context。
显然,Docker构建上下文中文件和文件夹的大小越大,Docker映像的大小也越大。现在,在存放dockerfile并试图通过其构建映像的文件夹中,可能包含一些文件和文件夹,尽管这些文件和文件夹是项目的一部分,并且您不想将这些文件包括在Docker Build中语境。让我们看看不包括这些文件和目录的一些原因。
- 安全问题–一些重要的文件,例如密码,秘密密钥,.git文件夹等,包含有关您项目的大量信息,您现在可能希望将这些详细信息暴露给外界,以防止入侵。
- 缓存无效–编写Dockerfile时,通常的做法是使用COPY指令在Docker构建上下文中复制文件和文件夹。 Dockerfile中的每个语句都会生成一个新的中间映像层。因此,当您一次又一次在dockerfile中进行更改时,这可能会导致多个缓存无效并导致资源浪费。
- 另外,从Docker Build Context中排除不必要的大文件将导致Docker映像大小减小。
- 它加快了构建Docker映像的过程。
由于所有这些原因,您可能想从Docker Build Context中排除一些文件和文件夹。
现在,类似于构建Git存储库时通常使用的.gitignore文件,当您尝试构建Docker映像时,.dockerignore文件用于忽略文件和文件夹。您可以在.dockerignore文件中指定文件和目录的列表。
让我们来看一个.dockerignore文件的示例。
passphrase.txt
logs/
.git
*.md
.cache
让我们看一个使用.dockerignore文件的实际示例。
步骤1:创建一个包含dockerfile的目录,在其中您可以指定指令以及一个您要忽略的文件夹(例如,ignore-this)。
在这种情况下, dockerfile只是从存储库中提取Ubuntu映像并复制构建上下文。
FROM ubuntu:latest
COPY . .
步骤2:在同一目录中,创建一个.dockerignore文件,并包含要从Docker Build Context中排除的文件夹的名称。
ignore-this
现在,主目录包含一个dockerfile ,一个。 dockerignore file和一个名为ignore-this的文件夹。
第3步:构建Docker映像。
sudo docker build -t sample-image .
步骤4:运行Docker Container并检查文件夹。
sudo docker run -it sample-image bash
ls
您会发现容器仅包含dockerfile ,而不包含“ ignore-this”文件夹。并不是说它也不包含.dockerignore文件。
如果你忽略了dockerfile?
这是事实,你也可以提.dockerignore文件中的dockerfile从泊坞构建上下文中排除。实际上,这是您可能想到的一种普遍做法。这使您不必暴露Docker应用程序的整个蓝图。