Trong Docker, CMD
và ENTRYPOINT
là hai chỉ thị được sử dụng trong Dockerfile để xác định lệnh mà container sẽ thực thi khi khởi động. Tuy nhiên, chúng có cách hoạt động và mục đích khác nhau. Bài viết này sẽ giải thích chi tiết sự khác biệt giữa hai chỉ thị này và cách sử dụng chúng một cách hiệu quả.
CMD
được sử dụng để chỉ định lệnh mặc định mà container sẽ chạy khi không có lệnh nào khác được cung cấp.CMD
:
shell
.Ví dụ về cách sử dụng CMD
:
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT
được sử dụng để xác định lệnh chính mà container sẽ chạy, với khả năng không bị ghi đè bởi các tham số. Điều này có nghĩa là bất kỳ lệnh nào được cung cấp khi chạy container sẽ được truyền đến lệnh trong ENTRYPOINT
.CMD
, ENTRYPOINT
cũng có thể được sử dụng với chuỗi hoặc mảng.Ví dụ về cách sử dụng ENTRYPOINT
:
ENTRYPOINT ["nginx"]
docker run myimage echo "Hello World"
Khi đó, lệnh echo "Hello World"
sẽ được thực thi thay vì lệnh được chỉ định trong CMD
.
ENTRYPOINT
.docker run myimage "Hello World"
Lệnh thực thi sẽ là nginx "Hello World"
.
ENTRYPOINT
hoặc để chỉ định lệnh mặc định khi không có lệnh nào được cung cấp.Bạn có thể sử dụng cả hai chỉ thị trong cùng một Dockerfile để có được chức năng tối ưu. Ví dụ:
ENTRYPOINT ["nginx"] CMD ["-g", "daemon off;"]
Khi chạy container, lệnh sẽ là nginx -g daemon off;
. Nếu bạn muốn thay đổi tham số, bạn chỉ cần cung cấp tham số mới:
docker run myimage "-g daemon on;"
Lệnh thực thi sẽ là nginx -g daemon on;
.
Sự khác biệt giữa CMD
và ENTRYPOINT
rất quan trọng trong việc thiết kế Dockerfile. Việc hiểu rõ cách hoạt động của chúng sẽ giúp bạn tạo ra các container có khả năng tùy biến cao và dễ dàng quản lý.