วันนี้ทำการ review project ที่พัฒนาด้วยภาษา Go
มีสิ่งที่น่าสนใจคือ การเขียน Dockerfile
ซึ่งมีหลายรูปแบบเลย แถมแปลก ๆ ด้วย
จึงนำมาสรุปไว้นิดหน่อย
แบบที่ 1 Start มันไปเลย ไม่ต้อง Build
[gist id="a1b6e60952aa324085dcf77ca57e5bff" file="Dockerfile-00"]ทำงานได้นะ แต่แบบนี้มันใช่ไหมเนี่ย !!!
แบบที่ 2 ทำการ build และ run ด้วยกันไปเลย
[gist id="a1b6e60952aa324085dcf77ca57e5bff" file="Dockerfile-01"]สามารถทำงานได้เป็นปกติ
แต่ขนาดของ Docker image ใหญ่มาก ๆ ขนาด 300+ MB ขึ้นไป
คำถามคือ เราจะส่งมอบอะไร ? มันเยอะเกินไหม
แบบที่ 3 ทำการ copy binary จากเครื่องเข้าไปเลย !!
[gist id="a1b6e60952aa324085dcf77ca57e5bff" file="Dockerfile-02"]ก็ทำงานได้ปกตินะ แต่การ build binary
ต้องกำหนด parameter พวก GOOS, GOARCH ให้ถูกด้วย
มิเช่นนั้นจะไม่สามารถใช้งานได้ เพราะว่า binary ที่ copy มาใส่ไม่ถูกต้องตา OS นั้น ๆ
และขนาดของ Docker image ก็เล็กมาก ๆ ด้วย
คำถามคือ ทั้ง 3 แบบ มันดีแล้วใช่ไหม ?