1. 程式人生 > 實用技巧 >容器間通訊

容器間通訊

在容器中安裝一些命令工具(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