CHƯƠNG 05 · Dockerfile & BuildKit•BÀI 18 / 80

BuildKit cache và .dockerignore

Giảm thời gian CI mà không làm build khó đoán.

Nền tảng◷ 4 phút đọc2/4 trong chương

Nắm bản chất

Docker gửi build context cho builder. .dockerignore loại các file không cần thiết như .git, .env, cache, test output và local datasets. File này giúp giảm dữ liệu truyền và tránh vô tình đưa secrets vào build context.

BuildKit có thể tận dụng cache mounts để lưu package download cache mà không thêm cache đó vào final image. Sắp xếp Dockerfile để copy lockfile trước khi copy toàn bộ source thường giữ bước cài dependencies trong cache qua nhiều lần sửa application code.

Luồng hoạt động

Build context→cache keys→image layers

Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?

Lệnh & cấu hình mẫu

# syntax=docker/dockerfile:1
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN --mount=type=cache,target=/root/.cache/pip   pip install -r requirements.txt
COPY src/ ./src/
# .dockerignore
.git
.env
__pycache__
*.pyc
backups/

Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.

Bài tập 10–20 phút

✳

Build hai lần và so sánh output cache. Sau đó sửa file trong src/, kiểm tra dependency step có thể dùng cache thay vì chạy lại.

Lỗi dễ mắc

!

Cache không phải dấu hiệu build luôn reproducible. Unpinned versions và base tag mutable vẫn có thể tạo ra kết quả khác nhau theo thời gian.

Tự kiểm tra

Tại sao đưa `COPY . .` lên đầu Dockerfile có thể làm CI chậm?Xem đáp án ↗

Bất kỳ thay đổi nào trong build context cũng có thể làm các bước RUN sau đó mất cache.

TÀI NGUYÊN ĐI KÈM

Học thêm qua lab

Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.

→ Mở bảng lệnh tra cứu nhanh
NGUỒN CHÍNH THỨC

Đối chiếu tài liệu gốc

Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.

Mở tài liệu chính thức ↗