docker构建最小golang项目镜像

golang  

docker 删除无用镜像

  1. # 删除无用镜像
  2. docker rmi -f `docker images | grep '<none>' | awk '{print $3}'`
  3. # 删除无用容器
  4. docker rm $(docker ps -a | grep Exited | awk '{print $1}')
  5. # 删除所有没有运行的容器
  6. docker rm $(docker ps -a -q)

golang项目利用Dockerfile构建最小镜像包

步骤分析:
1.找个基础镜像,然后配置镜像代理,将本地项目添加至基础镜像中并编译成二进制文件
2.在上面的镜像基础上.再次引用一个纯净的容器,将二进制文件直接copy进去设置启动命令即可
最后一个镜像包大小在 10M左右(根据项目大小决定)以下是完整的Dockerfile

  1. # 拉取Go语言最新的基础镜像
  2. FROM golang:1.15.6-alpine3.12 as builder
  3. # 在容器内设置 /app 为当前工作目录
  4. WORKDIR /app
  5. # 设置 GOPROXY 环境变量
  6. ENV GOPROXY=https://goproxy.cn
  7. # 增加代理,需要配置固定镜像使用
  8. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
  9. apk add --no-cache upx ca-certificates tzdata
  10. #go mod 需要的两个文件 copy 到 docker 里面先缓存需要的依赖
  11. COPY go.mod .
  12. COPY go.sum .
  13. # 下载全部依赖项
  14. RUN go mod download
  15. # 把文件赋值到当前工作目录
  16. COPY . .
  17. # 编译二进制执行文件
  18. RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o appexec ./cmd/xxx/main.go
  19. ### 取消极致压缩,可将17M 压至5.5M
  20. # && upx --best appexec -o _upx_appexec && \
  21. # mv -f _upx_appexec appexec
  22. # 基于上面的环境再次将可执行文件编译成dockerimages
  23. FROM scratch as runner
  24. WORKDIR /app
  25. # 配置时区和ssl
  26. COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  27. COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
  28. # 拷贝二进制文件
  29. COPY --from=builder /app/appexec .
  30. # 拷贝config文件
  31. COPY --from=builder /app/cmd/admin/admin-docker/config.yaml .
  32. # 启动命令
  33. CMD [ "./appexec" ]


评论 0

发表评论

Top