让我们关注一个在项目中同时使用Docker和Git的场景。在这种情况下,同时维护.gitignore
和.dockerignore
文件很方便。
我试图了解两个文件之间的关系。我的初学者的怀疑是.dockerignore
应该是.gitignore
的超集,并且始终至少包含相同的项目。
我的理由是,如果.dockerignore
没有列出.gitignored
的某些文件,那么我们在开发人员机器上的构建上下文将包含该文件,而持续集成环境中的构建上下文将不包含该文件(因为它仅适用于存在于git存储库)。这很容易导致本地构建的docker镜像正常工作,但是基于构建服务器上相同代码构建的镜像被破坏了,因为它使用不同的输入数据。
真的是.dockerignore
应该是.gitignore
的超集吗? 如果是这样,您是否实际使用一些工具来加强这种关系?
最佳答案
在Docker外部构建应用程序并注入(inject)生成的二进制文件是相当普遍的。我在SO上看到的最常见的示例是基于Java的应用程序。 Java类文件格式设计为可跨环境移植,因此,无论是否在开发人员的工作站上构建.jar文件,都不会有太多差异。你可以跑
mvn build
docker build -t myapp .
FROM tomcat:9
COPY target/myapp.war /usr/local/tomcat/apps
在此设置中,
target
目录将位于.gitignore
中(您不希望将构建 Artifact 提交给源代码控制),但不会位于.dockerignore
中(该镜像必须对镜像可用)。其他可能有用的模式包括:
make
的情况下获得测试图像。(我通常忽略
.dockerignore
,但我也尝试明确表示将COPY
放入图像中的文件。)关于git - .dockerignore通常应该是.gitignore的超集吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58707272/