近期使用Docker打包镜像遇到的问题总结
August 12, 2020
背景 #
在 github.com/yeqown/goreportcard 项目中我改造了 goreportcard
。
后续为了方便部署,我准备将其打包成为docker镜像并上传到 DockerHub
。期间遇到了下面的问题,并一一解决,这里做一个记录帮助以后遇到类似的问题可以快速解决。
初期的目标是:将goreportcard
和golangci-lint
编译好,尽可能较小镜像的体积。因此第一次尝试,我使用了分阶段编译,用golang:1.14.1
编译,alpine
来发布。
基本 Dockerfile 如下:
# building stage
FROM golang:1.14-alpine3.11 as build
WORKDIR /tmp/build
COPY . .
RUN export GOPROXY="https://goproxy.cn,direct" \
&& go mod download \
&& go build -o app ./cmd/goreportcard-cli/ \
&& go get github.com/golangci/golangci-lint && go install github.com/golangci/golangci-lint/cmd/golangci-lint
# release stage
FROM golang:1.14-alpine3.11 as release
WORKDIR /app/goreportcard
COPY --from=build /tmp/build/app .
COPY --from=build /tmp/build/tpl ./tpl
COPY --from=build /tmp/build/assets ./assets
# FIXED: 不能使用golangci-lint, `File not found` 错误
COPY --from=build /go/bin/golangci-lint /usr/local/bin
EXPOSE 8000
ENTRYPOINT ["./app", "start-web", "&"]
问题清单和解决方案 #
由于并不是所有的问题都和Docker有关,因此我会使用
...[分类]
在标题上注明。