神即道 道法自然 如来

docker network基础

–link(–link container_name或者将container_name取一个别名)

nginx与php两个容器间是如何进行通信的:

docker network

查看local的网络信息:

现在创建一个网络名为my_net且driver为bridge的网络:(默认创建的就是bridge)


利用–network启动容器提供服务:


通过选项–network-alias将取名的my_net起了一个别名


这里为啥能够ping通过php这个容器呢,因为这两个容器在同一个网络my_net内,而nginx里面ping的php是容器名(这里管理的是容器级别)

由于能够ping通php,所以在nginx中配置的:

所以配置文件中的php不会导致nginx启动失败,通过network的driver bridge实现了容器间的访问

上面在容器启动的时候使用的是选项–network,而在compose的配置文件中则是networks,现在通过配置文件来进行阐述该参数的作用:


由上述文件中可以知道networks定义了一个名称为net1的网络,由于networks是top-level(顶层级别,所以需要在顶层设置),而在创建的网络时候需要指定driver(单一网络使用bridge,swarm集群使用overlay),而且driver内容不能省略,在nginx和php两个service中使用了同一网络net1,现在将服务启动:


可以看出在启动服务的时候创建了服务级别的网络lnmp_net1


服务nginx和php在网络lnmp_net1实现了互联通信


在nginx服务中能够访问php的服务,在compose编排中级别的访问是对service级别的访问,所以在nginx服务配置文件中对应的php能够实现,不会导致nginx启动失败

及在compose的配置文件设置并对应的是service级别,当使用参数links也是配置的php服务,使得nginx服务能够ping通php服务并实现访问通信

将networks参数改为了links参数,使得两个服务能够继续互联访问


而且启动的时候创建的默认的网络


–links也是能够使得服务间进行访问的

现在通过案例讲解参数external_links的作用:external_links类似于links针对的也是service级别,但是external_links对应的是外部的service而不是同一compose配置文件中的service

上面可以看见external_links配置了php1的服务,并且将php1的服务也取别名为了php,然后编写另一个compose配置文件,并配置服务名为php1的服务:


结合两个compose配置文件,可以知道有nginx、php、php1的服务,并且php1的服务也有php的别名,现在依次开启php1,和nginx与php:


查看启动的容器状态:


现在将nginx一起的php的这个服务停止掉,看下nginx服务是否将会被停止:


而在nginx这里的输出如下:



而php服务对应的容器lnmp-php也停止了,但是nginx的服务却没有停止,为什么呢?那是因为php1的服务并没有停止,而php1的服务也是别名php服务的,而external_links就是实现这种情况的

使一个compose中的服务能与另一个compose中的服务能够互联通信,compose就是service级别的实现,配置文件中对应的都是service级别,而不是容器名

而在另一个compose中也必须定义与之相同的网络名称,也就是说配置external_links时,两者服务间的网络名称必须一致,不然依旧不能进行互相访问

当使用了external_links时,必须启动另一个compose的service,如果仅仅启动的是包含此函数的compose那么service将会启动报错


参数external_links连接的外部php服务并没有启动,所以nginx还是启动报错

点赞