Docker 虛擬化

效能更快、資源更省 Docker虛擬化技術簡介

2015-03-13
虛擬化風潮席捲全球,技術日益翻新,目前最受矚目的是Docker,其虛擬獨立環境內無須另外運行的作業系統核心及相關系統程,所以需動用到的系統資源大幅減少。本文將詳解Docker的運作原理,並說明如何手動為容器配置對外固定IP位址。
目前整個Debian容器只有建立並啟動容器時所指定執行的「/bin/bash」以及剛剛下達的「ps auxww」這兩個程序,比起一般在Xen、VMware、Hyper-V等平台虛擬化所需執行的作業系統核心及相關系統程式,實在非常輕量化。同時也可使用「ip addr」與「ip route show」這兩個指令來檢視Debian容器中網路配置的狀況,如圖14所示。


▲圖14 檢視Debian容器中網路配置的狀況。

在網路卡eth0中,由Docker所配置的IP地址172.17.0.2就在前面所提到的172.17.0.0網路內,而eth0的預設閘道剛好就是docker0這個在主系統中橋接介面的網址,而兩個容器透過共同的Docker閘道也是連通的。

這裡另一個容器配置的IP地址是172.17.0.5,透過ping指令測試,可以發現兩個容器間彼此連通。接著,執行指令「iptables -t nat -L」,檢視CentOS 7主系統iptables內nat列表(Table)的設定,輸出結果如圖15所示。


▲圖15 檢視CentOS 7主系統中iptables的nat列表配置。

從中得知,172.17.0.0網路透過主系統docker0橋接閘道介面,就能夠以NAT方式連接外界網路,當然因為是NAT,所以外面主機是看不到也連接不到這些Debian容器。

容器操作示範

在容器運作時,可以使用「exit」指令,藉由結束bash程式來停止Debian容器的運作,如圖16所示。容器列表中有一個狀態是Exited開頭的,就是停止狀態。


▲圖16 使用「exit」指令結束bash程式來停止Debian容器的運作。

另外,在CentOS 7主系統中使用「docker stop da34cdb32d9c」指令也可以停止一個容器的運作,stop後面接的就是容器的識別ID。執行docker stop指令後,原本在容器bash提示符號下的狀態,會跳回主系統CentOS 7的提示符號中。docker stop指令後面接的除了可以是容器的識別ID外,也可採用容器的名稱來指定要停止的容器。

若要重新啟動停止的容器,可使用「docker start」指令,例如執行「docker start da34cdb32d9c」便可重新啟動環境中之前被停止且名稱為「debian7_2」的容器。

重新啟動容器後,如何重新進入容器中下指令呢?可使用docker exec指令,如圖17所示使用「docker exec -ti da34cdb32d9c /bin/bash」指令重新進入剛啟動的debian7_2容器。


▲圖17 重新進入容器。

docker exec指令除了使用容器的ID來指定進入的容器外,也可以使用容器的名稱來指定,例如要進入名稱為debian7_2的容器,則採用「docker exec -ti debian7_2 /bin/bash」指令。

如果要刪除容器,可在停止容器後,使用docker rm指令來刪除。rm後面一樣可以接容器名稱或是容器識別ID。可以看到最後的「docker ps -a」指令執行時,已經沒有顯示任何容器的存在,如圖18所示。


▲圖18 分別採用容器名稱與識別ID來刪除兩個Debian容器。

容器的狀態保存

在刪除全部兩個容器後,再次執行「docker run --name=debian7_1 -t -i debian:latest /bin/bash」指令建立並啟動一個名稱為「debain7_1」的容器,如圖19所示。


▲圖19 新建立名稱為debian7_1的容器。

從中可以發現,之前debian7_2容器所安裝的procps套件在容器刪除時一併被刪除了,新建的debian7_1容器是以原Debian映像檔重新建立的,自然不會有procps套件。那該如何保存容器的狀態以便下次使用呢?其實可以使用「docker export」指令。

在debian7_1容器中執行指令「apt-get update」更新好套件資訊後,再使用指令「apt-get install procps」安裝好檢視系統程序(Process)的套件。之後回到CentOS 7主系統使用指令「docker export 0c56a7df7ff0 > debian71.tar」,便可將目前debian7_1的狀態保存到debian71.tar這個檔案,接著再使用「cat debian71.tar | docker import – debian:7v1」指令將debian71.tar匯入名稱為「debian」且標記為7v1的映像檔,如圖20所示。


▲圖20 進行容器的匯出與匯入。

由docker images的輸出中多了一個標記為7v1的映像檔案,大小也較之前的Debian映像檔案略為大一些。接著,如圖21所示使用指令「docker run --name debian7new -t -i debian:7v1 /bin/bash」,在新的debian:7v1映像檔中新建一個Debian容器。


▲圖21 由debian:7v1映像檔新建的容器。

至此,這個新建的容器已經具備了之前由容器匯入及匯出中保留的procps套件。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!