Dockerfile là một tập tin quan trọng trong việc xây dựng và quản lý các Docker images. Việc hiểu rõ các instructions trong Dockerfile sẽ giúp bạn tối ưu hóa quy trình phát triển ứng dụng và quản lý container một cách hiệu quả. Trong bài viết này, chúng ta sẽ cùng khám phá những instructions phổ biến nhất, cách sử dụng chúng và một số ví dụ thực tiễn để bạn có thể nắm vững cách tạo ra một Docker image chất lượng.
1. FROM
Instruction FROM được sử dụng để chỉ định base image mà Docker image mới sẽ được xây dựng từ đó. Mỗi Dockerfile cần có ít nhất một lệnh FROM.
Trong ví dụ trên, chúng ta chọn ubuntu:20.04 làm base image. Nếu không chỉ định, Docker sẽ không biết bắt đầu từ đâu.
2. RUN
Instruction RUN cho phép bạn thực thi các lệnh trong quá trình xây dựng image. Các lệnh này thường dùng để cài đặt phần mềm và tạo ra một layer mới trong image.
RUN apt-get update && apt-get install -y nginx
Lệnh trên sẽ cập nhật danh sách gói và cài đặt nginx trong image.
3. COPY
Instruction COPY được sử dụng để sao chép các file hoặc thư mục từ hệ thống file của host vào trong image. Đây là cách đơn giản để đưa mã nguồn hoặc tài nguyên vào container.
Trong ví dụ này, thư mục app từ máy host sẽ được sao chép vào thư mục /usr/src/app trong container.
4. ADD
Instruction ADD tương tự như COPY, nhưng nó còn hỗ trợ thêm tính năng giải nén file tar và tải file từ URL.
ADD myapp.tar.gz /usr/src/app
Lệnh này không chỉ sao chép file myapp.tar.gz mà còn giải nén nó vào thư mục đích.
5. CMD
Instruction CMD chỉ định lệnh mặc định sẽ chạy khi container khởi động. Nếu có nhiều lệnh CMD, chỉ lệnh cuối cùng sẽ được thực thi.
CMD ["nginx", "-g", "daemon off;"]
Khi container khởi động, lệnh này sẽ chạy nginx ở chế độ không daemon (foreground).
6. ENTRYPOINT
Instruction ENTRYPOINT cho phép bạn chỉ định lệnh chính sẽ luôn được chạy khi container khởi động. Khác với CMD, lệnh này không dễ dàng bị ghi đè.
ENTRYPOINT ["python", "app.py"]
Lệnh này đảm bảo rằng app.py sẽ luôn được thực thi khi container khởi động.
7. ENV
Instruction ENV cho phép bạn thiết lập các biến môi trường trong image, giúp quản lý cấu hình ứng dụng dễ dàng hơn.
Biến môi trường APP_ENV được thiết lập với giá trị production, có thể sử dụng trong mã nguồn của ứng dụng.
8. EXPOSE
Instruction EXPOSE chỉ định cổng mà container sẽ lắng nghe. Điều này không tự động mở cổng nhưng cung cấp thông tin cho người dùng.
Cổng 80 được chỉ định là cổng mà container sẽ lắng nghe khi chạy ứng dụng web.
9. VOLUME
Instruction VOLUME cho phép bạn tạo một mount point với tên được chỉ định và đánh dấu nó là một volume. Điều này giúp lưu trữ dữ liệu giữa các lần chạy container.
Thư mục /data sẽ được đánh dấu là volume, giúp bảo toàn dữ liệu ngay cả khi container bị xóa.
10. WORKDIR
Instruction WORKDIR thiết lập thư mục làm việc cho các lệnh RUN, CMD, ENTRYPOINT, COPY và ADD.
Thư mục /usr/src/app sẽ trở thành thư mục làm việc, giúp giảm bớt việc chỉ định đường dẫn đầy đủ.
11. USER
Instruction USER cho phép bạn chỉ định người dùng để chạy container, điều này rất hữu ích cho bảo mật.
Container sẽ chạy với quyền của người dùng appuser, thay vì root.
12. ARG
Instruction ARG khai báo biến có thể được truyền vào quá trình build. Biến này chỉ tồn tại trong quá trình xây dựng image.
Biến VERSION có thể được sử dụng trong các lệnh khác trong Dockerfile.
Kết luận
Những instructions trong Dockerfile là công cụ mạnh mẽ giúp bạn xây dựng và quản lý Docker images một cách hiệu quả. Bằng cách hiểu rõ cách sử dụng từng instruction, bạn có thể tối ưu hóa quy trình phát triển ứng dụng và đảm bảo môi trường chạy container ổn định. Hãy thực hành thường xuyên để nắm vững kiến thức này, và bạn sẽ thấy sự khác biệt trong quy trình phát triển của mình.