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 容器。