現代化小白也要嘗試的容器手札 - Docker Container 服務互連串接

 Day18. Docker Container 服務互連串接

容器服務互連串接

前面都一直專注在外部要來存取某一容器服務的存取行為,但現實生活並不會只有單一容器獨立的生存,容器與容器之間相互間也會需要溝通的,就跟我們一直熟知多台虛擬機器之間的網路服務溝通行為一樣。

本次的實作會在來源容器和目的容器間透過linking建立一個隧道,讓目的端容器可以接收到來源容器而給予相對回應。

但本次是單台Host(Ununtu宿主機上)多個容器間通訊,如下圖所示,這樣就很好理解。
https://ithelp.ithome.com.tw/upload/images/20200926/20025481UwoBrbk5iQ.png

系統互相連接主要是依容器的命名來對應執行,所以首要就需要自訂一組容器名稱,而自訂容器名稱有以下兩點好處:

  • 自訂名稱除了好記好管理如:正式環境電商網站容器就取名ProdECWEB
  • 當容器之間互連時可作為有效好判斷去回流程的架構依據如:ProdECWEB容器連接到到ProdECDB

測試環境條件

  • Ubuntu主機:Docker1
  • 網站容器一:prodecweb
  • 網站容器二:uatecweb
  • 資料庫容器:prodecdb

網站容器一:prodecweb

docker run -d -P --name prodecweb training/webapp python app.py
docker ps -l
docker inspect -f "{{ .Name }}" ff9a8930a47c
docker rm -f prodecweb

建立網站並把網站自動隨機指派一組連接埠公開
https://ithelp.ithome.com.tw/upload/images/20200926/200254811F18tEJ1vU.png
檢視一下建立好的網站容器名稱
https://ithelp.ithome.com.tw/upload/images/20200926/2002548175cqvkuGpE.png
正式綁定Link前,目的端資料庫因為還沒有建立就把網站給先建了,故移除等資料庫建立好再綁定建立
https://ithelp.ithome.com.tw/upload/images/20200926/20025481DBRjo0vvAw.png

資料庫容器:prodecdb

docker run -d --name prodecdb training/postgres
docker ps -l
docker inspect -f "{{ .Name }}" 7fa95ede5ab8

建立資料庫但是不把連接埠對外公開
https://ithelp.ithome.com.tw/upload/images/20200926/20025481Rc0bfYsgoX.png
同樣檢視一下建立好的資料庫容器名稱
https://ithelp.ithome.com.tw/upload/images/20200926/20025481U3VERHhcJ2.png

docker run -d -P --name prodecweb --link prodecdb:prodecdb training/webapp python app.py
docker ps

前端網站容器和資料庫容器就互相建立關聯綁定,Docker在兩個容器間建立了一組安全通道,而不對外暴露連接埠到宿主機上。
故在啟動執行資料庫容器時並沒有用-p或-P讓服務對外網路,保持一個合規的安全環境。
https://ithelp.ithome.com.tw/upload/images/20200926/20025481vsDNiuLULs.png

docker exec -it 049b92528e27 /bin/bash
awk 'END{print $1}' /etc/hosts 查看自己的IP位址
apt-get install -yqq inetutils-ping 預設沒有Ping模組,透過此指令安裝
ping prodecweb 直接ping資料庫名稱是有通的
cat /etc/hosts

https://ithelp.ithome.com.tw/upload/images/20200926/20025481OujMStE3GG.png

檢視正式環境的網站容器的確有兩筆,除了自己外還綁定了資料庫容器並顯示IP位址
https://ithelp.ithome.com.tw/upload/images/20200926/20025481bPkpELoEzt.png

網站容器二:uatdecweb

我們來驗證一下如果不透過Link實際綁定是否在同個宿主機上下的容器其實互相網路仍然就是互通的。

docker run -d -P --name uatecweb training/webapp python app.py
docker ps
cat /etc/hosts
ping prodecdb

https://ithelp.ithome.com.tw/upload/images/20200926/20025481U4OXMakknV.png

透過進入到uatecweb容器內檢視並無任何預設的Link紀錄綁定,如法泡製ping prodecdb的確是完全網路隔離的環境,無法解析,這樣就沒錯了。
https://ithelp.ithome.com.tw/upload/images/20200926/20025481s5SQ4M9qvI.png


留言

這個網誌中的熱門文章

Azure 命令工具資源彙整

Azure DNS PTR 反解解惑教學

Windows Server 2022 整合 Azure Arc 簡易教學示範