本節內容簡介docker
回顧加本節內容ubuntu
容器是Docker的一個基本概念,每一個容器中都運行一個應用併爲該應用提供完整的運行環境。本實驗將詳細學習Docker容器的建立,運行管理操做。須要依次完成下面幾項任務:bash
1、實驗一:建立第一個容器服務器
還記得上一節實驗中咱們如何建立一個持續運行的容器嗎?在這裏咱們回顧下建立的步驟:網絡
若是咱們須要一個保持運行的容器呢,最簡單的方法就是給這個容器一個能夠保持的應用,好比bash
,運行 ubuntu 容器並進入容器的 bash:學習
$ docker run -t -i ubuntu /bin/bash測試
上面命令的說明:spa
-t
:分配一個 pseudo-TTY
-i
:--interactive
參數縮寫,表示交互模式,若是沒有 attach
保持 STDIN 打開狀態ubuntu
:運行的鏡像名稱,默認爲latest
標籤/bin/bash
:容器中運行的應用經過這個簡單的命令,咱們如今進入了新建立容器的bash中,在bash裏執行的任何命令都不會影響到咱們的宿主機,能夠隨意操做。你能夠看到主機名和環境變量 HOSTNAME
都已經顯示爲容器的ID了。操作系統
在這個bash下,咱們能夠進行各類Ubuntu系統上的操做,固然由於Docker自己的限制,有些涉及到磁盤、網絡、設備等Linux特權命令是沒法執行的,能夠試試reboot
命令,會提示你shutdown: Unable to shutdown system
。3d
如何退出這個bash呢?有兩種方法,兩種方法的效果徹底不一樣:
exit
,這時候 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
查看容器中對鏡像作了哪些變化。
實驗過程以下:
docker diff
查看現有的容器中的變化,發現沒有任何文件變化Ctrl-C
中斷先前實驗的死循環docker diff
命令查看是否有新的修改輸出的信息中A
表示添加,後面的三個新建文件的路徑。能夠嘗試下修改或刪除文件會有怎樣的diff
輸出。
七、鏈接到容器中 - docker attach
docker attach
能夠進入到容器操做。當咱們容器後臺運行時,有須要的話也能夠再次鏈接進入到容器中。
這個命令在上述的實驗中已經屢次用到了,再也不提供單獨的操做。
3、實驗三:建立容器
建立一個容器的命令是 docker run
。還記得先前實驗中學習的Hello, Shiyanlou
及/bin/bash
容器如何建立的嗎?在上一節中咱們學習了最基本的容器建立方式,本節內容咱們將經過實例來學習更詳細的docker run
參數。
docker run
命令的執行步驟:
/etc/resolve.conf
和/etc/hosts
。docker run
後面跟應用來覆蓋CMD命令。若是容器中的應用執行完成,則容器進入到終止狀態。
docker run
的參數很是多,本實驗中咱們設定要建立的容器配置:
shiyanlou
(使用--name
,若是不加該參數,Docker會隨機產生一個名字)。shiyanlou
(使用--hostname
參數)--mac-address
參數)-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 服務器上執行導入命令造成新的鏡像,咱們在實驗樓的環境中進行測試。
實驗過程:
/home/shiyanlou
目錄須要注意的是,當容器導出後,容器仍然在Docker環境中運行,只是拷貝了一分內容到tar包。
二、容器導入 docker import
咱們執行導入命令,將該文件加載到docker系統中,文件加載後會成爲鏡像,命令執行時須要制定導入後生成的鏡像的名字:
cat shiyanlou.tar | docker import - shiyanlou:1.0
執行導入後,使用docker images
查看是否有新的鏡像產生:
docker import 命令比較靈活,也能夠直接從URL連接進行導入。因此能夠記住這是一種建立鏡像的方式,將容器導出後拷貝到目標服務器而後導入成鏡像。
使用新鏡像建立容器,查看是否與導出的容器內容一致:
請務必保證本身可以動手完成整個實驗,只看文字很簡單,真正操做的時候會遇到各類各樣的問題,解決問題的過程纔是收穫的過程。