1

现在我的 .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 文件夹从主机复制到图像?现在我不是,因为我的 dockerignore 文件清楚地表明了这一点。

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

4

1 回答 1

3

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

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

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

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

于 2018-11-04T10:59:29.833 回答