Home >> Blog >> 簡單了解Docker run運行指令

簡單了解Docker run運行指令

Docker 是一個平台,允許您將應用程式開發、測試和部署為幾乎可以在任何地方運行的可移植、自給自足的容器。

該docker run命令從給定圖像創建容器並使用給定命令啟動容器。這是您開始使用 Docker 跑SEO公司Email server時,應該熟悉的首批命令之一。

在本文中,我們將使用官方 Nginx 鏡像來展示運行 Docker 容器的各種方式。

Docker 運行命令

該docker run命令採用以下形式:

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

應從中創建容器的映像mirror的名稱是該docker run命令唯一必需的參數。如果本地系統上不存在該映像,則從註冊表中提取該映像。

如果未指定命令,則在容器運行時執行DockerfileCMD或指令中指定的命令。ENTRYPOINT

從 1.13 版開始,Docker CLI 進行了重組。所有命令都被分組在它們與之交互的對像下。

由於該run命令與容器交互,因此它是docker container. 新命令的語法如下:

$ docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

仍然支持舊的 1.13 之前的語法。在後台,docker runcommand 是docker container run. 鼓勵用戶使用新的命令語法。

docker container run可以在Docker 文檔 頁面上找到所有選項的列表。

在前台運行容器

默認情況下,當沒有為docker run命令提供選項時,root 進程在前台啟動。這意味著來自根進程的標準輸入、輸出和錯誤都附加到終端會話。

$ docker container run nginx

nginx 進程的輸出將顯示在您的終端上。由於沒有與網絡服務器的連接,因此終端是空的。

要停止容器,請按 終止正在運行的 Nginx 進程CTRL+C。

以分離模式運行容器

要在退出終端會話時保持容器運行,請以分離模式啟動它。這類似於在後台運行 Linux 進程 。

使用該-d選項啟動分離的容器:

$ docker container run -d nginx

Output
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

當根進程終止時,分離的容器將停止。

docker container ls 您可以使用該命令列出正在運行的容器。

要將終端附加到分離的容器根進程,請使用docker container attach 命令。

退出後移除容器

默認情況下,當容器退出時,其文件系統會保留在主機系統上。

--rm選項告訴命令在docker run容器自動退出時刪除它:

$ docker container run --rm nginx

Nginx 鏡像可能不是容器退出後清理容器文件系統的最佳示例。此選項通常用於執行短期任務(例如測試或數據庫備份)的前台容器。

設置容器名稱#

在 Docker 中,每個容器都由其UUID和名稱標識。默認情況下,如果沒有明確設置,容器的名稱由 Docker 守護進程自動生成。

使用該--name選項為容器分配自定義名稱:

$ docker container run -d --name my_nginx nginx

容器名稱必須是唯一的。如果您嘗試啟動另一個具有相同名稱的容器,您將收到類似以下的錯誤:

TOutput
docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9...c". You have to remove (or rename) that container to be able to reuse that name.

運行docker container ls -a以列出所有容器,並查看它們的名稱:

$ docker container ls

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d695c1f5ef4 nginx "nginx -g 'daemon of…" 36 seconds ago Up 35 seconds 80/tcp my_nginx

有意義的名稱對於在 Docker 網絡中引用容器或在運行 docker CLI 命令時很有用。

發布容器port#

默認情況下,如果沒有發布port,則容器中運行的進程只能從容器內部訪問。

發布port意味著將容器port映射到主機port,以便這些port可用於 Docker 之外的服務。

要發布port,請使用以下-p選項:

-p host_ip:host_port:container_port/protocol

  • 如果沒有host_ip指定,則默認為0.0.0.0。
  • 如果protocol指定 no,則默認為 TCP。
  • 要發布多個port,請使用多個-p選項。

要將容器中的 TCP port 80 (nginx) 映射到主機 localhost 接口上的port 8080,您將運行:

$ docker container run --name web_server -d -p 8080:80 nginx

http://localhost:8080您可以通過在瀏覽器中打開或curl 在 Docker 主機上運行以下命令來驗證port是否已發布:

$ curl -I http://localhost:8080

輸出將如下所示:

Output
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Tue, 26 Nov 2019 22:55:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
Connection: keep-alive
ETag: "5dd3e500-264"
Accept-Ranges: bytes

共享數據(安裝卷)#

當容器停止時,容器生成的所有數據都將被刪除。Docker 卷是使數據持久化並在多個容器之間共享的首選方式。

要創建和管理卷,請使用以下-p選項:

-v host_src:container_dest:options

  • host_src可以是主機或命名卷上的文件或目錄的絕對路徑。
  • 是容器上文件或目錄的container_dest絕對路徑。
  • 選項可以是rw(讀寫)和ro(只讀)。如果未指定選項,則默認為rw.

為了解釋它是如何工作的,讓我們 在主機上創建一個目錄index.html並在其中放入一個文件:

$ mkdir public_html
$ echo "Testing Docker Volumes" > public_html/index.html

接下來,將public_html目錄掛載到/usr/share/nginx/html容器中:

$ docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

我們沒有指定目錄的絕對路徑public_html,而是使用$(pwd)打印當前工作目錄的命令 。

現在,如果您http://localhost:8080在瀏覽器中鍵入,您應該會看到index.html文件的內容。您還可以使用curl:

$ curl http://localhost:8080

Output
Testing Docker Volumes

交互式運行容器#

在處理諸如 之類的交互過程時bash,使用-i和-t選項來啟動容器。

這些-it選項告訴 Docker 保持標準輸入連接到終端並分配一個偽 tty:

$ docker container run -it nginx /bin/bash

容器的 Bash shell 將附加到終端,命令提示符將更改:

Output
root@1da70f1937f5:/#

現在,您可以與容器的外殼交互並在其中運行任何命令。

在此示例中,我們提供了一個命令 ( /bin/bash) 作為docker run已執行命令的參數,而不是 Dockerfile 中指定的命令。

結論

Docker 是打包和部署應用程式的標準,也是 CI/CD、自動化和 DevOps 的重要組成部分。

該docker container run命令用於創建和運行 Docker 容器。