1. Dockerfile là gì?
- Dockerfile là một tập tin văn bản chứa các chỉ dẫn (instructions) mà Docker sử dụng để tự động build Docker image.
- Mỗi chỉ dẫn (như
FROM,COPY,RUN,…) sẽ tạo ra một layer (lớp) trong image. - Các layer này là read-only và được xếp chồng lên nhau theo thứ tự.
- Mỗi layer chỉ chứa phần thay đổi (delta) so với layer trước đó, giúp Docker dễ dàng tái sử dụng các layer đã cache.
2. Cách build Docker image
docker image build [OPTIONS] .
- Docker sẽ đọc các lệnh trong Dockerfile và thực thi từng bước một.
- Có thể sử dụng
-no-cacheđể bỏ qua cache khi build image.
3. Ví dụ về Dockerfile cơ bản
FROM ubuntu
COPY . /app
RUN make /app
CMD ["./app"]
FROM: luôn bắt đầu bằng dòng này – xác định image gốc (base image)COPY: sao chép file từ máy host vào containerRUN: chạy lệnh khi build image (vd: biên dịch, cài gói)CMD: lệnh mặc định sẽ được chạy khi container khởi động
4. Hint
| Nội dung | Giải thích |
|---|---|
| 1. Ephemeral Container | Container nên dễ xóa, dễ thay thế, không phụ thuộc vào trạng thái trước đó |
| 2. Stateless Application | Làm theo nguyên tắc Twelve-Factor App → ứng dụng không lưu trạng thái bên trong container |
3. Sử dụng .dockerignore | Tránh đưa các file không cần thiết vào image (giống như .gitignore) |
| 4. Multi-Stage Build | Giảm kích thước image bằng cách tách build và runtime ra 2 giai đoạn trong cùng 1 Dockerfile |
| 5. Không cài gói không cần thiết | Tránh làm image nặng thêm |
| 6. Một container chỉ nên phục vụ 1 mục đích (One Concern) | VD: WordPress và MySQL nên chạy ở 2 container tách biệt |
| 7. Giảm số lượng layers | Dùng các lệnh kết hợp nhiều thao tác để giảm số lớp (layer) không cần thiết |
| 8. Format đẹp, dễ đọc | Sắp xếp tham số theo thứ tự ABC và thêm khoảng trắng trước dấu \ để dễ đọc |
5. Lưu ý về cache khi build image
- Docker sẽ cache lại từng layer
- Nếu không có gì thay đổi, Docker sử dụng lại layer đã build trước đó
- Dùng
-no-cache=truenếu muốn build lại toàn bộ
Kết luận
Dockerfile là cách chính để định nghĩa cách tạo một Docker image.