iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
1
DevOps

現代化小白也要嘗試的容器手札系列 第 17

Day17. Docker 外部網路存取實記

  • 分享至 

  • xImage
  •  

鬆獅容器小白17連拍

https://ithelp.ithome.com.tw/upload/images/20201005/20025481Ob1VikYCb7.jpg

外部存取容器實記

當容器中部署了屬於讓用戶存取的服務,一定會需要從外部來做存取,然而容器又是如何與外部進行通訊呢?

下圖就是一個從外部能存取到內部容器的簡易架構
Internet-->enp01(Host網卡端口)-->docker0(內外溝通的橋接網路)-->vetheg0a1r0y(docker0 Bridge端口)-->eth0(容器端口)-->Nginx容器本身
PS:如果是透過內部容器發起連線需求則是上述流程反向操作。
https://ithelp.ithome.com.tw/upload/images/20200923/20025481xRtOkxgWEk.png

Linux本身就有路由轉發功能,所以其實linux系統本身可以作為一個路由器。執行命令cat /proc/sys/net/ipv4/ip_forward,能看到ip_forward=1,說明系統開啟了路由轉發。
https://ithelp.ithome.com.tw/upload/images/20200923/20025481q6wkVQzLlR.png

ifconfig來實際檢視到docker0的橋接網路以及分配到的IP位址
https://ithelp.ithome.com.tw/upload/images/20200923/20025481OmrTWbwKZE.png

iptables -t nat -vnL檢視在防火牆上內部容器轉發服務的IP網路的對應
https://ithelp.ithome.com.tw/upload/images/20200923/20025481Wtt05ie7fm.png

接下來來個簡單的實例牛刀小試一下>>>

容器本身是可以透過執行一些網路應用如最典型就是網站,讓外部使用者可以來存取這些應用,我們可以通過-P或-p的參數來指定連接埠的映射。

我們當單純只使用-P參數不指定連接埠時,Docker就會隨機的一組連接埠映射到內部網中容器開放的網路連接埠來做綁定。

docker run -d -P mygynginx1

補充:-d 在背景執行容器並把容器ID印出螢幕上,必要參數。
https://ithelp.ithome.com.tw/upload/images/20200923/20025481UVYln8qd9i.png

使用docker ps可以看到,本地主機隨機指定一組32768Port映射到容器預設網頁連接埠80。
https://ithelp.ithome.com.tw/upload/images/20200923/20025481SMYXPxIzJF.png

此時URL只要帶本機上32768連接埠就可以連線到容器內的網站。
http://localhost:32768
https://ithelp.ithome.com.tw/upload/images/20200923/200254814U9Bkfa8rp.png

或是查看目前hosts IP並把URL改成內部IP。
ifconfig
http://10.200.2.7:32768
https://ithelp.ithome.com.tw/upload/images/20200923/20025481yrIfh8NFli.png

如果想要看看跑Nginx容器本身被分配的IP做法。

docker exec -it 013a7b4a9241 /bin/bash
awk 'END{print $1}' /etc/hosts

https://ithelp.ithome.com.tw/upload/images/20200923/20025481l5ddr8Grnk.png

可以透過指定查看此網站容器的歷史紀錄並看到此服務是UP狀態並且對於前端的需求均回應200 OK的狀態。

docker logs -f` 013a7b4a9241

https://ithelp.ithome.com.tw/upload/images/20200923/20025481XhLQfHindw.png

使用docker port來查看當前映射的連接埠配置外也可查看到綁定位址
https://ithelp.ithome.com.tw/upload/images/20200923/20025481U9Dgun7PiF.png

前面如果沒有特別指定是用-P而反之-p則可指定要映射的連接埠,並且在一個指定連接埠上只可綁定一個容器。
支援寫法如下:
映射到指定位址的指定連接埠

  • IP Address:hostPort:containerPort 指定映射使用一個特定位址如:10.200.2.7

映射到指定位址的任意連接埠

  • IP Address::containerPort 綁定10.200.2.7任意連接埠到容器的網站預設連接埠80,本地主機會自動分配一個連接埠。
  • HostPort:ContainerPort也可已改變通訊協定的方式如:外部主機UDP綁定容器的UDP連接埠

https://ithelp.ithome.com.tw/upload/images/20200923/20025481R13HjGZnCs.png


上一篇
Day16. 簡單備份還原與遷移 Docker 容器
下一篇
Day18. Docker Container 服務互連串接
系列文
現代化小白也要嘗試的容器手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言