在我們的整個系統中,不可避免的需要在同一個主機上安裝部署多個服務。那如果使用Docker部署,總是存在容器間通信的問題。
Docker的網路通信問題對於小白呢?總是會給你驚喜,別怕,跟著碼哥做一遍,你會發現容器間通信So easy!
在安裝好Docker後,Docker會創建一個Linux網橋docker0,Docker For Mac的實現和標準Docker規範有區別,Docker For Mac沒有docker0。
可以使用Docker network ls 查看,docker 網絡情況
可以看到,Docker為我們創建了三個網絡:bridge、host、none。
其中,網橋bridge模式是實際中常用的,也是容器啟動時,默認的連接方式。我們可以通過 --network 參數 指定容器連接的網絡。
場景一
以交互模式,啟動兩個容器busybox1、busybox2
# docker run -itd --name busybox1 busybox
# docker run -itd --name busybox2 busybox
兩個容器啟動後,檢查網絡bridge使用情況
# docker network inspect bridge
測試兩個容器的互通情況,分別進入兩個容器中
# docker attach container_id
# ping busybox1_ip
# ping busybox2_ip
結果證實,兩個容器互通。
場景二
以 --link 參數形式,通過別名實現兩個容器間的互通
# docker run -itd --name busybox3 busybox
# docker run -itd --link busybox3 --name busybox4 busybox
進入到busybox4容器中
# ping busybox3
查看下/etc/hosts文件,你會發現多了一條映射,就是它在起作用
場景三
自定義 bridge,實現容器間通信。
Docker 有一個內嵌的 DNS Server,可以實現容器間通過容器名通信。但是默認的bridge不可以。需要自定義一個bridge
# docker network create --driver bridge busybox_bridge
# docker run -itd --network busybox_bridge --name busybox5 busybox
# docker run -itd --network busybox_bridge --name busybox6 busybox
查看網絡情況
# docker network inspect busybox_bridge
進入容器,測試容器間互通情況
# docker attach container_id
# ping busybox6
查看/etc/hosts文件,你發現沒有任何映射路由
查看/etc/resolv.conf,是的,是 dns 在起作用
閱讀更多 碼向未來 的文章