在 Docker Run 中運行多個命令
一、概述
Docker是在隔離環境中打包應用程序的有用工具。它簡化了在多個平台上部署應用程序的過程。 docker run命令用於從 Docker 映像啟動新容器。默認情況下, docker run命令只在容器中執行一條命令。但是,在某些情況下,我們可能需要在單個docker run命令中運行多個命令。
在本教程中,我們將討論如何在 Docker 容器啟動時運行多個命令。
2.使用**docker run命令**
要在docker run命令中執行多個命令,我們可以使用&&
運算符將命令鏈接在一起。 &&
運算符執行第一個命令,如果成功,則執行第二個命令。
例如,為了在單個運行命令中運行whoami
和date
命令,我們可以使用以下命令:
$ docker run centos:latest whoami && date
root
Sun Dec 18 10:09:30 UTC 2022
在上面的輸出中,我們可以看到whoami
和date
命令都以正確的順序執行。
或者,我們可以在shell**中使用-c
選項**來同時執行多個命令。 sh
-c
選項允許我們將包含多個命令的字符串作為參數傳遞。讓我們使用sh -c
運行whoami
和date
命令:
$ docker run centos:latest sh -c "whoami && date"
root
Sun Dec 18 10:10:12 UTC 2022
這會在單個運行命令中同時執行whoami
和date
命令。我們也可以使用;
帶有sh
的-c
選項的運算符可以運行多個命令。此外,讓我們使用-w
選項指定要在 Docker 容器中執行的命令的工作目錄:
$ docker run -w /home centos:latest sh -c "whoami ; pwd"
root
/home
在這裡,我們可以看到whoami
和pwd
命令都執行了,但是這次/home
是docker容器執行這些命令的默認工作目錄。
3. 在 Dockerfile 中使用CMD/ENTRYPOINT
Dockerfile
除了在 run 命令中運行多個命令,我們還可以在 Dockerfile 的**CMD/ENTRYPOINT
Dockerfile
指定多個命令。**
Dockerfile
的CMD
和ENTRYPOINT
定義了在容器啟動時執行的默認命令。如果我們向ENTRYPOINT
和CMD
部分添加多個命令,Docker 將按順序運行它們。
讓我們看看Dockerfile
在ENTRYPOINT
部分指定多個命令:
FROM centos
ENTRYPOINT ["sh", "-c", "whoami && date"]
為了運行容器,我們需要先構建鏡像:
$ docker build -f Dockerfile -t baeldung_run .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos
---> 5d0da3dc9764
Step 2/2 : ENTRYPOINT ["sh", "-c", "whoami && date"]
---> Running in dd027b5ba1e9
Removing intermediate container dd027b5ba1e9
---> a43dfa09d48b
Successfully built a43dfa09d48b
Successfully tagged baeldung_run:latest
讓我們使用上面的baeldung_run:latest圖像運行一個容器:
$ docker run -itd --name baeldung_run baeldung_run
b2a8ff012797d6110fd73dfffbf3c39e081f111dc50aac5d9d62fa73845b8a59
現在,我們可以通過查看baeldung_run容器的日誌文件來驗證命令的執行情況:
$ docker logs -f baeldung_run
root
Sun Dec 18 10:13:44 UTC 2022
從上面的輸出我們可以看出,兩條命令都執行成功了。
我們還可以使用CMD
指令運行多個命令。讓我們看看帶有CMD
指令的Dockerfile
:
FROM centos
CMD ["sh", "-c", "whoami && date"]
同樣,我們需要先創建 Docker 鏡像,然後運行一個容器。在容器日誌中,我們將看到使用ENRTYPOINT
指令生成的相同輸出。
我們應該注意CMD
和ENTRYPOINT
指令不能相互替代。它們都有不同的用途。但是,在ENTRYPOINT
和CMD
中運行多個命令遵循相同的語法。
4。結論
在本文中,我們討論瞭如何在正在運行的 Docker 容器中運行多個命令。
首先,我們學習了使用docker run
命令執行多個命令。之後,我們使用 Dockerfile 中的Dockerfile
ENTRYPOINT/CMD
指令進行了探索。