
Xây dựng một Docker Image từ Dockerfile
- 03 thg 5, 2024
Vấn đề
Trong các bài viết trước, chúng ta đã tìm hiểu Docker Image là thành phần quan trọng để chạy một container. Nhưng làm cách nào để tạo ra Docker Image? Đó là lúc chúng ta cần đến Dockerfile.
Dockerfile chứa các chỉ dẫn từng bước để xây dựng Docker Image. Hiểu rõ cách sử dụng Dockerfile sẽ giúp bạn tối ưu hóa quá trình đóng gói ứng dụng.
Câu lệnh cơ bản khi làm việc với Docker Image
Một số lệnh thường dùng
docker build -t IMAGE[:TAG] PATH
: Xây dựng Docker Image từ Dockerfile.docker pull IMAGE[:TAG|@DIGEST]
: Tải Image từ registry về máy.docker push IMAGE[:TAG]
: Đẩy Image lên registry.docker images
: Liệt kê các Image trên máy.docker rmi IMAGE[:TAG]
: Xóa một Image.
Ví dụ:
docker build -t my-app .
docker run -p 3000:3000 my-app
Các thành phần cơ bản của Dockerfile
Dockerfile sử dụng các từ khóa để định nghĩa từng bước trong quá trình tạo Docker Image. Dưới đây là những chỉ dẫn phổ biến:
1. FROM
-
Ý nghĩa: Xác định Image cơ sở mà Docker Image của bạn sẽ dựa vào.
-
Cú pháp:
FROM <base-image>:<tag>
-
Ví dụ:
FROM node:20
2. WORKDIR
-
Ý nghĩa: Thiết lập thư mục làm việc mặc định cho các lệnh tiếp theo trong Dockerfile.
-
Cú pháp:
WORKDIR /path/to/directory
-
Ví dụ:
WORKDIR /app
3. COPY
và ADD
-
COPY: Sao chép file từ máy host vào container.
-
ADD: Giống
COPY
, nhưng hỗ trợ giải nén file và tải file từ URL. -
Cú pháp:
COPY <source> <destination> ADD <source> <destination>
-
Ví dụ:
COPY package.json . ADD https://example.com/config.tar.gz /app/config/
4. RUN
-
Ý nghĩa: Thực thi các lệnh trong quá trình build Image.
-
Cú pháp:
RUN <command>
-
Ví dụ:
RUN npm install
5. EXPOSE
-
Ý nghĩa: Ghi chú cổng mà container sẽ lắng nghe, không mở cổng thực sự.
-
Cú pháp:
EXPOSE <port>
-
Ví dụ:
EXPOSE 3000
6. ENTRYPOINT
và CMD
-
ENTRYPOINT: Xác định lệnh chính mà container sẽ chạy.
-
CMD: Cung cấp tham số mặc định cho
ENTRYPOINT
hoặc lệnh mặc định nếuENTRYPOINT
không được định nghĩa. -
Cú pháp:
ENTRYPOINT ["executable", "param1", "param2"] CMD ["param3", "param4"]
-
Ví dụ:
ENTRYPOINT ["node"] CMD ["app.js"]
Khi container chạy, lệnh thực thi sẽ là:
node app.js
Tạo Docker Image từ Dockerfile
Dockerfile mẫu
Dưới đây là một Dockerfile để chạy ứng dụng Node.js:
# Chọn base image Node.js
FROM node:20
# Thiết lập thư mục làm việc
WORKDIR /app
# Copy source code và cài đặt dependencies
COPY . .
RUN npm install
# Ghi chú cổng ứng dụng
EXPOSE 3000
# Chỉ định lệnh chạy ứng dụng
CMD ["node", "app.js"]
Build và chạy Image
-
Build Docker Image:
docker build -t node-app .
-
Chạy container từ Image:
docker run -p 3000:3000 node-app
Kết luận
Dockerfile là công cụ mạnh mẽ giúp bạn tự động hóa quá trình tạo Docker Image. Hiểu rõ cách sử dụng các từ khóa trong Dockerfile sẽ giúp bạn xây dựng các Image tối ưu và triển khai ứng dụng dễ dàng hơn.
Bài viết tiếp theo sẽ tập trung vào các best practices khi viết Dockerfile và tối ưu hiệu suất container. Cảm ơn bạn đã theo dõi!