将pkg包含在.dockerignore文件中



现在我的.dockerignore文件包含以下内容:

.vscode
.idea
.git
bin
pkg

我的Dockerfile看起来像:

FROM golang:latest
RUN mkdir -p /app
WORKDIR /app
COPY . .
ENV GOPATH /app
RUN go install huru
EXPOSE 3000
ENTRYPOINT /app/bin/huru

我的问题是,我是否应该将pkg文件夹从主机复制到映像?现在我不是,正如我的案卷所表明的那样。

我觉得我应该把pkg文件夹从主机复制到映像,因为其中可能有go install可以使用的预构建文件,而不是从github等重新下载源文件?

就我个人而言,我认为将pkg文件夹从主机复制到映像不是一个好主意,因为:

  • 它将你构建图像的地方(你的宿主(和图像本身紧密地结合在一起。根据您构建图像的位置,您可能会在生成的图像中产生差异,而这可能是您不想要的
  • 此外,如果您有自动构建(例如,从CI(,那么您可能每次都是从干净的环境中重新构建整个应用程序,因此没有要复制的初始pkg文件夹

如果您熟悉Java世界,我已经在使用Maven构建的映像中遇到过这个问题。为了加快构建速度,有些人在映像中复制他们的本地Maven存储库(~/.m2(,以避免重新下载工件。我并不特别同意这一点,因为他们的.m2文件夹总是有包含损坏的工件的风险:因此,在他们的机器上构建的图像将与在干净的环境中构建的图像不同。这取决于你是想要一致的构建还是快速的构建(我更喜欢前者(。

总之,我认为在干净的环境中构建图像,而不依赖于构建图像的主机,是一种很好的做法。这就是为什么我个人不会复制图像中的任何文件(除了应用程序源代码!(。

最新更新