前言
前面介绍了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 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 #断开连接
在Nginx容器中可以进行,代理转发的配置。Docker network使用容器名称进行访问,这样就避免IP变动问题。
例如nginx中可以配置 proxy_pass http://nginx2:80; 这里的80端口是容器内部的端口,而不是映射到宿主的82端口
使用docker network ls 查看网络的列表。
~]# docker network ls
还有两个删除命令。
~]# docker prune #删除未使用的网络 ~]# docker rm my_network #删除指定的网络,可多个
以上介绍了多容器部署管理,及容器之间的交互。
标签:容器,network,80,nginx,Docker,docker,搭建 From: https://www.cnblogs.com/zrl66/p/18054101