如何使用docker 部署 golang 編譯環境最小版


最近 忙着將以前的系統再迭代一下,之不是用go mod 來做的,這次准備把系統改成go module的樣子,以間把整個文件拷貝到鏡像里面執行,所以整個文件很大,一般都有一個G,感覺不是很理理,最后決定用二次鏡像的原理來搞一下,直接上代碼了

#使用最新的golang 鏡像
FROM golang:1.15.0-alpine3.12 as builder
LABEL maintainer="zchd.ltd@gmail.com"
#更新Alpine的軟件源為國內源,提高下載速度
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories 
#因為 scratch 不帶SSL 證書存儲,所以要安裝更新
RUN apk update && apk add --no-cache git ca-certificates && update-ca-certificates && apk add --no-cache tzdata
# Create 運行的帳號
ENV USER=appuser
ENV UID=10001
RUN adduser \    
    --disabled-password \    
    --gecos "" \    
    --home "/nonexistent" \    
    --shell "/sbin/nologin" \    
    --no-create-home \    
    --uid "${UID}" \    
    "${USER}"
# 確定工作環境
WORKDIR /app
#將代碼 拷貝進容器
ADD . /app
#進行golang環境的設置,開啟go mod 並設置鏡像
RUN go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.io,direct
# 編譯 鏡像
RUN CGO_ENABLED=0 GOOS=linux go build -o app
# 使用最小的開始 制作鏡像
FROM scratch as final
# 從編譯中導入鏡像Import from builder.
#導入時區
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo 
#導入ssl 證書
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
#導入帳號
COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
#導入golang編充好的
COPY --from=builder /app/app .
ADD app /
CMD ["/app"]

這樣整個docker 環境就制作好了

 

 大概弄后面的鏡像是44.6M,感覺還不錯,必竟最開始都是1G左右

最后,把部署的也加上

#!/usr/bin/env bash
git pull origin master
docker build -t yxt-platform .

docker stop yxt-platform-test
docker rm yxt-platform-test
docker run -d --name yxt-platform-test \
            -p 1323:1323 \
            -v $(pwd)/conf/conf-docker.toml:/conf/conf.toml \
            -v $(pwd)/static:/static \
            -v $(pwd)/cert:/cert \
            --link mysql:192.168.2.3 \
            --link redis:redis \
            yxt-platform

這樣就可以很愉快的玩耍啦!!!!

 

后面參考 了一下

FROM golang:1.14-alpine as builder
WORKDIR /usr/src/app
ENV GOPROXY=https://goproxy.cn
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
  apk add --no-cache upx ca-certificates tzdata
COPY ./go.mod ./
COPY ./go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags "-s -w" -o server &&\
  upx --best server -o _upx_server && \
  mv -f _upx_server server

FROM scratch as runner
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /usr/src/app/server /opt/app/
CMD ["/opt/app/server"]

參考了一下

https://medium.com/@chemidy/create-the-smallest-and-secured-golang-docker-image-based-on-scratch-4752223b7324

 

https://juejin.im/post/6844904174396637197


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM