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

การสร้างทีละเลเยอร์
เมื่อคุณสร้างอิมเมจ 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) และปลดล็อคส่วนที่เหลือของคอร์ส Docker & DevOps Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Docker & DevOps Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การใช้ประโยชน์จากแคชการสร้าง”
เพิ่มประสิทธิภาพเวลาในการสร้าง Docker ด้วยการทำความเข้าใจและใช้กลไกแคชการสร้างของ Docker อย่างมีประสิทธิภาพ คุณปฏิบัติ Docker & DevOps Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Docker & DevOps Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Docker & DevOps Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การใช้ประโยชน์จากแคชการสร้าง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Docker & DevOps Fundamentals นี้ได้ไหม
ได้ บทเรียน Docker & DevOps Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างแบบหลายขั้นตอนเพื่อประสิทธิภาพ
- การใช้ประโยชน์จากแคชการสร้าง
- แนวทางปฏิบัติที่ดีด้านความปลอดภัยของ Dockerfile
- ลดขนาดอิมเมจด้วยฐาน Slim และ Distroless