现在我的 .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 等?
最佳答案
就个人而言,我认为将 pkg
文件夹从主机复制到镜像不是一个好主意,因为:
- 它将构建图像的地方(您的主机)和图像本身紧密结合在一起。根据构建图像的位置,生成的图像可能会有所不同,这可能是您不想要的
- 此外,如果您有自动构建(例如来自 CI),您可能每次都从干净的环境重建整个应用程序,因此没有初始
pkg
要复制的文件夹。
如果您熟悉 Java 世界,我已经遇到过使用 Maven 构建图像的问题。为了加快构建速度,一些人正在复制镜像中的本地 Maven 存储库 (~/.m2
) 以避免重新下载工件。我不是特别同意这一点,因为他们的 .m2
文件夹总是存在包含损坏工件的风险:因此,在他们的机器上构建的图像将不同于在干净的机器上构建的图像环境。这取决于您是想要一致构建还是快速构建(我更喜欢前者)。
总而言之,我认为从干净的环境构建镜像,而不依赖于构建镜像的主机,是一种很好的做法。这就是为什么我个人不会在图像中复制任何文件(应用程序源代码除外!)。
关于docker - 在 .dockerignore 文件中包含 pkg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137590/