8 個基本的 Docker 容器管理命令

8 個基本的 Docker 容器管理命令

編譯自: https://kerneltalks.com/virtualization/8-basic-docker-container-management-commands/

作者: Shrikant Lavhate

譯者: Lonaparte_CHENG

利用這 8 個命令可以學習 Docker 容器的基本管理方式。這是一個為 Docker 初學者準備的,帶有示範命令輸出的指南。

在這篇文章中,我們將帶你學習 8 個基本的 Docker 容器命令,它們操控著 Docker 容器的基本活動,例如運行(run)、 列舉(list)、 停止(stop)、 查看 歷史紀錄(logs)、 刪除(delete) 等等。如果你對 Docker 的概念很陌生,推薦你看看我們的 介紹指南 ,來了解 Docker 的基本內容以及 如何 在 Linux 上安裝 Docker。 現在讓我們趕快進入要了解的命令:

如何運行 Docker 容器?

眾所周知,Docker 容器只是一個運行於 宿主操作系統(host OS)上的應用進程,所以你需要一個鏡像來運行它。Docker 鏡像以進程的方式運行時就叫做 Docker 容器。你可以加載本地 Docker 鏡像,也可以從 Docker Hub 上下載。Docker Hub 是一個提供公有和私有鏡像來進行 拉取(pull)操作的集中倉庫。官方的 Docker Hub 位於 hub.docker.com 。 當你指示 Docker 引擎運行容器時,它會首先搜索本地鏡像,如果沒有找到,它會從 Docker Hub 上拉取相應的鏡像。

讓我們運行一個 Apache web 服務器的 Docker 鏡像,比如 httpd 進程。你需要運行 docker container run 命令。舊的命令為 docker run, 但後來 Docker 添加了子命令部分,所以新版本支持下列命令:

root@kerneltalks # docker container run -d -p 80:80 httpd

Unable to find image 'httpd:latest' locally

latest: Pulling from library/httpd

3d77ce4481b1: Pull complete

73674f4d9403: Pull complete

d266646f40bd: Pull complete

ce7b0dda0c9f: Pull complete

01729050d692: Pull complete

014246127c67: Pull complete

7cd2e04cf570: Pull complete

Digest: sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617

Status: Downloaded newer image for httpd:latest

c46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682

Docker 的 run 命令將鏡像名作為強制參數,另外還有很多可選參數。常用的參數有:

  • -d:從當前 shell 脫離容器
  • -p X:Y:綁定容器的端口 Y 到宿主機的端口 X
  • --name:命名你的容器。如果未指定,它將被賦予隨機生成的名字
  • -e:當啟動容器時傳遞環境編輯及其值

通過以上輸出你可以看到,我們將 httpd 作為鏡像名來運行容器。接著,本地鏡像沒有找到,Docker 引擎從 Docker Hub 拉取了它。注意,它下載了鏡像 httpd:latest, 其中 : 後面跟著版本號。如果你需要運行特定版本的容器,你可以在鏡像名後面註明版本名。如果不提供版本名,Docker 引擎會自動拉取最新的版本。

輸出的最後一行顯示了你新運行的 httpd 容器的唯一 ID。

如何列出所有運行中的 Docker 容器?

現在,你的容器已經運行起來了,你可能想要確認這一點,或者你想要列出你的機器上運行的所有容器。你可以使用 docker container ls 命令。在舊的 Docker 版本中,對應的命令為 docker ps。

root@kerneltalks # docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c46f2e9e4690 httpd "httpd-foreground" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp cranky_cori

列出的結果是按列顯示的。每一列的值分別為:

  1. Container ID :一開始的幾個字符對應你的容器的唯一 ID
  2. Image :你運行容器的鏡像名
  3. Command :容器啟動後運行的命令
  4. Created :創建時間
  5. Status :容器當前狀態
  6. Ports :與宿主端口相連接的端口信息
  7. Names :容器名(如果你沒有命名你的容器,那麼會隨機創建)

如何查看 Docker 容器的歷史紀錄?

在第一步我們使用了 -d 參數來將容器,在它一開始運行的時候,就從當前的 shell 中脫離出來。在這種情況下,我們不知道容器裡面發生了什麼。所以為了查看容器的歷史紀錄,Docker 提供了 logs 命令。它採用容器名稱或 ID 作為參數。

root@kerneltalks # docker container logs cranky_cori

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

[Thu May 31 18:35:07.301158 2018] [mpm_event:notice] [pid 1:tid 139734285989760] AH00489: Apache/2.4.33 (Unix) configured -- resuming normal operations

[Thu May 31 18:35:07.305153 2018] [core:notice] [pid 1:tid 139734285989760] AH00094: Command line: 'httpd -D FOREGROUND'

這裡我使用了容器名稱作為參數。你可以看到在我們的 httpd 容器中與 Apache 相關的歷史紀錄。

如何確定 Docker 容器的進程?

容器是一個使用宿主資源來運行的進程。這樣,你可以在宿主系統的進程表中定位容器的進程。讓我們在宿主系統上確定容器進程。

Docker 使用著名的 top 命令作為子命令的名稱,來查看容器產生的進程。它採用容器的名稱或 ID 作為參數。在舊版本的 Docker 中,只可運行 docker top 命令。在新版本中,docker top 和 docker container top 命令都可以生效。

root@kerneltalks # docker container top cranky_cori

UID PID PPID C STIME TTY TIME CMD

root 15702 15690 0 18:35 ? 00:00:00 httpd -DFOREGROUND

bin 15729 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND

bin 15730 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND

bin 15731 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND

root@kerneltalks # ps -ef |grep -i 15702

root 15702 15690 0 18:35 ? 00:00:00 httpd -DFOREGROUND

bin 15729 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND

bin 15730 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND

bin 15731 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND

root 15993 15957 0 18:59 pts/0 00:00:00 grep --color=auto -i 15702

在第一個輸出中,列出了容器產生的進程的列表。它包含了所有細節,包括 用戶號(uid)、 進程號(pid), 父進程號(ppid)、開始時間、命令,等等。這裡所有的進程號你都可以在宿主的進程表裡搜索到。這就是我們在第二個命令裡做得。這證明了容器確實是宿主系統中的進程。

如何停止 Docker 容器?

只需要 stop 命令!同樣,它採用容器名稱或 ID 作為參數。

root@kerneltalks # docker container stop cranky_cori

cranky_cori

如何列出停止的或不活動的 Docker 容器?

現在我們停止了我們的容器,這時如果我們使用 ls 命令,它將不會出現在列表中。

root@kerneltalks # docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

所以,在這種情況下,如果想要查看停止的或不活動的容器,你需要在 ls 命令裡同時使用 -a 參數。

root@kerneltalks # docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c46f2e9e4690 httpd "httpd-foreground" 33 minutes ago Exited (0) 2 minutes ago cranky_cori

有了 -a 參數,現在我們可以查看已停止的容器。注意這些容器的狀態被標註為 已退出(exited)。既然容器只是一個進程,那麼用“退出”比“停止”更合適!

如何(重新)啟動 Docker 容器?

現在,我們來啟動這個已停止的容器。這和運行一個容器有所區別。當你運行一個容器時,你將啟動一個全新的容器。當你啟動一個容器時,你將開始一個已經停止並保存了當時運行狀態的容器。它將以停止時的狀態重新開始運行。

root@kerneltalks # docker container start c46f2e9e4690

c46f2e9e4690

root@kerneltalks # docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c46f2e9e4690 httpd "httpd-foreground" 35 minutes ago Up 8 seconds 0.0.0.0:80->80/tcp cranky_cori

如何移除 Docker 容器?

我們使用 rm 命令來移除容器。你不可以移除運行中的容器。移除之前需要先停止容器。你可以使用 -f 參數搭配 rm 命令來強制移除容器,但並不推薦這麼做。

root@kerneltalks # docker container rm cranky_cori

cranky_cori

root@kerneltalks # docker container ls -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

你看,一旦移除了容器,即使再使用 ls -a 命令也查看不到容器了。


via: https://kerneltalks.com/virtualization/8-basic-docker-container-management-commands/

作者: Shrikant Lavhate 選題: lujun9972 譯者: lonaparte 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: