Dockerfile từ cơ bản tới production
Viết image reproducible, nhỏ và có quyền hạn tối thiểu.
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
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.
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 ↗