CGO_ENABLE=0 และ Static Binary ใน Go
1 min readJan 15, 2019
FROM golang:1.9RUN mkdir -p /go/src
WORKDIR /go/src/github.com/purplebooth/example
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .FROM scratch
COPY --from=0 /go/src /main
CMD ["/main"]
ในกรณีที่เราต้องการ docker image ให้มีขนาดเล็ก เรามักทำ multi-stage build ดังตัวอย่างโค๊ดข้างบน และให้ image scratch ทำหน้าที่ execute binary file ซึ่ง sizing จะมีขนาดเล็กมาก เมื่อ deploy ขึ้น docker registry
จะสังเกตุว่ามีคำสั่ง CGO_ENABLE=0
มัน คือ การบอกว่าผลลัพธ์ที่เราต้องการ คือ STATIC BINARY
แล้วมัน คืออะไรกันหล่ะ ??!!
การระบุ CGO_ENABLE=0 คือ?
เพื่อไม่ให้เกิดการ dynamic linking กับ C System Library หรือ Library ที่เขียน หรือ Compile ด้วย ภาษา C และผลลัพธ์ของการ build นั้น จะได้ execuable file ที่สามารถรันบน platform scratch ได้