Docker多容器和通信搭建(二)

前言

  前面介绍了Docker容器的基础服务搭建,对于Docker容器来说一般都是多个容器项目运行在服务器上。所以这篇主要讲述多容器之间的交互,以及宿主与容器之间的交互问题。

一、部署多容器

  接着以Nginx为例,部署多个Nginx容器进行测试。

~]# docker run -d --name nginx -p 80:80 nginx:1.23 #若创建nginx容器,-d后台运行,-p映射,可以多端口映射 本地端口:容器端口,指定版本1.23
~]# docker run -d --name nginx2 -p 82:80 nginx:1.23
~]# docker run -d --name nginx3 -p 83:80 -p 433:433 nginx:1.23

  部署了3个Nginx容器,然后使用docker ps进行查看。这里可以看到CONTAINER ID和NAMES一般都是唯一,STATUS是状态,UP 42 hours是存活时间,

  PORTS端口映射,前面0.0.0.0:84->80/tcp 是宿主端口对应容器端口,后面:::84->80/tcp是IPv6的映射。

~]# docker ps 
~]# docker ps -a #全部的容器,包括未运行容器

 

 

二、通信配置

  一般Nginx为负载均衡,反向代理等功能,所以会访问其他容器内的项目。但是Docker默认通信是存在不确定性,主要IP是根据哪个容器先启动先分配,而且每次IP都可能不一样。

~]# docker inspect nginx #查看nginx的信息

  找到下面的信息,因为Docker容器默认的Networks是bridge桥接方式,它是独立一个虚拟桥接网络,所以需要端口映射。

  IPAddress地址也是动态分配的,所以当将nginx2跟nginx3启动顺序调换,这会使双方IP调换。但是容器之间是使用IP进行访问,若需要访问172.17.0.5时,下一次启动变了,则需要重新更改配置。

   为了处理这种情况,目前了解到有两种方式:

  一、将bridge改成host模式,host网络模式是将容器网络完全暴露在宿主网络中,与其共享同一个网络。这也使容器潜在的风险加大,而且host模式只存在Linux环境下,bridge能适应任何Docker支持的环境中。(不推荐)

  二、使用Docker的network通信,创建一个新的虚拟网络,然后将需要通信的容器加入到新的虚拟网络中。(推荐)

三、Docker network通信

  下面介绍docker network的使用,先创建一个network网络。

~]# docker network create –-driver bridge  my_network   #--driver bridge指定了网络驱动类型为桥接模式(这是默认类型,通常可以省略)。

  接着创建Nginx容器,并且接入到my_custom_network

~]# docker run -d --name my_nginx --network my_network -p 80:80 nginx  

  或者连接已经存在的Nginx容器

~]# docker network connect my_network nginx 
~]# docker network connect my_network nginx1 nginx2 #多容器连接
~]# docker network disconnect my_network nginx1 #断开连接

 接着使用查看容器命令,会看到Networks下多了my_network配置

~]# docker inspect nginx

 

  在Nginx容器中可以进行,代理转发的配置。Docker network使用容器名称进行访问,这样就避免IP变动问题。

例如nginx中可以配置 proxy_pass   http://nginx2:80; 这里的80端口是容器内部的端口,而不是映射到宿主的82端口

   使用docker network ls 查看网络的列表。

~]# docker network ls

  还有两个删除命令。

~]# docker prune #删除未使用的网络
~]# docker rm my_network #删除指定的网络,可多个

 

  以上介绍了多容器部署管理,及容器之间的交互。

 

posted @ 2024-03-05 15:19  Auler  阅读(7)  评论(0编辑  收藏  举报