當項目大規模使用 Docker 時,容器通信的問題也就產生了。要解決容器通信問題,必須先了解很多關於網絡的知識。Docker 作為目前最火的輕量級容器技術,有很多令人稱道的功能,如 Docker 的鏡像管理。然而,Docker 同樣有著很多不完善的地方,網絡方面就是 Docker 比較薄弱的部分。因此,我們有必要深入了解 Docker 的網絡知識,以滿足更高的網絡需求。
安裝 Docker 以後,會默認創建三種網絡,可以通過 docker network ls 查看。
[root@localhost ~] docker network ls NETWORK ID NAME DRIVER SCOPE b3634bbd8943 bridge bridge local 062082493d3a custom_network bridge local 885da101da7d host host local f4f1b3cf1b7f none null local
通過自定義網絡模式 custom_network 創建容器:
docker run -di --name bbox05 --net custom_network busybox
通過 docker inspect 容器名稱|ID 查看容器的網絡信息,在 NetworkSettings 節點中可以看到詳細信息。
通過 docker network connect 網絡名稱 容器名稱 為容器連接新的網絡模式。
docker network connect bridge bbox05
通過 docker inspect 容器名稱|ID 再次查看容器的網絡信息,多增加了默認的 bridge。
通過 docker network disconnect 網絡名稱 容器名稱 命令斷開網絡。
docker network disconnect custom_network bbox05
通過 docker inspect 容器名稱|ID 再次查看容器的網絡信息,發現只剩下默認的 bridge。
可以通過 docker network rm 網絡名稱 命令移除自定義網絡模式,網絡模式移除成功會返回網絡模式名稱。
docker network rm custom_network
注意:如果通過某個自定義網絡模式創建了容器,則該網絡模式無法刪除。
接下來我們通過所學的知識實現容器間的網絡通信。首先明確一點,容器之間要互相通信,必須要有屬於同一個網絡的網卡。
我們先創建兩個基於默認的 bridge 網絡模式的容器。
docker run -di --name default_bbox01 busybox docker run -di --name default_bbox02 busybox
通過 docker network inspect bridge 查看兩容器的具體 IP 信息。
然後測試兩容器間是否可以進行網絡通信。
經過測試,從結果得知兩個屬於同一個網絡的容器是可以進行網絡通信的,但是 IP 地址可能是不固定的,有被更改的情況發生,那容器內所有通信的 IP 地址也需要進行更改,能否使用容器名稱進行網絡通信?繼續測試。
經過測試,從結果得知使用容器進行網絡通信是不行的,那怎麼實現這個功能呢?
從 Docker 1.10 版本開始,docker daemon 實現了一個內嵌的 DNS server,使容器可以直接通過容器名稱通信。方法很簡單,只要在創建容器時使用 --name 為容器命名即可。
但是使用 Docker DNS 有個限制:只能在 user-defined 網絡中使用。也就是說,默認的 bridge 網絡是無法使用 DNS 的,所以我們就需要自定義網絡。
我們先基於 bridge 網絡模式創建自定義網絡 custom_network,然後創建兩個基於自定義網絡模式的容器。
docker run -di --name custom_bbox01 --net custom_network busybox docker run -di --name custom_bbox02 --net custom_network busybox
通過 docker network inspect custom_network 查看兩容器的具體 IP 信息。
然後測試兩容器間是否可以進行網絡通信,分別使用具體 IP 和容器名稱進行網絡通信。
經過測試,從結果得知兩個屬於同一個自定義網絡的容器是可以進行網絡通信的,並且可以使用容器名稱進行網絡通信。
那如果此時我希望 bridge 網絡下的容器可以和 custom_network 網絡下的容器進行網絡又該如何操作?其實答案也非常簡單:讓 bridge 網絡下的容器連接至新的 custom_network 網絡即可。
docker network connect custom_network default_bbox01
學完容器網絡通信,大家就可以練習使用多個容器完成常見應用集群的部署了。後面就該學習 Docker 進階部分的內容 Docker Compose 和 Docker Swarm。
您的 點讚 和 轉發 是對我最大的支持。
關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~