0Pricing
Docker & DevOps Fundamentals · บทเรียน

ลดขนาดอิมเมจด้วยฐาน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การสร้างแบบหลายขั้นตอนเพื่อประสิทธิภาพ
  2. การใช้ประโยชน์จากแคชการสร้าง
  3. แนวทางปฏิบัติที่ดีด้านความปลอดภัยของ Dockerfile
  4. ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless
← กลับไปที่ Docker & DevOps Fundamentals