0Pricing
DevOps Bootcamp · บทเรียน

การใช้ประโยชน์จากแคชการสร้าง

เพิ่มประสิทธิภาพเวลาในการสร้าง Docker ด้วยการทำความเข้าใจและใช้กลไกแคชการสร้างของ Docker อย่างมีประสิทธิภาพ

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

สร้างได้เร็วขึ้นด้วยแคช

การสร้างอิมเมจ Docker อาจใช้เวลา โดยเฉพาะแอปพลิเคชันที่ซับซ้อน แคชการสร้างของ Docker เป็นฟีเจอร์อัจฉริยะที่ช่วยเร่งความเร็วได้อย่างมาก

แคชทำงานโดยนำเลเยอร์จากการสร้างครั้งก่อนกลับมาใช้ใหม่ ดังนั้น Docker จึงไม่ต้องสร้างทุกอย่างใหม่จากศูนย์ทุกครั้ง

การใช้ประโยชน์จากแคชการสร้าง — ภาพประกอบ 1

การสร้างทีละเลเยอร์

เมื่อคุณสร้างอิมเมจ Docker โดยใช้ Dockerfile Docker จะดำเนินการตามคำสั่งทีละบรรทัด

  • คำสั่งแต่ละรายการ เช่น FROM, RUN หรือ COPY จะสร้าง "เลเยอร์" ใหม่ในอิมเมจของคุณ
  • เลเยอร์เหล่านี้จะซ้อนทับกันเพื่อประกอบเป็นอิมเมจสุดท้าย

การตรวจสอบแคชของ Docker

ก่อนดำเนินการตามคำสั่ง Docker จะตรวจสอบว่าเคยสร้างเลเยอร์ที่ตรงกันทุกประการนี้มาก่อนหรือไม่ โดยจะเปรียบเทียบสิ่งต่อไปนี้:

  • ตัวคำสั่งเอง เช่น RUN apt update
  • "บริบท" ของคำสั่งบางรายการ เช่น ไฟล์ที่ถูก COPY

หากพบเลเยอร์ที่ตรงกัน Docker จะนำเลเยอร์นั้นกลับมาใช้จากแคช แทนที่จะดำเนินการตามคำสั่งอีกครั้ง

การทำให้แคชใช้ไม่ได้

แคชมีประโยชน์มาก แต่ไม่ได้ถูกนำมาใช้เสมอไป หาก Docker ตรวจพบการเปลี่ยนแปลงในคำสั่งหรือบริบท แคชของ เลเยอร์นั้นและเลเยอร์ทั้งหมดหลังจากนั้น จะใช้ไม่ได้

นั่นหมายความว่า Docker จะสร้างทุกอย่างใหม่ตั้งแต่จุดนั้นเป็นต้นไป โดยไม่สนใจเลเยอร์ที่แคชไว้ด้านล่าง

การจัดลำดับคำสั่งอย่างชาญฉลาด

เพื่อเพิ่มโอกาสในการใช้แคช ให้จัดเรียงคำสั่งใน Dockerfile จากคำสั่งที่มีโอกาสเปลี่ยนแปลงน้อยที่สุดไปยังคำสั่งที่มีโอกาสเปลี่ยนแปลงมากที่สุด

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

การจัดลำดับเพื่อให้ใช้แคชได้

ลองดูตัวอย่างกัน การวางคำสั่ง RUN pip install ซึ่งโดยทั่วไปเปลี่ยนแปลงไม่บ่อย ไว้ก่อน COPY . . ซึ่งเปลี่ยนแปลงทุกครั้งที่อัปเดตโค้ด จะทำให้ Docker นำเลเยอร์การอ้างอิงกลับมาใช้ใหม่ได้

สมมติว่า requirements.txt มี flask และ gunicorn และ app.py เป็นแอปพลิเคชันหลักของคุณ

Dockerfile:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
CMD ["python", "app.py"]

หากมีการเปลี่ยนแปลงเฉพาะ app.py Docker จะสร้างใหม่เฉพาะเลเยอร์ COPY และ CMD สุดท้าย จึงช่วยประหยัดเวลาได้

การคัดลอกเฉพาะที่จำเป็นด้วย .dockerignore

เมื่อคุณใช้ COPY . . Docker จะตรวจสอบการเปลี่ยนแปลงของไฟล์ ทุกไฟล์ ในบริบทการสร้าง แม้แต่ไฟล์ขนาดเล็กที่ไม่เกี่ยวข้อง เช่น โฟลเดอร์ .git หรือข้อมูลการทดสอบในเครื่อง ก็อาจทำให้แคชใช้ไม่ได้

ใช้ไฟล์ .dockerignore เพื่อยกเว้นไฟล์และไดเรกทอรีที่ไม่จำเป็นออกจากบริบทการสร้าง วิธีนี้จะป้องกันไม่ให้ไฟล์เหล่านั้นทำให้แคชใช้ไม่ได้

.dockerignore ในการใช้งานจริง

วางไฟล์ชื่อ .dockerignore ไว้ที่รากของบริบทการสร้าง ถัดจาก Dockerfile

ตัวอย่าง .dockerignore:

.git
.venv
__pycache__
*.log
node_modules

จากนั้นเมื่อคุณใช้ COPY . . Docker จะไม่สนใจไฟล์เหล่านี้ ทำให้การใช้แคชเกิดขึ้นได้อย่างน่าเชื่อถือยิ่งขึ้น

เมื่อใดควรข้ามแคช

บางครั้งคุณอาจต้องการให้ทุกอย่างถูกสร้างใหม่ทั้งหมดโดยไม่ใช้แคชเลย วิธีนี้มีประโยชน์สำหรับการแก้ไขข้อผิดพลาด หรือเมื่อต้องการให้แน่ใจว่าคุณใช้การอ้างอิงเวอร์ชันล่าสุดอย่างแท้จริง

คุณสามารถบังคับให้ Docker สร้างใหม่โดยไม่ใช้แคชได้โดยเพิ่มแฟล็ก --no-cache ในคำสั่งสร้าง:

docker build --no-cache -t my-app:latest .

ตรวจสอบการเพิ่มประสิทธิภาพแคช

คุณกำลังสร้างอิมเมจ Docker สำหรับแอปพลิเคชัน Node.js ขณะนี้ Dockerfile ของคุณมีลักษณะดังนี้:

FROM node:16-alpine
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

การเปลี่ยนแปลงใดจะช่วยเพิ่มประสิทธิภาพ Dockerfile นี้สำหรับการแคชระหว่างการสร้างได้ดีที่สุด

ทบทวน: เชี่ยวชาญการใช้แคช

ทำได้ดีมาก คุณได้เรียนรู้วิธีใช้แคชการสร้างของ Docker เพื่อสร้างอิมเมจได้เร็วขึ้นแล้ว

  • Docker สร้างอิมเมจทีละเลเยอร์ และนำเลเยอร์ที่แคชไว้กลับมาใช้เมื่อทำได้
  • การเปลี่ยนแปลงในคำสั่งหรือบริบทจะทำให้แคชตั้งแต่จุดนั้นใช้ไม่ได้
  • เพิ่มประสิทธิภาพด้วยการจัดลำดับคำสั่งจากคำสั่งที่มีโอกาสเปลี่ยนแปลงน้อยที่สุดไปยังมากที่สุด
  • ใช้ .dockerignore เพื่อยกเว้นไฟล์ที่ไม่เกี่ยวข้องออกจากบริบทการสร้าง
  • ใช้ --no-cache เพื่อบังคับให้สร้างใหม่ทั้งหมดเมื่อจำเป็น

การใช้แคชอย่างมีประสิทธิภาพช่วยให้รอบการพัฒนาเร็วขึ้นและการนำไปใช้งานมีความคล่องตัวยิ่งขึ้น

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

บทเรียน “การใช้ประโยชน์จากแคชการสร้าง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ประโยชน์จากแคชการสร้าง”

เพิ่มประสิทธิภาพเวลาในการสร้าง Docker ด้วยการทำความเข้าใจและใช้กลไกแคชการสร้างของ Docker อย่างมีประสิทธิภาพ คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “การใช้ประโยชน์จากแคชการสร้าง” ใช้เวลานานแค่ไหน

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

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

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

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

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