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

Dockerfile từ cơ bản tới production

Viết image reproducible, nhỏ và có quyền hạn tối thiểu.

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

Nắm bản chất

Một Dockerfile tốt nên tách build-time dependencies khỏi runtime, cố định những đầu vào quan trọng và định nghĩa rõ process cần chạy. Ưu tiên base image tối giản phù hợp, WORKDIR, COPY và CMD exec form.

EXPOSE mô tả container port nhưng không publish nó ra host. RUN thực thi khi build image; CMD/ENTRYPOINT xác định tiến trình chạy khi container được tạo. Cần phân biệt để không nhầm chạy migrations/build tools mỗi lần khởi động.

Luồng hoạt động

Base image→dependencies→app→runtime

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

FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN useradd -u 10001 -r appuser
USER 10001
EXPOSE 8080
CMD ["python", "-m", "http.server", "8080"]

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

✳

Viết Dockerfile tối giản cho một HTTP application. Build và kiểm tra process UID bằng docker run --rm IMAGE id.

Lỗi dễ mắc

!

Đừng đưa mật khẩu hay API keys vào ARG, ENV và các lệnh RUN có thể lưu lại trong image layers/build metadata. Sử dụng secrets thích hợp.

Tự kiểm tra

Khác biệt giữa `RUN` và `CMD`?Xem đáp án ↗

RUN thực thi lúc build; CMD xác định lệnh mặc định khi chạy container.

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 ↗