在.dockerignore文件中包含pkg

时间:2018-11-04 03:47:25

标签: docker go goinstall

现在我的.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等重新下载源代码? / p>

1 个答案:

答案 0 :(得分:2)

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

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

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

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