容器管理

容器管理

本節內容簡介docker

 回顧加本節內容ubuntu

容器是Docker的一個基本概念,每一個容器中都運行一個應用併爲該應用提供完整的運行環境。本實驗將詳細學習Docker容器的建立,運行管理操做。須要依次完成下面幾項任務:bash

  1. 建立第一個容器
  2. 查看容器信息
  3. 容器建立
  4. 管理容器運行狀態
  5. 容器導出及導入

1、實驗一:建立第一個容器服務器

還記得上一節實驗中咱們如何建立一個持續運行的容器嗎?在這裏咱們回顧下建立的步驟:網絡

若是咱們須要一個保持運行的容器呢,最簡單的方法就是給這個容器一個能夠保持的應用,好比bash,運行 ubuntu 容器並進入容器的 bash:學習

  $ docker run -t -i ubuntu /bin/bash測試

  

上面命令的說明:spa

  1. -t:分配一個 pseudo-TTY
  2. -i--interactive參數縮寫,表示交互模式,若是沒有 attach 保持 STDIN 打開狀態
  3. ubuntu:運行的鏡像名稱,默認爲latest 標籤
  4. /bin/bash:容器中運行的應用

經過這個簡單的命令,咱們如今進入了新建立容器的bash中,在bash裏執行的任何命令都不會影響到咱們的宿主機,能夠隨意操做。你能夠看到主機名和環境變量 HOSTNAME 都已經顯示爲容器的ID了。操作系統

在這個bash下,咱們能夠進行各類Ubuntu系統上的操做,固然由於Docker自己的限制,有些涉及到磁盤、網絡、設備等Linux特權命令是沒法執行的,能夠試試reboot命令,會提示你shutdown: Unable to shutdown system3d

如何退出這個bash呢?有兩種方法,兩種方法的效果徹底不一樣:

  1. 直接 exit,這時候 bash 程序終止,容器進入到中止狀態
  2. 使用組合鍵退出,仍然保持容器運行,咱們能夠隨時回來到這個bash中來,組合鍵是 Ctrl-p Ctrl-q,你沒有看錯,是兩組組合鍵,先同時按下Ctrl和p,再按Ctrl和q。就能夠退出到咱們的宿主機了。

上述第二種方法比較經常使用,此時使用 docker ps 查看,能看到容器仍然在運行中:

Ctrl+p和ctrl+q 離開容器,暫時退出容器但不關閉。

若是想再次回到剛纔的bash中,只須要使用 docker attach命令就能夠再次鏈接到運行的bash裏:

注意: 命令後面的參數是容器的ID,並不須要輸入完整的數字,只要能惟必定位這個容器便可,一般輸入4位就足夠了。

咱們建立了第一個容器後,將會先實踐一些容器信息查看的命令。經過這些命令咱們能夠在宿主機上了解到容器的運行狀況。

注意:下面的命令都是針對該容器執行的,參數中的容器ID請替換成你實際實驗中建立的容器ID。

2、實驗二:查看容器信息

一、查看容器列表 - docker ps

docker ps 命令最經常使用,能夠列出全部容器的信息,默認狀況下只顯示運行狀態的容器。

必要的參數在上一節實驗中已經介紹過了,這裏能夠進行回顧。

幾個最經常使用的參數:

  • -a:查看全部容器,含中止運行的
  • -l:查看剛啓動的容器
  • -q:只顯示容器ID

咱們查看全部容器的ID列表:

二、查看容器內進程信息 - docker top

docker top 命令查看容器中運行的進程信息,顯示容器中進程的PID,UID,PPID,時間,tty等信息。

上圖中的輸出結果因爲終端大小限制,形成列表壓縮到兩行。

三、查看容器輸出信息 - docker logs

獲取容器的輸出信息可使用 docker logs命令,咱們使用 docker attach 回到剛纔建立的/bin/bash容器中,寫一個循環輸出信息的腳本,而後再使用Ctrl-P Ctrl-Q組合鍵退出。

在宿主機的終端中,咱們能夠用docker logs命令查看輸出信息。

docker logs 只會顯示截止到當前的全部輸出,若是想動態查看實時輸出,也能夠加-f參數,相似tail命令:

四、查看容器詳細信息 - docker inspect

docker inspect 查看容器的細節信息,包括建立時間,操做命令,端口映射信息,IP地址等等。

這個命令不僅能夠查看容器的詳細信息,也支持鏡像的詳細信息。默認輸出JSON格式的信息,能夠經過-f指定輸出的項目。

上述命令中咱們查看了網絡配置信息中的IP地址和Gateway地址。

五、查看容器的運行信息 - docker stats

docker stats 能夠查看到運行狀態容器的CPU,內存及網絡使用率。在實際工做中,咱們一般會把這個命令的輸出鏈接到相似Logstash一類的服務用來分析。

這個命令的輸出是實時刷新的(相似Linux上的top命令),若是須要退出可使用Ctrl-C組合鍵。

六、查看容器中的修改 - docker diff

docker diff 查看容器中對鏡像作了哪些變化。

實驗過程以下:

  1. 先執行docker diff 查看現有的容器中的變化,發現沒有任何文件變化
  2. 鏈接到容器內部,Ctrl-C中斷先前實驗的死循環
  3. 再建立幾個文件
  4. 退出到宿主機
  5. 再次使用docker diff命令查看是否有新的修改

輸出的信息中A 表示添加,後面的三個新建文件的路徑。能夠嘗試下修改或刪除文件會有怎樣的diff輸出。

七、鏈接到容器中 - docker attach

docker attach 能夠進入到容器操做。當咱們容器後臺運行時,有須要的話也能夠再次鏈接進入到容器中。

這個命令在上述的實驗中已經屢次用到了,再也不提供單獨的操做。

3、實驗三:建立容器

建立一個容器的命令是 docker run。還記得先前實驗中學習的Hello, Shiyanlou/bin/bash容器如何建立的嗎?在上一節中咱們學習了最基本的容器建立方式,本節內容咱們將經過實例來學習更詳細的docker run參數。

docker run命令的執行步驟:

  1. 查找鏡像或下載鏡像
  2. 建立容器
  3. 分配文件系統及虛擬網絡(網橋,接口,IP地址),其中容器中的DNS默認掛載宿主機的/etc/resolve.conf/etc/hosts
  4. 執行應用,默認執行鏡像中指定的CMD參數,也能夠在docker run後面跟應用來覆蓋CMD命令。

若是容器中的應用執行完成,則容器進入到終止狀態。

docker run 的參數很是多,本實驗中咱們設定要建立的容器配置:

  1. 設置容器名稱 shiyanlou(使用--name,若是不加該參數,Docker會隨機產生一個名字)。
  2. 設置容器的主機名 shiyanlou(使用--hostname參數)
  3. 設定網絡信息,這裏只使用一個簡單的參數設置MAC地址(--mac-address參數)
  4. 設置資源限制,設置容器中最大的進程數,包括soft和hard兩個限制值(使用-ulimit nproc=...等參數)

建立容器過程當中也能夠掛載數據卷,數據卷在下一節實驗中會詳細介紹。這裏不過多涉及。

根據上述的需求咱們經過查詢 docker run --help ,使用相關參數,建立符合要求的容器:

  docker run --name shiyanlou --hostname shiyanlou --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -t -i ubuntu /bin/bash

 進入容器中咱們能夠對一些參數進行驗證:

容器中的 ulimit 不會有任何輸出,查看實際的ulimit信息能夠在宿主機上使用docker inspect查看:

4、實驗四:容器運行狀態

一、守護狀態

首先須要瞭解的概念是容器的守護狀態,相似於守護進程,須要爲run命令增長參數-d,此時容器在後臺以守護狀態(Daemonized)形式運行。

建立一個守護狀態的容器:

  docker run -d ubuntu /bin/bash -c "while true; do echo 'hello shiyanlou'; sleep 1; done"

 

會啓動一個守護狀態的容器在後臺運行,使用 docker attach 登陸上去能夠看到循環輸出 hello shiyanlou 的字符串。

二、容器運行管理

本節實驗中,咱們須要練習啓動,中止,重啓容器的若干命令。這些命令用來管理從容器建立後到刪除的整個生命週期。

中止容器 docker stop

中止運行狀態的容器,進入到終止狀態。中止狀態的容器能夠經過 docker ps -a 查看到。

首先使用 docker stop shiyanlou 命令中止名稱爲shiyanlou的容器:

使用docker ps -a查看容器狀態:

啓動容器 docker start

啓動中止狀態的容器。再次啓動名稱爲shiyanlou的容器:

重啓容器 docker restart

能夠將運行狀態的容器終止,而後從新啓動。

殺死容器 docker kill

跟進程相同,有的時候正常的終止操做不起做用時,咱們須要使用 kill 命令殺死進程,在docker kill能夠處理異常的運行狀態的容器,強制退出:

暫停和恢復容器 docker pause/unpause

相似Windows操做系統的睡眠,咱們能夠先臨時將容器的運行掛起,再也不使用CPU資源,當須要的時候再恢復成正常的運行狀態。

先啓動shiyanlou容器,再執行pause操做:

恢復shiyanlou容器:

刪除容器 docker rm

當一個容器再也不須要時,咱們能夠刪除這個容器。對於中止的容器直接執行docker rm 容器ID,對於運行狀態的容器也能夠執行docker rm -f 容器ID強制刪除

5、實驗五:導出和導入容器

導出和導入容器操做能夠將容器導出到壓縮包,並可將壓縮包導入到Docker系統中成爲鏡像,爲容器的遷移和鏡像的製做提供支持。

一、容器導出 docker export

導出容器快照到本地的tar包。導出後的文件能夠拷貝到其餘 Docker 服務器上執行導入命令造成新的鏡像,咱們在實驗樓的環境中進行測試。

實驗過程:

  1. 查看當前環境中的容器,選擇須要導出的容器
  2. 查看該容器修改的內容
  3. 導出容器到tar包,保存到/home/shiyanlou目錄
  4. 查看導出的tar包

須要注意的是,當容器導出後,容器仍然在Docker環境中運行,只是拷貝了一分內容到tar包。

二、容器導入 docker import

咱們執行導入命令,將該文件加載到docker系統中,文件加載後會成爲鏡像,命令執行時須要制定導入後生成的鏡像的名字:

  cat shiyanlou.tar | docker import - shiyanlou:1.0

執行導入後,使用docker images 查看是否有新的鏡像產生:

docker import 命令比較靈活,也能夠直接從URL連接進行導入。因此能夠記住這是一種建立鏡像的方式,將容器導出後拷貝到目標服務器而後導入成鏡像。

使用新鏡像建立容器,查看是否與導出的容器內容一致:

6、 總結

  1. 建立第一個容器
  2. 查看容器信息
  3. 容器建立
  4. 管理容器運行狀態
  5. 容器導出及導入

請務必保證本身可以動手完成整個實驗,只看文字很簡單,真正操做的時候會遇到各類各樣的問題,解決問題的過程纔是收穫的過程。

相關文章
相關標籤/搜索