🐳 Làm chủ Dockerfile: Hướng dẫn toàn diện cho người mới
Docker là một trong những công cụ thiết yếu trong DevOps và phát triển ứng dụng đám mây. Tại trung tâm của Docker là Dockerfile — một tệp văn bản đơn giản chứa các hướng dẫn để xây dựng một hình ảnh Docker.
Hướng dẫn này sẽ đưa bạn qua mọi thứ bạn cần biết về Dockerfiles, từ cơ bản đến những thực tiễn tốt nhất.
📦 Dockerfile là gì?
Dockerfile giống như một công thức nấu ăn 🧑🍳.
- Mỗi dòng là một hướng dẫn.
- Docker xử lý nó từ trên xuống dưới.
- Kết quả là một hình ảnh Docker, mà bạn có thể chạy như một container.
Luồng:
Dockerfile ➝ Docker Image ➝ Container
🛠️ Cấu trúc cơ bản của Dockerfile
Dưới đây là một mẫu:
dockerfile
FROM <base-image>
WORKDIR <directory>
COPY <src> <dest>
RUN <command>
CMD ["executable", "param1", "param2"]
🔑 Giải thích các hướng dẫn chính
1. FROM
Thiết lập hình ảnh cơ sở để bắt đầu.
dockerfile
FROM python:3.9-slim
👉 Mỗi Dockerfile phải bắt đầu với một hình ảnh cơ sở (trừ khi bạn xây dựng hoàn toàn từ đầu).
2. WORKDIR
Xác định thư mục làm việc bên trong container.
dockerfile
WORKDIR /app
3. COPY
Sao chép các tệp từ máy tính của bạn vào container.
dockerfile
COPY requirements.txt .
COPY . .
4. RUN
Thực thi các lệnh tại thời điểm xây dựng.
dockerfile
RUN pip install -r requirements.txt
5. CMD
Xác định lệnh mặc định để chạy khi container khởi động.
dockerfile
CMD ["python", "app.py"]
6. ENTRYPOINT (nâng cao)
Xác định quy trình chính của container. Không giống như CMD, nó không thể bị ghi đè dễ dàng.
dockerfile
ENTRYPOINT ["python"]
CMD ["app.py"]
👉 Điều này sẽ chạy như python app.py.
7. EXPOSE
Tài liệu hóa các cổng mà container sẽ sử dụng.
dockerfile
EXPOSE 5000
8. ENV
Thiết lập các biến môi trường.
dockerfile
ENV APP_ENV=production
9. ARG
Thiết lập các biến thời gian xây dựng.
dockerfile
ARG VERSION=1.0
📄 Ví dụ đầy đủ: Ứng dụng Python Flask
dockerfile
# Bước 1: Bắt đầu từ hình ảnh cơ sở
FROM python:3.9-slim
# Bước 2: Thiết lập thư mục làm việc
WORKDIR /app
# Bước 3: Sao chép yêu cầu và cài đặt phụ thuộc
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Bước 4: Sao chép phần còn lại của mã
COPY . .
# Bước 5: Mở cổng
EXPOSE 5000
# Bước 6: Lệnh mặc định
CMD ["python", "app.py"]
⚡ Xây dựng và Chạy
bash
# Xây dựng hình ảnh
docker build -t myapp:1.0 .
# Chạy container
docker run -p 5000:5000 myapp:1.0
Bây giờ mở 👉 http://localhost:5000
📸 Tổng quan hình ảnh
Dockerfile ➝ Hình ảnh ➝ Container
✅ Thực tiễn tốt nhất
- Sử dụng hình ảnh cơ sở nhẹ (ví dụ:
alpine,slim). - Luôn sử dụng tệp .dockerignore để tránh sao chép các tệp không cần thiết.
- Kết hợp các lệnh để giảm số lượng lớp:
dockerfile
RUN apt-get update && apt-get install -y curl
- Ghi chú phiên bản của các phụ thuộc để đảm bảo tính tái lập.
- Sử dụng xây dựng nhiều giai đoạn để giữ cho hình ảnh nhỏ:
dockerfile
FROM golang:1.18 as builder
WORKDIR /src
COPY . .
RUN go build -o app
FROM alpine:3.16
COPY --from=builder /src/app /app
CMD ["/app"]
🚀 Kết luận
Một Dockerfile là bản thiết kế cho ứng dụng containerized của bạn. Với một vài hướng dẫn đơn giản, bạn có thể đóng gói mã của mình và chạy nó ở bất kỳ đâu.
Trong các bài viết tiếp theo, chúng ta sẽ khám phá xây dựng nhiều giai đoạn, caching, và các thực tiễn bảo mật tốt nhất cho Dockerfiles.
💡 Câu hỏi cho bạn:
👉 Phần khó khăn nhất bạn gặp phải khi viết Dockerfile đầu tiên là gì? Hãy để lại ý kiến của bạn trong phần bình luận 👇