[Day05]: Docker Network


Docker中的網路

透過 Network Namespace 的方式,為容器建立獨立的網路與宿主機完全隔離

Network Namespace 可虛擬出應用程式所需的環境,如 IP Stack、路由表、防火牆、/proc/net 目錄、/sys/class/net 目錄、通訊埠等

Docker 會在 host 中創建名為 docker0 的虛擬網路,以連接 host 和容器


連網流程(Bridge Network)

1.Docker 啟動時,創建 docker0
2.啟動容器時,Network Namespace 在容器內虛擬出獨立的網路
3.容器內網路藉由 Veth Pair 與 docker0 相互連接
4.Host 藉由虛擬網卡連接到 docker0上
5.Host 與容器之間即可透過docker0 開始相互傳遞訊息

* Veth Pair:一種專門應用於虛擬網卡之間的通道


存取外網資料

Port Forwarding

docker0 已經預設處理好與外網連接的相關設定

容器中程式的網路請求可透過 docker0轉發到外網網卡中
外部網路若想連接容器,則需 docker0 閘道進行Port Forwarding

想讓外部網路存取的容器,可向docker0提供開放的連接埠,用以連接host的埠口

操作指令

* docker run -d -P nginx
// 大寫參數P,採隨機連接,docker會在host中隨機找開放的open port綁定至容器


*  docker  run   -d  -p  80 : 80   -p  443 : 443   nginx
// 參數小寫p ,可指令host中與容器連接的port
//格式: -p <host port>:<container port>


*  docker  run   -d  -p  116.200.5.142 : 80 : 80   -p 116.200.5.142 : 443 : 443   nginx
// 可限制可存取的外部主機
//格式:-p <ip>:<hport>:<cport>


*   docker  run   -d  -p   80   -p 443 : 443   nginx
// 也可隨機分配空閒host port,連接至容器80 port


*   docker  run   -d  -p  116.200.5.142 : : 80   -p 443   nginx
// 隨意外部主機分配外部主機port連接至容器80 port

下一篇會對 Docker Network做更深入的筆記 ~


參考資料

[1]https://godleon.github.io/blog/Docker/docker-network-overview/

[2]https://medium.com/@jamesemyn/basic-docker-networking-9130ab889359

#docker #虛擬化技術 #Bridge







你可能感興趣的文章

用React框架重構PHP網頁心得

用React框架重構PHP網頁心得

Git & GitHub 常用語法

Git & GitHub 常用語法

C 語言練習程式(7) -- 直接改變陣列內容&利用指標達成回傳型態轉換 -- 指標相關程式集錦(6)

C 語言練習程式(7) -- 直接改變陣列內容&利用指標達成回傳型態轉換 -- 指標相關程式集錦(6)






留言討論