「Docker」你對同一宿主機下Docker容器間通信還迷糊嗎?


「Docker」你對同一宿主機下Docker容器間通信還迷糊嗎?

在我們的整個系統中,不可避免的需要在同一個主機上安裝部署多個服務。那如果使用Docker部署,總是存在容器間通信的問題。

Docker的網路通信問題對於小白呢?總是會給你驚喜,別怕,跟著碼哥做一遍,你會發現容器間通信So easy!

在安裝好Docker後,Docker會創建一個Linux網橋docker0,Docker For Mac的實現和標準Docker規範有區別,Docker For Mac沒有docker0。

可以使用Docker network ls 查看,docker 網絡情況

「Docker」你對同一宿主機下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

「Docker」你對同一宿主機下Docker容器間通信還迷糊嗎?

查看/etc/hosts文件,你發現沒有任何映射路由

查看/etc/resolv.conf,是的,是 dns 在起作用

「Docker」你對同一宿主機下Docker容器間通信還迷糊嗎?


分享到:


相關文章: