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.

FROM ubuntu:20.04

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.

COPY ./app /usr/src/app

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.

ENV APP_ENV=production

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.

EXPOSE 80

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.

VOLUME /data

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.

WORKDIR /usr/src/app

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.

USER appuser

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.

ARG VERSION=1.0

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.