ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless
ลดขนาดอิมเมจสุดท้ายด้วยการเลือกอิมเมจฐานขนาดเล็ก ลบเครื่องมือสร้าง และใช้ฐานแบบ distroless หรือ scratch เพื่อดึงข้อมูลได้เร็วขึ้นและลดพื้นผิวการโจมตี
ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless เป็นบทเรียน Docker & DevOps Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Docker & DevOps Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Docker & DevOps Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดขนาดอิมเมจจึงสำคัญ
อิมเมจขนาดเล็กกว่า ดึงมาได้เร็วกว่า เริ่มทำงานเร็วกว่า มีค่าใช้จ่ายในการจัดเก็บน้อยกว่า และเปิดเผยแพ็กเกจให้ผู้โจมตีน้อยกว่า การปรับขนาดจึงเป็นประโยชน์ทั้งด้านประสิทธิภาพและความปลอดภัย
การเลือกอิมเมจพื้นฐานแบบเบา
อิมเมจเริ่มต้นสะดวกแต่มีขนาดใหญ่ การเปลี่ยน node:20 (ประมาณ 1GB) เป็น node:20-slim หรือ node:20-alpine สามารถลดขนาดลงได้หลายร้อยเมกะไบต์ทันที
FROM node:20-slimข้อแลกเปลี่ยนของ Alpine
Alpine มีขนาดเล็กมาก แต่ใช้ musl libc แทน glibc ซึ่งบางครั้งทำให้ไบนารีเนทีฟทำงานไม่ได้ ควรทดสอบอย่างรอบคอบ เพราะบางครั้ง -slim ก็เป็นตัวเลือกขนาดเล็กที่ปลอดภัยกว่า
FROM python:3.12-alpineรวมเลเยอร์ RUN
แต่ละ RUN จะเพิ่มเลเยอร์หนึ่งชั้น ให้เชื่อมคำสั่งที่เกี่ยวข้องกันและล้างข้อมูลในเลเยอร์ เดียวกัน มิฉะนั้นไฟล์ที่ลบไปแล้วจะยังทำให้เลเยอร์ก่อนหน้ามีขนาดใหญ่ขึ้น
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*ใช้ .dockerignore
ไฟล์ .dockerignore จะกันไฟล์ที่ไม่จำเป็นออกจากบริบทการสร้าง เช่น node_modules, .git และบันทึก บริบทที่เล็กลงหมายถึงการสร้างที่เร็วขึ้นและเลเยอร์ที่มีขนาดเล็กลง
# .dockerignore
.git
node_modules
*.logสรุปการสร้างหลายขั้นตอน
สร้างในขั้นตอนหนึ่งพร้อมคอมไพเลอร์ทั้งหมด จากนั้นใช้ COPY --from คัดลอกเฉพาะอาร์ทิแฟกต์ไปยังขั้นตอนสุดท้ายที่สะอาด ชุดเครื่องมือจะไม่ถูกส่งไปพร้อมอิมเมจ
FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN go build -o app
FROM alpine:3.20
COPY --from=build /src/app /appทำความรู้จัก Distroless
อิมเมจ Distroless มีเฉพาะแอปของคุณและรันไทม์ของแอป ไม่มีเชลล์ ไม่มีตัวจัดการแพ็กเกจ และไม่มีไบนารีเพิ่มเติม จึงมีขนาดเล็กและยากต่อการโจมตี
FROM gcr.io/distroless/static-debian12
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]ไม่มีเชลล์ก็ไม่เป็นปัญหา
Distroless ไม่มีเชลล์ ดังนั้นคำสั่ง RUN และ docker exec sh จะทำงานไม่ได้ ให้ตั้งค่าทุกอย่างในขั้นตอนก่อนหน้า และใช้แท็ก :debug เมื่อต้องตรวจสอบภายในอิมเมจ
อิมเมจพื้นฐาน scratch
สำหรับไบนารีแบบสแตติกสมบูรณ์ (Go, Rust) FROM scratch จะส่งออกเฉพาะไฟล์ปฏิบัติการของคุณ โดยรวมแล้วมักมีขนาดเพียงไม่กี่เมกะไบต์
FROM scratch
COPY --from=build /src/app /app
ENTRYPOINT ["/app"]การวัดผลลัพธ์ที่ได้
ใช้ docker images เพื่อเปรียบเทียบขนาด และใช้ docker history เพื่อดูว่าเลเยอร์ใดมีขนาดใหญ่ที่สุด ควรปรับเลเยอร์ที่ใหญ่ที่สุดก่อน
docker history myapp:latestตรึงเวอร์ชัน อย่าใช้ latest
การตรึงแท็กหรือไดเจสต์ที่ระบุเจาะจงทำให้การสร้างทำซ้ำได้เหมือนเดิม และป้องกันขนาดที่เพิ่มขึ้นโดยไม่คาดคิดเมื่อ latest จากต้นทางมีการเปลี่ยนแปลง
FROM node:20.11.1-slimตรวจสอบอย่างรวดเร็ว
อิมเมจแบบ Distroless มีอะไรพิเศษ
สรุป
ตอนนี้คุณสามารถลดขนาดอิมเมจได้อย่างมากแล้ว:
- เลือกอิมเมจพื้นฐาน
-slim,-alpine, Distroless หรือscratch - เชื่อมคำสั่งและล้างข้อมูลในเลเยอร์
RUNพร้อมใช้.dockerignore - การสร้างหลายขั้นตอนช่วยตัดชุดเครื่องมือออก
- วัดผลด้วย
docker historyและตรึงเวอร์ชัน
อิมเมจที่เล็กลงหมายถึงการนำไปใช้งานที่เร็วและปลอดภัยยิ่งขึ้น
คำถามที่พบบ่อย
บทเรียน “ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Docker & DevOps Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Docker & DevOps Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless”
ลดขนาดอิมเมจสุดท้ายด้วยการเลือกอิมเมจฐานขนาดเล็ก ลบเครื่องมือสร้าง และใช้ฐานแบบ distroless หรือ scratch เพื่อดึงข้อมูลได้เร็วขึ้นและลดพื้นผิวการโจมตี คุณปฏิบัติ Docker & DevOps Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Docker & DevOps Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Docker & DevOps Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Docker & DevOps Fundamentals นี้ได้ไหม
ได้ บทเรียน Docker & DevOps Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างแบบหลายขั้นตอนเพื่อประสิทธิภาพ
- การใช้ประโยชน์จากแคชการสร้าง
- แนวทางปฏิบัติที่ดีด้านความปลอดภัยของ Dockerfile
- ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless