如何在docker容器中安装特定的go命令



我想在docker容器中使用go mod graph来在go存储库中生成依赖关系图。我只使用该命令,不使用其他go功能。我已经尝试了其他工具,如godegraph、gomod、dept,没有什么比go mod graph更好的了。目前,我安装了所有的go功能,并添加了大约400MB的docker图像大小。

问题:我可以通过在golang中安装specific命令来减小docker容器的大小吗?或者我可以得到go mod graph的二进制值,这样它可以减少容器的大小吗?

如果在执行映像(docker运行(时不需要Go,而只需要它来构建映像(dockerbuild(,那么,正如所评论的,使用多阶段构建。

这里有一个例子:;使用Builder Pattern"创建精益Docker镜像";来自Mike Kaperys:

每个FROM指令都为以下指令定义一个新的基本映像,并开始新的构建阶段
在多阶段构建之前,可以实现相同的效果,但该过程需要2个Dockerfiles。

使用多阶段构建允许您在构建阶段之间选择性地复制文件——这是构建器模式的基础。

参见kaperys/blog/docker-builder-pattern

FROM golang:1.16
COPY . /go/src/github.com/kaperys/blog/docker-builder-pattern
WORKDIR /go/src/github.com/kaperys/blog/docker-builder-pattern
RUN go get && CGO_ENABLED=0 GOOS=linux go build -o server .
FROM scratch
LABEL maintainer="Mike Kaperys <mike@kaperys.io>"
COPY --from=0 /go/src/github.com/kaperys/blog/docker-builder-pattern/server /opt/kaperys/vision/server
COPY --from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
ADD html/ /opt/kaperys/vision/html
EXPOSE 8080
WORKDIR /opt/kaperys/vision
ENTRYPOINT [ "./server" ]

这样,您可以从已经安装Go的映像(包括go mod(开始,然后从您想要的任何其他映像(在本例中包括"scratch"(构建实际映像。

最新更新