0Pricing
Go Academy · บทเรียน

การสร้าง Docker หลายขั้นตอนสำหรับ Go

สร้างขั้นตอน builder และอิมเมจสุดท้ายแบบ scratch/alpine

การสร้าง Docker หลายขั้นตอนสำหรับ Go เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องใช้หลายขั้นตอน

การสร้างแบบขั้นตอนเดียวที่คอมไพล์โค้ด Go จะสร้างอิมเมจขนาดใหญ่ซึ่งมีชุดเครื่องมือ Go ครบถ้วน การสร้างแบบหลายขั้นตอนจะคอมไพล์ในขั้นตอนหนึ่ง แล้วคัดลอกเฉพาะไบนารีไปยังอิมเมจสุดท้ายขนาดเล็ก

Dockerfile แบบหลายขั้นตอนพื้นฐาน

ขั้นตอนการสร้างจะคอมไพล์ไบนารี ส่วนขั้นตอนสุดท้ายจะคัดลอกไบนารีไปยังฐานที่มีขนาดเล็ก:

FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server

FROM scratch
COPY --from=build /app/myapp /myapp
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/myapp"]

FROM scratch

อิมเมจ FROM scratch ไม่มีสิ่งใดอยู่เลย ไม่มีเชลล์และไม่มีไลบรารีของระบบ ไบนารี Go ต้องลิงก์แบบสแตติก (CGO_ENABLED=0) และต้องรวมไฟล์ที่จำเป็นทั้งหมดอย่างชัดเจน

FROM distroless

อิมเมจ distroless ของ Google มีไลบรารีระบบขั้นต่ำ (ใบรับรอง CA และข้อมูลเขตเวลา) โดยไม่มีเชลล์ จึงปลอดภัยกว่า scratch สำหรับไบนารีที่ต้องใช้ libc หรือใบรับรอง TLS

FROM gcr.io/distroless/static-debian12
COPY --from=build /app/myapp /
ENTRYPOINT ["/myapp"]

FROM alpine เพื่อใช้เชลล์

ใช้ Alpine เป็นฐานสุดท้ายเมื่อจำเป็นต้องมีเชลล์สำหรับการดีบัก หรือเมื่อไบนารีใช้ CGO Alpine เพิ่มขนาดประมาณ 5MB แต่มีเชลล์และตัวจัดการแพ็กเกจมาให้

การแคชชั้นสำหรับ go.mod

คัดลอก go.mod และ go.sum ก่อน แล้วเรียกใช้ go mod download ก่อนคัดลอกซอร์สโค้ด ชั้นนี้จะถูกแคชจนกว่าการพึ่งพาจะเปลี่ยนแปลง จึงช่วยเร่งการสร้างใหม่

COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build ...

-ldflags="-s -w"

-s ลบตารางสัญลักษณ์ ส่วน -w ลบข้อมูลการดีบัก DWARF ทั้งสองตัวร่วมกันช่วยลดขนาดไบนารีได้ 30–50% โดยไม่ส่งผลต่อการทำงานขณะรัน

อาร์กิวเมนต์การสร้าง

ใช้ ARG เพื่อแทรกข้อมูลรุ่นขณะสร้าง:

ARG VERSION=dev
RUN go build -ldflags="-X main.version=${VERSION}" -o myapp .

ผู้ใช้ที่ไม่ใช่รูท

เรียกใช้ไบนารีในฐานะผู้ใช้ที่ไม่ใช่รูทเพื่อความปลอดภัย เพิ่มผู้ใช้ในอิมเมจฐาน หรือใช้แท็ก nonroot ของ distroless:

FROM gcr.io/distroless/static-debian12:nonroot

ขนาดอิมเมจสุดท้าย

ไบนารี Go ทั่วไปจาก scratch มีขนาด 5–20 MB Alpine เพิ่มขนาดประมาณ 5MB ส่วนอิมเมจ golang แบบเต็มมีขนาดประมาณ 800MB การสร้างแบบหลายขั้นตอนช่วยลดพื้นที่โจมตีและเวลาในการดึงอิมเมจได้อย่างมาก

.dockerignore

เพิ่ม .dockerignore เพื่อยกเว้นไฟล์จากบริบทการสร้าง: vendor/, .git/, *.test, *.prof วิธีนี้ช่วยเร่งการสร้าง Docker และป้องกันไม่ให้รวมไฟล์ที่มีข้อมูลละเอียดอ่อน

.git
vendor
*.test
*.prof
.env

ตรวจสอบอย่างรวดเร็ว

เหตุใดจึงต้องตั้งค่า CGO_ENABLED=0 เมื่อสร้างไบนารี Go สำหรับอิมเมจ Docker แบบ FROM scratch

สรุป: การสร้างอิมเมจ Docker แบบหลายขั้นตอน

ประเด็นสำคัญ:

  • ขั้นตอนการสร้าง: อิมเมจ golang ขั้นตอนสุดท้าย: scratch/distroless/alpine
  • ใช้ CGO_ENABLED=0 เพื่อสร้างไบนารีแบบสแตติก (จำเป็นสำหรับ scratch)
  • คัดลอก go.mod ก่อนเพื่อแคชชั้น และใช้ -ldflags="-s -w" เพื่อลดขนาดไบนารี
  • ใช้ .dockerignore เพื่อยกเว้น .git, vendor และไฟล์การทดสอบ

คำถามที่พบบ่อย

บทเรียน “การสร้าง Docker หลายขั้นตอนสำหรับ Go” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้าง Docker หลายขั้นตอนสำหรับ Go” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้าง Docker หลายขั้นตอนสำหรับ Go”

สร้างขั้นตอน builder และอิมเมจสุดท้ายแบบ scratch/alpine คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้าง Docker หลายขั้นตอนสำหรับ Go” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้าง Docker หลายขั้นตอนสำหรับ Go
  2. การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ
  3. Docker Compose สำหรับการพัฒนาในเครื่อง
  4. การตรวจสอบสถานะและการปรับแต่งสำหรับการใช้งานจริง
← กลับไปที่ Go Academy