Docker 是一個非常流行的容器化技術,可以將程序和所需的環境打包在一起,方便移植和部署。但是,在使用 Docker 時,有一個常見的誤區就是認為 Docker 會自動啟動進程。
實際上,Docker 并不會自動啟動應用程序,除非你在 Dockerfile 中明確設置了 CMD 或 ENTRYPOINT。如果沒有設置 CMD 或 ENTRYPOINT,Docker 構建完成后,容器實例會停留在初始狀態,不會自動運行。
FROM centos
RUN yum install -y httpd
# 沒有設置 CMD 或 ENTRYPOINT
在這個 Dockerfile 中,我們安裝了 Apache HTTP Server,但是沒有設置 CMD 或 ENTRYPOINT。通過構建這個 Docker 鏡像,我們可以創建一個包含 Apache 的容器實例,但是 Apache 進程并不會自動啟動。
這時,我們可以手動運行進程,比如:
docker run -it centos-httpd /bin/bash
systemctl start httpd
但是,這種做法并不方便,每次啟動容器都需要手動運行進程。因此,通常我們會在 Dockerfile 中設置 CMD 或 ENTRYPOINT:
FROM centos
RUN yum install -y httpd
CMD ["httpd", "-DFOREGROUND"]
這樣,我們在 Dockerfile 中設置了 CMD,指定了 Apache 進程以及啟動參數。這樣,在容器實例運行時,Apache 進程就會自動啟動。
總之,使用 Docker 時一定要注意,容器實例并不會自動啟動進程,需要通過 CMD 或 ENTRYPOINT 設置。