Docker 網絡模式詳解及容器間網絡通信

2020-09-05 哈嘍沃德先生

  當項目大規模使用 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。

您的 點讚轉發 是對我最大的支持。

關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~

相關焦點

  • Docker:網絡模式詳解
    Container:創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、埠範圍。None:該模式關閉了容器的網絡功能。Bridge:此模式會為每一個容器分配、設置IP等,並將容器連接到一個docker0虛擬網橋,通過docker0網橋以及Iptables nat表配置與宿主機通信。
  • Docker:網絡模式詳解
    Container:創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、埠範圍。None:該模式關閉了容器的網絡功能。Bridge:此模式會為每一個容器分配、設置IP等,並將容器連接到一個docker0虛擬網橋,通過docker0網橋以及Iptables nat表配置與宿主機通信。
  • docker網絡模式之host及其容器間網絡基於link單向通訊
    docker 網絡模式之host1.只要啟動容器時指定 --net=host 該容器的網絡模式就是主機模式,否則就是默認的橋接(bridge)模式。docker run -itd --net=host mysql:latesthost網絡模式與bridge網絡模式的區別:a.bridge模式 每啟動一個容器,就會多出一個容器網卡,並且每個都是通過docker0網卡與外界通訊的。而且啟動時必須把容器埠與宿主機埠進行映射。否則外界訪問不了容器內的應用。
  • docker系列之容器網絡
    可以使用docker network inspect bridge 命令返回有關網絡的信息docker network inspect bridge連接到bridge的網絡容器都會有自己的ip此時容器之間的通信可以直接使用
  • 需要知道的——容器技術框架和docker網絡
    前言隨著現在容器化的技術的推進,容器網絡的運維的場景也在增多,主流的Docker 和 kubernetes 的網絡通信模型需要了解;本文主要介紹容器技術框架和docker網絡,至於kubernetes網絡實現會在後面專題介紹
  • Docker容器網絡-基礎篇
    如果一個容器聲明使用宿主機的網絡棧(-net = host),即不開啟Network Namespace,例如:docker run –d –net=host --name c_name i_name這種情況下,這個容器啟動之後監聽的是宿主機的80埠。像這樣直接使用宿主機網絡棧的方式,雖然可以為容器提供良好的網絡性能,但也不可避免的造成埠衝突等網絡資源衝突的問題。
  • IT工程師都需要掌握的容器技術之Docker容器網絡下
    《 》這篇文章我們主要講解了Docker容器網絡基礎,其中網絡的解決方案主要用於解決HOST內的容器通信。本篇文章我們將講解跨主機網絡的容器通信實現,涉及到Docker overlay網絡與MacVlan網絡的解決方案,下面我們就一起來學習吧!
  • Docker容器網絡-基礎篇
    接下來,我將以Docker容器網絡實現的基礎技術來分別闡述,在到真正的容器篇章節之前,能形成一個穩固的基礎知識網。像這樣直接使用宿主機網絡棧的方式,雖然可以為容器提供良好的網絡性能,但也不可避免的造成埠衝突等網絡資源衝突的問題。所以在一般情況下,我們都希望程序引入Network Namespace裡的網絡棧,即這個容器擁有自己的IP和埠。但是,這個時候也會帶來一個新的問題,被隔離的容器進程,是怎麼與其它被隔離的進程進行網絡通信的?
  • 聊聊多個docker-compose之間的網絡通信
    ,docker-compose在啟動後會自動創建默認的default網絡用於內部通信,但是隨著項目服務的增多,不可能所有的服務都定義在一個docker-compose文件中,為了便於維護,和解耦,一般根據業務類型和容器用途等,定義多個dcoker-compose文件來管理容器,比如基礎環境(redis、mq服務等)定義,公共業務(註冊中心,網關等)定義,普通業務服務等。
  • IT工程師都需要掌握的容器技術之Docker容器網絡上
    ,在容器需要有較高的網絡傳輸效率的場景下可以選擇host網絡,同時host網絡支持跨主機的docker容器的互相通信。04 Bridge網絡bridge網絡即橋接網絡,docker安裝後會自動創建一個docker0的linux bridge,我們創建容器如果不指定任何網絡類型則容器自動橋接到該網絡,我們可以通過如下命令查看該橋接網絡。
  • Docker系列之network命令(容器網絡)
    連接容器可以將容器連接到創建的一個或者多個子網絡,容器連接到使用不同網絡驅動的網絡,一旦連接,則容器之間就可以使用ip進行通信。連接容器而不使用自定義網絡在上述過程中創建的isolated_nw網絡,container2、container3連接後可以通過解析容器名稱的方式進行通信,而container1就無法通過這種方式進行通信,如果要實現通信,就得使用之前的--link的方式了。
  • Kubernetes之POD、容器之間的網絡通信
    匹配 labels 的 Pod IP 和埠列表組成 endpoints,由 kube-proxy 負責將服務 IP 負載均衡到這些 endpoints 上網絡通訊方式了解了上面的基本概念後,我們考慮一下K8s集群中docker容器之間是如何通訊的?
  • Docker動手教程7:容器跨主機網絡-overlay
    本節講解overlay網絡,它能夠創建基於VxLAN的跨主機網絡。實驗環境初始化本章測試環境構成如下:基於上一章容器多主機構建docker machine,節點名稱分別為:node1,node2,node3。node1安裝容器初始環境,且安裝docker machine軟體。
  • NetCore微服務入門全紀錄(八)Docker與容器網絡
    Dockerfile文件目錄 ports: 39;9080:9080&容器外部9080 容器內部9080 environment: 程序在容器內部http://+:9080運行 也可以寫成http://0.0.0.0:9080 networks: 自定義網絡my-net web: 34;web&39;5000:5000&&34;服務依賴於&34;服務和
  • Kubernetes之POD、容器之間的網絡通信
    匹配 labels 的 Pod IP 和埠列表組成 endpoints,由 kube-proxy 負責將服務 IP 負載均衡到這些 endpoints 上網絡通訊方式了解了上面的基本概念後,我們考慮一下K8s集群中docker容器之間是如何通訊的?
  • Docker動手教程5.2:容器單機網絡2
    內容摘要容器網絡連接特性Docker DNS容器共享網絡棧在本節開始前,請使用快照恢復容器環境,回到最初的環境。在上一節初步講解了容器的三種自帶網絡,以及自定義bridge網絡,在容器中使用最多的是bridge網絡。下面我們進一步學習bridge網絡。
  • docker 網絡的組成
    Host網絡:容器如果連接到docker host 網絡棧的話,那麼ta和host是共享網絡的。使用host網絡的優點在於性能上比較好、傳輸速率也快,但是也有一些限制,就是如果使用過的埠就不能夠重複使用了,不然會產生衝突的。 Bridge網絡:在docker安裝的時候會創建了一個名為docker0的bridge。
  • Docker 添加容器到一個網絡
    要創建一個安全並且能夠協同運行的 Web 應用程式,你需要創建一個網絡。通過網絡,在默認情況下為容器提供了完全獨立的環境。在你第一次運行一個容器的時候,你可以將容器添加到一個網絡中。例如,我們希望運行一個容器來運行 PostgreSQL 資料庫,並且傳遞 --net=my_bridge 標記來到你新網絡的連接中,可以運行下面的命令:$ docker run -d --net=my_bridge --name db training/postgres如果你檢查你的
  • docker網絡的組成
    使用host網絡的優點在於性能上比較好、傳輸速率也快,但是也有一些限制,就是如果使用過的埠就不能夠重複使用了,不然會產生衝突的。Bridge網絡:在docker安裝的時候會創建了一個名為docker0的bridge。在默認情況下容器時連接到這個docker0上。
  • Docker 容器編排利器 Docker Compose
     sudo rm /usr/local/bin/docker-compose  docker-compose.yml 文件詳解、參數、依賴等;networkds:定義網絡,可以多個,根據 DNS server 讓相同網絡中的容器可以直接通過容器名稱進行通信;volumes:數據卷,用於實現目錄掛載。