Go 的編譯結(jié)果基本上只依賴libc(傳言,第三方庫(kù)是否依賴那就另當(dāng)別論了), 所以Docker image 實(shí)際可以做的很小
- 使用apline 作為docker 的運(yùn)行環(huán)境產(chǎn)生盡可能小的運(yùn)行環(huán)境
- 國(guó)內(nèi)使用有很多情況下是不能使用golang官網(wǎng)倉(cāng)庫(kù)的,這邊需要使用go mod
- golang 編譯需要一個(gè)環(huán)境,但是運(yùn)行的時(shí)候并不需要編譯的時(shí)候的那些go get的東西,所以需要另外建立一個(gè)docker image, 這個(gè)docker 使用上一個(gè)docker的編譯結(jié)果
解決方法的話就是使用docker 的multi stage build, 具體的docker file 如下
# build FROM golang:1.12-alpine AS builder WORKDIR /go/src/App COPY . . # set go mod proxy ENV GO111MODULE=on ENV GOPROXY=https://goproxy.io RUN go build -ldflags "-w -s" # runtime FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ # using build result COPY --from=builder /go/src/app/ . CMD ["./appname"]






