使用Docker客戶端管理容器:這些命令必須知道

HitTwice發表於2018-08-10

【IT168 編譯】有時候,容器管理對於不熟悉這種技術的IT人員來說可能有點“可怕”。筆者希望透過這篇文章向大家解釋我們能夠如何管理和執行一些涉及容器管理的任務,使這個主題更清晰。

傳統上,在管理物理伺服器或虛擬機器時,我們只需要連線RDP(執行Windows時)或SSH(執行Linux時)來訪問控制檯,然後從那裡執行任務。然而,容器被設計成是準備好可以用於生產的。從理論上講,我們不應該像以前的IT人員樣每天管理它們。但是,理解如何執行此類故障排除任務以及理解技術也是很重要的。

執行容器

IT人員在建立容器時可能犯的第一個錯誤是忘記映像和容器之間的關係。兩者有一種關係是,一個映像允許建立N個容器。請記住,映像是隻讀的,而當我們建立容器時,有一個薄的讀寫層,它允許我們將資料寫入容器,並且該資料將在容器生命週期中持久存在。

另一個重要的要點是,容器被設計為執行單個應用程式,如果該應用程式被終止,我們可以假設容器也將被停止。

為什麼這麼說?讓我們舉一個簡單的例子:我們希望立即執行 docker run alpine 以及容器退出,所以我們使用 -it ,這迫使它進行互動並使用當前終端。因為我想讓這個會話在後臺執行,所以使用鍵盤按鍵 Ctrl + p ,然後 Ctrl + q ,這樣重複四次,如下圖所示。

挑戰在於:如果你不指定容器的名稱,那麼Docker基於自身的演算法將為你建立一個名字,但如果我們試圖複製一個檔案到一個特定的容器中,儘管它們共享相同的映像和有相同的應用程式,我們仍需要能夠識別容器。因為稍後很可能我們將不記得那個名稱或容器ID資訊。

managing containers

如果我們將一個檔案複製到第一個容器(例如cranky_pike),那麼只有這個容器會有該檔案,假設你不記得容器名稱或ID,這種情況下最好的解決方案是習慣性地使用開關(switch) --name<name> 以對相應的容器貼標籤,這些開關可以在建立容器使用。

由於我們處於當前場景中,如果我們需要返回任何給定容器的shell,我們可以利用 docker container attach <container-name>  命令。

注意:你可以使用容器名稱或任何字串作為容器的唯一標識。我們不需要輸入整個容器ID,在這種情況下,我可以只使用字母“f”,因為這個容器是唯一一個以“f”開頭的。

managing containers

我當前的容器列表是空的,為什麼?

Docker客戶端命令 docker container list 只列出活動的容器。要獲得所有容器的列表,只需在同一個Docker客戶端命令的末尾新增開關 --all (如下圖所示)。

managing containers

現在如果我想回到一個特定的容器,去檢查一些東西或抓取一個檔案,我該怎麼做?第一件事是啟動容器,然後返回會話。美妙之處在於,用於建立的命令也可以用於啟動容器(這是有意義的),因此不需要傳遞額外的引數。使用以下Docker客戶端命令,我們就能夠啟動任何已停止的容器。

docker container start <container-name-or-ID>
docker container attach <container-name-or-ID>

有辦法自動清理未使用的容器嗎?

沒有。如果我們在建立容器時使用開關 --rm ,我們就在容器上設定了一個標記,一旦容器退出,它就會被移除。使用此選項時需要非常小心。

docker run -it --name <container-name> --hostname <container-name> --rm alpine

managing containers

如果希望透過一行程式碼刪除所有容器,下面就是了(前兩行和最後一行只是為了顯示建立一行的邏輯)。請記住,我們正在刪除所有容器,所以使用它的風險由您自己承擔。

docker container list
docker container list -aq
docker container rm $(docker container list -aq) -f
docker container list

managing containers

-name開關有幫助,但是VM內部的名稱沒有定義

下面是關於如何解決這個問題的方法。使用--name引數將定義給定容器打的標籤。如果我們想在容器中配置名稱,我們需要一個額外的引數(--hostname)。下面突出顯示了用於容器的語法示例。我們連線到給定容器的外殼,並檢查Linux容器中使用的名稱。 

docker run -it --hostname container002 --name container002 alpine

managing containers 在容器上執行命令

有時候在管理容器時,在容器上執行命令會更容易,從而節省在其他地方進行故障排除的時間。我們可以使用 docker container exec 命令在任何給定容器上觸發特定的命令。

為了便於說明,前兩個命令(hostname和ipconfig)在主機上執行。為了直接從容器中獲取資訊,我們可以使用以下命令:

docker container exec <container-name> <command>

managing containers

連線到控制檯(Linux和Windows)

在使用Windows容器(Windows作業系統)時,我們可以執行cmd,這會給我們帶來容器的命令提示。下面的Docker客戶端命令提供了標籤為webserver的容器控制檯。

docker container exec -it webserver cmd

如果你想使用Linux,我們只需要更改命令指令。以下命令可用於Linux容器:

docker container exec -it <container-name> /bin/sh

如果我們在執行Docker命令時使用PowerShell,首先會注意的是CMD的黑色背景。下面影像上執行的所有其他命令都在容器級別執行。如果你不確定,機器的名稱也是一個很好的指示,還可以使用tasklist檢索程式的數量。

managing containers

管理容器:有待深入

讀過這篇文章後,是否意味著我們對容器管理瞭如指掌了呢?當然不是!我們才剛剛開始!如果你想繼續探索和嘗試新事物,可以試試這兩個Docker客戶端命令:

docker container --help
docker container run—help

現在你正慢慢成為管理容器方面的專家。


原文作者:Anderson Patricio

原文連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31473948/viewspace-2199802/,如需轉載,請註明出處,否則將追究法律責任。

相關文章