博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

容器间通信

Posted on 2020-09-09 11:17  shyHorse  阅读(173)  评论(0编辑  收藏  举报
在容器中安装一些命令工具(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 (mockbuild@kbuilder.bsys.centos.org) (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