虛擬化風潮席捲全球,技術日益翻新,目前最受矚目的是Docker,其虛擬獨立環境內無須另外運行的作業系統核心及相關系統程,所以需動用到的系統資源大幅減少。本文將詳解Docker的運作原理,並說明如何手動為容器配置對外固定IP位址。
接著使用指令「systemctl start docker.service」來啟動Docker服務,啟動後可以使用「ip addr」指令來檢視系統網路設定狀況,如圖5所示。
|
▲圖5 啟動Docker服務及其啟動時「docker0」之網路配置。 |
在圖5中,enp0s3是系統內建的網路介面,而Docker新建了一個名稱為「docker0」的網路介面,這是Docker自建的網路橋接(Bridge)介面,所有由Docker建立啟動的虛擬化環境,預設都是使用docker0這個介面來取得網路位址,因此全部Docker虛擬化環境預設的網路都是在172.17.0.0這個網路。
安裝系統映像檔
完成Docker安裝設定後,開始安裝設定一個系統在虛擬環境中啟動,Docker官方及社群都貢獻建立了現成可用的系統映像檔以供下載使用,各種不同的Linux發行版都有,因為這裡的Docker底層主系統是CentOS,所以系統映像就採用一個不同的Linux發行版「Debian」。
使用指令「docker search debian | more」來搜尋Docker可提供的Debian系統映像檔,如圖6所示。
|
▲圖6 搜尋到的Debian映像。 |
圖6中列出許多Debian的系統映像檔資訊,其中DESCRIPTION是映像檔的簡要說明,STARS是社群使用者對映像檔的評分星等,OFFICIAL則表示映像檔是由Docker官方stackbrew計畫所維護的官方映像檔,本例使用「debian pull debian」指令安裝Docker官方所提供的Debian映像檔,也就是搜尋影像檔結果中的第一筆資料,指令執行結果如圖7所示。
|
▲圖7 抓取Debian映像檔。 |
接著會顯示目前的下載狀況,下載完畢,如圖8所示執行「docker images」指令查詢目前系統中已下載的映像檔資訊。
|
▲圖8 已下載的映像檔資訊。 |
此處列出四個映像檔,但因為彼此的Image ID都相同,所以其實都是同一個映像檔,只是標記(Tag)不一樣而已,而這標記分別標明了這個Debian映像是版本7系列代號為wheezy的版本,且是最新(Latest)的7.8版。
讓容器開始運作
下載後,接下來要讓映像檔運作。Docker是以建立一個與主系統相隔離環境的方式來運作,而這個與主系統相隔離且獨立的環境被稱為容器(Container),容器中就內含所要運作環境的相關檔案映像(Image),使用「docker run -t -i debian:latest /bin/bash」指令可以建立並啟動一個內含Debian環境的容器,如圖9所示。
|
▲圖9 建立並啟動一個內含Debian環境的容器。 |
可以看到指令執行後提示符號就變了,提示符號介於root@之後以及:之前的d3d4aef242bd字串是剛建立Debian容器的識別ID,而建立Debian容器的指令中,-t選項指的是讓Docker配置一個虛擬終端機(pseudo tty)並且將這個虛擬機銜接到容器的標準輸入(Standard Input)中。
這讓使用者可以在虛擬終端機內對容器中的系統下指令進行操作,而-i的i是指Interactive,這個選項是讓容器的標準輸入保持開啟(Open)狀態,以便在離開容器後可以再次進入這個容器中輸入指令。
此外,debian:latest指的是名稱為「debian」且標記為latest的映像檔,若標記省略直接使用debian,那標記會預設使用latest,指令最後「/bin/bash」則是啟動Debian容器後指定執行「/bin/bash」以便透過虛擬終端機下指令進行操作。
這時候可透過〔Alt〕+〔F2〕熱鍵切換到另一個CentOS 7主系統終端機,或是透過網路以ssh登入CentOS 7主系統,如圖10所示以「docker ps -a」指令來檢視目前建立與啟動的容器狀況。
|
▲圖10 以「docker ps -a」指令來檢視目前建立與啟動的容器狀況。 |
該指令的選項「-a」指的是列出所有容器,從中可以發現這個容器在3分鐘前被建立,執行了大約3分鐘,目前沒有對應的網路連接埠,最後則是這個容器的名稱「sad_fermi」,這名稱是Docker隨意指定的。
容器名稱可以自行指定,可使用「--name」選項來指定。在另一個終端機內以「docker run --name debian7_2 -t -i debian:latest /bin/bash」指令來建立一個名稱為「debian7_2」的Debian容器,如圖11所示。
|
▲圖11 以--name參數自訂容器名稱建立Debian容器。 |
可看到同樣是進入另一個不同的提示符號,但容器識別ID跟之前建立的並不同,可再開啟另一個CentOS 7主系統的終端機,如圖12所示以「docker ps -a」指令來檢視目前建立與啟動的兩個Debian容器狀況。
|
▲圖12 檢視目前建立與啟動的兩個Debian容器狀況。 |
在這兩個Debian容器中,可使用指令「apt-get update」來更新Debian套件資訊,就與實際Debian發行版Linux運作時一樣,因為這兩個容器是各自獨立的,所以要在這兩個Debian容器各執行一次「apt-get update」套件資訊更新指令。
更新Debian套件資訊後,再分別執行「apt-get install procps」指令安裝ps這個系統程序(Process)檢視工具,然後就如往常Linux系統運作一樣,使用「ps auxww」指令來檢視整個Debian容器目前所執行的所有程序,指令可以在任一Debian容器中執行以進行檢視,如圖13所示。
|
▲圖13 檢視Debian容器目前所執行的所有程序。 |