容器間通訊
阿新 • • 發佈:2020-09-09
在容器中安裝一些命令工具(Docker的CentOS映象由於做了精簡,所以不包含vim等) Linux系統分為兩種: 1.RedHat系列:Redhat、Centos、Fedora等 2.Debian系列:Debian、Ubuntu等 RedHat系列的包管理工具是yum Debian系列的包管理工具是apt-get 我的是: Linux version 3.10.0-1127.19.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Aug 25 17:23:54 UTC 2020 yum 命令的: 先使用命令: yum provides "*/ping" ('/' 後面也可以是vim、telnet、ifconfig等) 檢視可以選擇的安裝包,選擇合適的安裝即可 安裝VIM命令 yum install vim 安裝PING命令 yum install iputils apt-get命令的: 安裝VIM命令 apt-get install vim 安裝TELNET命令 apt-get install telnet 安裝IFCONFIG命令 apt-get install net-tools 安裝PING命令 apt-get install -y iputils-ping -------------------------------------------------------------------------- 熟悉一些docker network的相關命令: 教程:https://www.yiibai.com/docker/network_connect.html docker network connect 將容器連線到網路 docker network create 建立一個網路 docker network disconnect 斷開容器的網路 docker network inspect 顯示一個或多個網路的詳細資訊 docker network ls 列出網路 docker network prune 刪除所有未使用的網路 docker network rm 刪除一個或多個網路 --------------------------------------------------------------------------- ------------------------------------------------------------------------- Docker容器間的通訊方式根據媒介可以分為:volume共享通訊、網路通訊等;根據通訊範圍也可以分為:同主機通訊和跨主機通訊等。而本文主要針對容器間的網路通訊方法進行討論。 1. Docker的網路驅動模型 Docker的網路驅動模型分類: bridge:Docker中預設的網路驅動模型,在啟動容器時如果不指定則預設為此驅動型別; host:打破Docker容器與宿主機之間的網路隔離,直接使用宿主機的網路環境,該模型僅適用於Docker17.6及以上版本; overlay:可以連線多個docker守護程序或者滿足叢集服務之間的通訊;適用於不同宿主機上的docker容器之間的通訊; macvlan:可以為docker容器分配MAC地址,使其像真實的物理機一樣執行; none:即禁用了網路驅動,需要自己手動自定義網路驅動配置; plugins:使用第三方網路驅動外掛; 2、使用bridge (1)docker的預設網橋 docker run命令啟動時,當你不指定--network時,預設使用bridge,容器之間通過ip通訊,但是docker也無法保證容器重啟後的IP地址不變,所以更好的方式是通過別名進行互聯,在網路中加入DNS伺服器,將容器名與IP地址進行匹配,省去了手動修改Web服務中連線mysql的IP的過程。 (2)自定義bridge 在容器化的應用程式提供更好的隔離效果和更好的互通性,更好的隔離效果是針對外界網路,而更好的互通性則是指同一bridge下的不同容器之間 具體使用: docker network 是主要是用做容器之間的通訊,即組建容器之間的區域網。其實使用 -link 可以實現容器之間簡單的網路,但是容器較多而且通訊關係較為複雜時,使用network就更又條理。 docker network 即在容器之間組建一個區域網,然後各個容器可以加入這個網路,之後容器之間的訪問就如同區域網中主機之間的訪問。 ① 建立network docker network create docker-network ②容器連線到network 執行新的容器,並加入到docker-network網路中 docker run --name docker-nginx -d --network docker-network --network-alias nginx-network nginx 解釋: // --network 表示這個容器要連線到的網路 // --network-alias 表示這個容器在此網路中的名稱,也可以使用--ip來指定容器的ip // 已經在執行的容器加入網路使用以下命令 docker network connect --alias nginx-network docker-network docker-nginx docker network connect --alias wp-network docker-network docker-wordpress 解釋: // docker network connect [OPTIONS] NETWORK CONTAINER --alias 為容器新增網路範圍的別名 ③容器之間的訪問: 使用 nginx 作為反向代理來訪問 wordpress(wp-network),可直接修改 nginx 的配置檔案,設定代理的主機地址為 wp-network 即可,( wp-network 為容器在network中的名稱)如下 location / { proxy_pass http://wp-network:80/; } // 注意:這裡的80埠為wordpress映象暴露的埠,(即DockerFile中expose的埠), // 並不是對映到主機的埠。(其實也沒必要對映埠了)
參考:
https://juejin.im/post/6844903847383547911
https://cloud.tencent.com/developer/article/1493140 (推薦)
https://cloud.tencent.com/developer/article/1110563