iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
自我挑戰組

DevOps的下克上之旅( ° ∀ ° )ノ゙系列 第 11

Day11 : Docker基本操作 Docker Net篇

前幾天我們講了如何建立Container,每個Container會包含一項服務,如前端、後端、資料庫,Container之間能不能互相溝通藉此串聯起一個更大的服務應用呢? 可以的,以下講解Docker Network的簡單原理。

  • docker network ls 查看所有網路
  • docker network inspect <NetworkName> 檢視細部網路設定

https://ithelp.ithome.com.tw/upload/images/20210913/20119044uApAL43v8F.png

查看所有網路可以發現默認有分成host與bridge,Bridge是Linux的虛擬網路橋接技術,將Bridge打開可以發現裡面包含兩個Container,也就是我上一個章節建立的Web_App與Web_Vol,ip位置分別是172.17.0.2、172.17.0.3,詳細網路架構圖如下:

https://ithelp.ithome.com.tw/upload/images/20210913/20119044s0DSSg2Hiv.png

安裝docker後會新增一個docker網卡默認IP為172.17.0.1/16 (host),他會接收來自本網卡(eth0)的轉發封包。新建立的Container則是會自動生成IP172.17.X.X依序排列下去。

Container互相訪問

那Container的互相訪問很簡單,直接訪問172.17.X.X的IP就好了,我們來實驗看看:

# 進入container
docker exec -it Web_APP bash

# 查看docker 網路
cat /etc/hosts

# 安裝相關網路工具
apt-get update
apt-get install curl

# 測試去抓其他Container
curl 172.17.0.3

如下圖,本docker IP為172.17.0.2,可以成功抓到其他Container的資料。
https://ithelp.ithome.com.tw/upload/images/20210913/20119044LTJaTQSBBz.png

Network映射

但是Container的IP為自動生成,我們的程式在部屬的時候不可能部屬上去後才改IP。有一個好方法,做網路映射--link

  • docker run --link <外部Container>:<內部Network名稱> <ImageName>
# 建立新的有聯結的APP叫做Web_Network
docker run -it -d --name Web_Network -p 8082:80 --link Web_APP:Web_APP --link Web_Vol:Web_Vol httpd:2.4

# 進入Container
docker exec -it Web_Network bash

# 查看Network
cat /etc/hosts

可以看到Network自動多了兩個網路IP,Web_APP與Web_Vol
https://ithelp.ithome.com.tw/upload/images/20210913/20119044xdIE7DOPKp.png

直接透過名稱抓抓看

curl Web_APP
curl Web_Vol

成功獲得:
https://ithelp.ithome.com.tw/upload/images/20210913/20119044Y9IOKgtWTY.png

實務上也不會透過--link的方式來建立Network映射。更常使用的會是docker-compose,等之後再慢慢來講解吧 !

昨天打了AZ,全身肌肉有疼痛就像是在抽經邊緣,痛到睡不著。希望明天症狀好轉,繼續更新。


上一篇
Day 10 : Docker基本操作 Volume篇
下一篇
Day12 : Docker基本操作 Dockerfile篇
系列文
DevOps的下克上之旅( ° ∀ ° )ノ゙30

尚未有邦友留言

立即登入留言