RUN, ENTRYPOINT, và CMD là 2 chỉ dẫn lệnh được sử dụng thường xuyên trong Dockerfiles. Vậy 3 câu lệnh đó khác nhau như thế nào?
Câu lệnh RUN
RUN được thực thi trong quá trình build. Khi ta build một Docker image, Docker sẽ đọc các câu lệnh trong chỉ dẫn RUN và build tới một layer mới trong image sử dụng.# Use an existing Docker image as a base
FROM alpine:3.16.2
# Download and install a dependency
RUN apk add --no-cache iputils
# Tell the image what to do when it starts as a container
CMD ["/bin/sh"]
Chỉ dẫn RUN sẽ thực thi câu lệnh trong layer mới nằm trên images hiện đang sử dụng và commit kết quả.
Kết quả là images đã được commit sẽ được sử dụng trong bước tiếp theo được khai báo trong Dockerfiles
Câu lệnh ENTRYPOINT
Lệnh ENTRYPOINT cho phép ta cấu hình container sẽ chạy dưới dạng thực thi. Lệnh ENTRYPOINT và các tham số không bị ignore khi Docker container chạy.
ENTRYPOINT có 2 dạng form:
ENTRYPOINT ["executable", "param1", "param2"] (exec form)
ENTRYPOINT command param1 param2 (shell form)
CMD
CMD cho phép ta set default command, có nghĩa là command này sẽ chỉ được chạy khi run container mà không chỉ định một command. Nếu docker run với một command thì default command sẽ được ignore. Nếu dockerfile có nhiều hơn một lệnh CMD thì tất cả sẽ bị ignore ngoại trừ lệnh CMD cuối cùng.
CMD có 3 dạng form:
CMD ["executable", "param1", "param2"] (exec form)
CMD ["param1", "param2"] (đặt các tham số mặc định cho ENTRYPOINT ở dạng exec form)
CMD command param1 param2 (shell form)
Tham khảo
https://techmaster.vn/posts/36513/su-khac-biet-giua-run-cmd-va-entrypoint-trong-dockerfile
Nhận xét
Đăng nhận xét