「docker run」和「docker exec」都是 Docker 容器中用於執行的命令。然而,在不一樣的狀況下,它們的使用有着本質上的區別。javascript
「docker run」命令
「docker run」一般是在新建立的容器中所使用的命令。 它適用於在沒有其餘容器運行的狀況下,您想要建立一個容器,而且要啓動它,而後在其上運行一個進程。它的格式以下所示:java
docker run [OPTIONS] IMAGE COMMAND [ARG...]
在「docker run」命令以後,您必須經過指定鏡像來建立容器,同時還能夠指定的[OPTIONS]和[ARG...],例如:docker
docker run --name ubuntu_bash --rm -i -t ubuntu bash
上述命令將建立一個名爲 ubuntu_bash 的容器並啓動一個 Bash 會話。該示例中所使用的[OPTIONS]和[ARG...]的詳細解讀以下所示:shell
- --name 爲容器指定名稱,在本例中的容器名稱爲 ubuntu_bash;
- --rm 就像 bash 中的 rm 命令同樣,它會刪除容器,但這裏它會在該容器退出時進行刪除;
- -i 就是 –interactive 的縮寫,它確保了即便沒有鏈接到正在運行的容器,STDIN(標準輸入)也會處於打開狀態;
- -t 也可使用 –tty 來進行引用,在容器中啓動交互式的 bashshell;
- 容器的鏡像應遵循[OPTIONS],這裏的是鏡像 ubuntu;
- 緊隨鏡像後面的部分是您要運行的命令:bash;
想了解更多關於「docker run」的更多[OPTIONS]信息,請查看https://docs.docker.com/engine/reference/commandline/run/。ubuntu
「docker exec」命令
「docker exec」適用於在現有容器中運行命令的狀況。若是您已經擁有了一個正在運行的容器,並但願更改該容器或從中獲取某些內容,那麼使用「docker exec」命令就很是合適了。例如,若是您使用了 docker-compose,那麼您可能會啓動多個容器,而且但願可以在建立它們後訪問其中的一個或多個容器。它的格式以下所示:bash
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
「docker exec」也有着一系列能夠指定的[OPTIONS]和[ARG...],儘管您須要確保容器和命令的狀態才能執行。您可使用如下命令在名爲 ubuntu_bash 的容器上啓動交互式的 bash shell:markdown
docker exec -it ubuntu_bash bash
這裏的[OPTIONS] –it 與「docker run」命令中的相同。 更多[OPTIONS]和[ARG...]的示例以下所示:ide
docker exec -d -w /temp ubuntu_bash touch my_file.sh
- -w 後跟目錄或文件路徑,您能夠說明要在哪一個工做目錄中運行命令;
- -d 或 –detached 表示容器將以分離模式運行,所以您仍然能夠繼續將終端會話和在後臺運行的容器一塊兒使用。若是要查看容器發送到 STDOUT 的內容,請不要使用此選項;
- 該命令用於建立名爲 my_file.sh 的文件,在 /temp 目錄下運行名爲 ubuntu_bash 的容器;
想了解更多關於「docker exec」的更多[OPTIONS]信息,請查看https://docs.docker.com/engine/reference/commandline/exec/。ui
瞭解更多
除了這兩個命令以外,還有其餘一些具備細微差異的 Docker 命令,例如 run 與 build 與create 的類似之處。瞭解更多並嘗試不一樣的 docker 命令能夠幫助您成爲使用這種強大雲技術的專業人士。url