Network Docker 映像檔 容器 網路 儲存

實際動手操作Docker 學會Volume及Network

2017-09-19
本文將說明如何透過Docker Volume持久儲存容器資料,並以Docker Network解釋容器網路運作。透過實驗示範,採用內建的DNS伺服器便能解析容器IP位址,整個容器架構只需命名好容器,就可移植到其他Docker伺服器,並結合Docker Volume將WordPress資料庫持久儲存。

上面範例,說明容器預設皆與docker0網卡同一網段,以IP方式皆可彼此相通,但改用容器名稱時,因缺乏名稱解析,直接用容器名稱是無法運作。接下來改用Docker Network機制,實驗步驟如下:


先建立一個容器網路vlan,執行「docker network create vlan」。接著使用「docker network inspect vlan」查看,當中Subnet為172.18.0.0/16,Gateway是172.18.0.1,而輸入「ifconfig」,會發現一張新的網卡br-XXXXXX,其IP位址便是172.18.0.1,這表示Docker Network是藉由新增私有網段來區隔容器。


再來啟動容器,並指定使用vlan容器網路,輸入「docker run -itd --name n3 --network=vlan busybox」,其中「--network」便是設定容器網路的參數,接著執行「docker run -it --name n4 --network=vlan busybox」,再啟動另一個n4容器。


在容器n4中,輸入「ping -w3 172.17.0.2」,因為不同網段,封包無回應,輸入「ping n1」,當然仍是bad address 'n1',但是輸入「ping n3」,卻可以正常解析出172.18.0.2,封包亦正常回應,這是因為容器網路內建DNS伺服器,負責容器名稱解析,藉由「nslookup n3」指令,便可看到Server:127.0.0.11,和n3的172.18.0.2,以及完整主機名稱n3.vlan。

這次實驗可以知道,透過Docker Network功能,只需要知道容器名稱就可連接到容器,再來以更實際的WordPress範例,便可感受到容器網路的便利性,操作步驟如下:


先輸入「docker network create wp_db」,建立wp_db容器網路。


下載MySQL映像檔和WordPress映像檔,依序執行「docker pull mysql:5.7」及「docker pull wordpress」。


執行「docker run -d --name db --network=wp_db -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress mysql:5.7」命令,啟動MySQL容器,命名為db,並且透過「-e」參數,以環境變數來設定資料庫相關使用參數,如帳號、密碼等。


接著啟動WordPress,執行「docker run -d --name wp -p 80:80 --network=wp_db -e WORDPRESS_DB_HOST=db:3306 -e WORDPRESS_DB_PASSWORD=wordpress wordpress」,關鍵是「WORDPRESS_DB_HOST=db:3306」,透過名稱解析,只需使用容器名稱便可連接到步驟2所建立的資料庫容器db,等待幾秒後(讓資料庫初始化),開啟瀏覽器,輸入網址「http://localhost」,就可看到WordPress安裝畫面。

從前面三次實驗中,可以理解到,透過內建的DNS伺服器(127.0.0.11),便能解析容器IP位址,因此無須再用IP位址讓容器彼此溝通,整個容器架構只需命名好容器,就可以移植到其他Docker伺服器,並能結合Docker Volume,將WordPress資料庫持久儲存。

這兩大功能在Docker Compose中皆有支援,因此撰寫好docker-compose.yml定義檔,便完成整個系統架構設計,只要具備Docker伺服器,隨處皆可執行(Write Once, run everywhere),下一篇便會說明如何撰寫Dockerfile建立映像檔以及Docker Compose定義檔。

<本文作者:鄭淳尹,Docker/Moby.Taipei社群共同發起人,曾任宏碁eDC維運工程師,玉山銀行資訊處專員,現為臺北榮民總醫院資訊工程師,系統維護及開發設計超過15年。開源技術愛好者,陸續在COSCUP開源人年會、Container Summit研討會、台灣微軟開發者大會、群益期貨和永豐金證券等分享資訊技術,並在多間大學資工系擔任Docker容器技術講師。現任微軟MVP,並翻譯審閱多本容器技術書籍。>


追蹤我們Featrue us

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

我知道了!