1. 程式人生 > >八個基本的 Docker 容器管理命令

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

本文英文原文:https://kerneltalks.com/virtualization/8-basic-docker-container-management-commands/

中文翻譯:https://www.iteblog.com/archives/2382.html (點選下面 閱讀原文 即可進入)

在本文中,我將介紹八個基本的 Docker 容器命令,這些命令對於在 Docker 容器上執行基本操作很有用,比如執行,列表,停止,檢視日誌,刪除等等。如果你對 Docker 的概念不熟悉,推薦你推薦你到網上檢視相關的入門介紹,這篇文章就不詳細介紹了。 現在我們趕快進入要了解的命令中:

如何執行 Docker 容器?

眾所周知,Docker 容器只是一個執行在宿主作業系統上的應用程式,所以對於一個 Docker 來說,你需要一個映象(image)來執行它。當 Docker 映象使用程序的方式執行時,我們稱之為 Docker 容器(Docker container)。你可以在本地獲取 Docker 映象,也可以從 Docker Hub 上下載。Docker Hub 是一個儲存公有和私有映象的集中倉庫。官方的 Docker Hub 位於 hub.docker.com。 當你使用 Docker 引擎執行容器時,它首先會搜尋本地映象,如果本地沒有找到,則會從 Docker Hub 上拉取相關的映象。

讓我們執行一個 Apache web 伺服器的 Docker 映象(比如 httpd 程序

。你需要使用 docker container run 命令。舊的命令是 docker run, 但因為 Docker 後來添加了子命令部分,所以新版本支援下面的命令 :

[email protected] # 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 將它拉取下來。請注意,Docker 引擎下載了映象 httpd:latest, 其中 : 後面跟著的是版本號,這是 Docker 容器映像的命名約定。如果你想要執行特定版本的容器,你可以在映象名後面標明相關的版本號。如果沒有提供版本,Docker 引擎將始終拉取最新的版本。

最後一行輸出顯示了新執行 httpd 容器的唯一容器標識。

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

現在,你的容器正在執行,你可能需要檢查它,或者你想要列出機器上所有執行的容器。你可以使用 docker container ls 命令來達到這個目的。在舊的 Docker 版本中,你需要使用 docker ps 命令來實現。

[email protected] # 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

結果是按列進行顯示的,每一列的值的含義分別為:

  • Container ID :容器唯一 ID 的前 12 個字母

  • Image :執行容器的映象名

  • Command :容器啟動後執行的命令

  • Created :建立時間

  • Status :容器的當前狀態

  • Ports :與主機埠繫結的詳細資訊

  • Names :容器的名稱(因為我們啟動容器的時候並沒有指定名稱,所以這裡顯示的是隨機生成的名字)

如何檢視 Docker 容器的執行日誌?

由於在第一步中我們使用了 -d 引數來將容器從當前 shell 分離出來,這樣它將會在後臺執行。在這種情況下,我們不清楚容器裡面發生了什麼,所以需要檢視容器的執行日誌。 Docker 為我們提供了 logs 命令,它將容器名稱或ID作為引數。

[email protected] # 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 命令。

[email protected] # 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
[email protected] # 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 作為引數。

[email protected] # docker container stop cranky_cori
cranky_cori

如何列出已停止或未執行的 Docker 容器?

現在我們停止了我們的容器,如果我們嘗試使用 ls 命令列出容器,我們將無法在裡面看到它。

[email protected] # docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

因此在這種情況下,如果想檢視停止或未執行的容器,你需要在 ls 命令裡同時使用 -a 引數,如下:

[email protected] # 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 容器?

現在讓我們來啟動這個已停止的容器,這和執行容器還是有所區別的。當你執行 (run) 容器時,你將在一個全新的容器裡面執行命令。當你啟動(start)一個容器時,你正在啟動一個已經儲存舊狀態的舊的已停止的容器。它將以停止時的狀態重新開始執行。

[email protected] #  docker container start c46f2e9e4690
c46f2e9e4690
[email protected] # 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 容器?

如果我們需要從 Docker 引擎裡面移除容器,我們可以使用 rm 命令。但是你不可以移除正在執行中的容器。移除之前你需要先停止容器。不過你也可以使用 rm 命令的同時帶上 -f 引數來強制移除容器,不過並不推薦這麼做。

[email protected] # docker container rm cranky_cori
cranky_cori
[email protected] # docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

容器被移除之後,我們將無法再使用 ls -a 命令檢視容器了。

猜你喜歡

歡迎關注本公眾號:iteblog_hadoop:

回覆 spark_summit_201806 下載 Spark Summit North America 201806 全部PPT

0、回覆 電子書獲取 本站所有可下載的電子書

11、更多大資料文章歡迎訪問https://www.iteblog.com及本公眾號(iteblog_hadoop)12、Flink中文文件:http://flink.iteblog.com13、Carbondata 中文文件http://carbondata.iteblog.com

640?wx_fmt=png