BuildKit cache và .dockerignore
Giảm thời gian CI mà không làm build khó đoán.
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
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.
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Đố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 ↗