如何在不发送上下文的情况下构建Docker镜像?

时间:2019-12-30 06:56:13

标签: docker containers

在我们的项目中,我们有一个项目目录,其中包含docker configs和每个服务的其他常见内容和文件夹。由于我们在dockerfiles中使用了常见的东西,因此我们需要将上下文设置为根文件夹,但是docker然后将所有上下文发送到docker deamon,大约3 GB,这需要一些时间,尤其是对于每种服务。

是否有使其直接使用本地文件系统的选项? 还是有其他替代方案可用于构建不发送上下文的OCI容器?

2 个答案:

答案 0 :(得分:2)

我过去使用的一种方法是为Docker创建一个临时的构建树。可能看起来像

mkdir build/docker
cp Dockerfile build/docker
cp -a project-a/target/app_a build/docker
cp -a common/docker/etc build/docker
docker build -t me/project-a build/docker
rm -rf build/docker

现在上下文目录正好是您所需要的目录,不多也不少,而且您的Dockerfile可能非常简单。

(实际上,当我这样做时,我使用Makefile构建了主机上下文目录,这种方法可能需要某种程度的构建自动化。)

答案 1 :(得分:1)

您可以在项目目录中创建.dockerignore文件,而忽略一些不需要的文件。它会告诉docker将上下文发送到docker deamon,而没有.dockerignore文件中列出的文件。

您还可以从官方文档here

中获得更多帮助。

例如,如果您不想将.git目录发送到docker deamon,则可以在工作目录中创建一个.dockerignore文件,然后运行以下命令:echo '.git' >> .dockerignore