Docker中的网络与数据管理
文章目录
一、Docker网络
1.1、Docker默认网络管理
Docker在安装时会自动创建三种网络,在客户端通过网络管理指令查看,可以看到三种网络分别为bridge、host、none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可与宿主机之间进行通信,而host与none属于无网络,容器添加这两个网络时不能与外界网络通信。下面通过示例来演示默认的bridge网络管理方式。
(1)创建并启动容器通过上图命令可创建一个镜像名为Ubuntu容器名为networktest的容器
(2)使用网络查看指令查看网络详情上图命令需通过指明网络名称或网络ID查看名为bridge的网络详情,从上图中我们可以看到bridge网络的所用详细信息,其中还包括了使用默认bridge网络管理方式启动的名称为networktest的容器。
1.2、自定义网络的介绍
虽然Docker提供的默认网络使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理。
在Docker中,可以自定义bridge网络、overlay网络,也可以创建network plugin(网络插件)或者远程网络用以实现容器网络的完全定制与控制。
接下来对这几种自定义网络进行讲解:
(1)Bridge network(桥接网络)
为了保证容器的安全性,这种基于bridge驱动的自定义网络可以较好地实现容器隔离。需要说明的是,这种基于bridge驱动的网络对于单主机的小型网络环境管理是一个不错的选择,但是对于大型的网络管理环境(如集群)就需要考虑使用自定义overlay集群网络。
(2)Overlay network in swarm mode(Swarm集群中的覆盖网络)
为了保证安全性,Swarm集群使自定义的overlay网络只适用于需要服务的集群中的节点,而不会对外部其他服务或者Docker主机开放。
(3)Custom network plugins(定制网络插件)
如果前面两种自定义网络都无法满足需求时,就可以使用Docker提供的插件来自定义网络驱动插件。
自定义网络插件与其他网络插件遵循相同的限制与安装规则,所有插件都使用Docker提供的插件API,并且有一个安装、启动、停止和**的生命周期。
1.3、自定义bridge网络
1.3.1、创建自定义网络执行上述命令可以创建一个基于bridge网络驱动名为isolated_nw的网络,创建完成后使用docker network ls查看创建网络是否成功。
1.3.2、使用自定义网络启动容器执行上述命令之后会创建一个基于自定义网络isolated_nw驱动名为nwtest的容器,接下来通过docker inspect nwtest命令查看启动后的容器网络详情。
1.3.3、为容器添加网络管理
创建nwtest容器时,我们除了可以为其添加自定义网络isolated_nw之外,还可以继续为其添加其他网络管理方式。通过docker inspect nwtest查看isolate_nw又多了一种bridge的网络管理方式
1.3.4、断开容器网络连接
通过查看只剩余后来添加的bridge网络
1.3.5、移除自定义网络
再次查看网络时,只剩余默认的三种网络
1.4、容器之间的网络通信
1.4.1、创建容器
(1)创建两个使用默认bridge网络名为container1与container2的容器(2)创建一个使用自定义isolate_nw网络名为container3的容器
(3)为container2新增一个自定义isolated_nw的网络连接
至此,容器container2已经同时拥有bridge和isolate_nw两种网络管理方式。
从图中可以看到,container1和container2在同一个默认的bridge网络管理下,这两个容器可以相互通信;而container2和container3在同一个自定义的isolate_nw网络管理下,这两个容器也可以相互通信;但是container1和container3属于不同的网络环境,所以这两个容器无法进行通信。
1.4.2、容器地址查看
进入container2容器查看地址进入container1容器查看地址
进入container2容器查看地址
由此可查出三个容器分别对应的地址为如下表:
1.4.3、容器通信测试
(1)进入container1容器内部,使用ping连接container3查看是否能够通信测试发现,不论是“ping –w 4 IP地址”还是“ping –w 4 容器名称”都无法连通container3,因此可判断不在同一网络环境中,无法通信。
(2)进入container2容器内部,使用ping连接container1与container3查看是否能够通信
二、Docker Swarm集群
2.1、环境搭建
(1)准备3台Ubuntu系统的主机(用于搭建集群的3个Docker机器),每台机器上都需要安装Docker并且连接网络。
(2)集群管理节点Docker机器的IP地址必须固定,集群中的所有节点都能够访问该管理节点。
(3)集群节点之间必须使用相应的协议并保证其以下端口号可用(因为我的是新搭建的系统,所以以下端口全部未被占用):
*用于集群通信管理的TCP端口2377;
*TCP和UDP端口7946,用于节点间的通信;
*UDP端口4789,用于覆盖网络流量。
为了实例演示,此处按照要求在虚拟机中安装了3台使用Ubuntu16.04系统的机器,这3台机器的主机名以及各自对应的IP地址如下。
2.2、创建Docker Swarm集群
(1)在manager1节点创建DockerSwarm集群,具体指令如下执行上述指令后,出现如图所示信息,则表示DockerSwarm集群创建成功,创建后显示的两条指令分别是在添加工作节点和管理节点时使用的。
(2)在管理节点上,使用docker node ls指令查看集群节点信息根据图可发现,此时之创建了一个集群节点(默认为管理节点)
2.3、向Docker Swarm集群添加工作节点
(1)启动另外两台Docker机器worker1和worker2,分别打开终端,执行向集群中加入工作节点的指令,具体指令如下。(2)再次在集群管理节点上使用docker node ls指令查看集群节点信息。
此时,可以看出集群里表中显示出了1个管理节点manager1和2个工作节点worker1和worker2,这说明Swarm集群搭建成功。
2.4、向DockerSwarm集群部署服务
在Docker Swarm上部署服务时,既可以使用DockerHub上自带的镜像来启动服务,也可以使用自己通过Dockerfile构建的镜像来启动服务(前提是自己的镜像必须先被推送到Docker Hub中心仓库),为读者方便学习,本例使用Docker Hub上自带的alpine镜像来部署服务,具体指令如下。上述部署服务指令中各参数的具体说明如下:
*docker service create:用于在Swarm创建一个基于alpine镜像的服务。
*–replicas:指定了该服务只有一个副本实例。
*–name:指定创建成功后的服务名称为helloworld。
*ping docker.com:表示服务启动后执行的命令。
2.5、查看Docker Swarm集群中的服务
(1)当服务部署完成后,在管理节点上可以通过docker service ls查看当前集群中的服务列表信息(2)使用docker service inspect查看部署的服务具体详情
(3)可以使用docker service ps查看指定服务在集群节点上的分配和运行情况
2.6、更改Docker Swarm集群服务副本数量
在集群中部署的服务,如果只运行一个副本,就无法体现出集群的优势,并且一旦该机器或副本奔溃,该服务将无法访问,所以通过一个服务回启动多个服务副本。
在管理节点manager1上,更改服务副本数量
更改完成后,使用docker service ps查看这五个副本在3个节点上具体分布和运行情况由图可看出,helloworld服务的五个副本实例被随机分配到了manage1、manage1、worker1、worker2、worker2,并且状态都是Running,表明服务正常运行。需要说明的是,服务副本是随机均匀分配到不同节点的,读者在操作时可能与图中分配效果不同。
2.7、删除服务
对于不需要的服务,可以通过以下指令进行删除,在管理节点manager1上执行以下指令,该服务则会在集群中彻底被删除。
执行以上指令后,可以通过指令查看。
2.8、访问服务
前面部署的服务没有直接向外界暴露服务端口,外界也因此无法正常访问服务,接下来我们就通过自定义overlay驱动网络为例来讲解集群下的网络管理与服务访问。
(1)在集群管理节点manager1上执行docker network ls指令查看网络列表
由图可以看出,与非集群环境下的Docker网络对比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。在集群发布服务时,如果没有指定网络,那么默认都是使用名为ingress网络连接的,在实际开发中,则会使用自定义的overlay驱动网络进行服务管理。
(2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络
上述指令以overlay为驱动创建了一个名为my-multi-host-network的网络
(3)在集群管理节点manager1上再次部署服务
上述指令中,–network参数用于指定服务使用自定义的overlay驱动网络my-multi-host-network连接;–name参数用于指定服务启动后的名称;–publish用于映射对外服务端口;–replicas用于指定该服务的副本数量;nginx表示是基于nginx镜像服务构建的服务。
(4)在管理节点manager1上,使用docker service ps my-web查看两个服务副本的运行情况(5)外部访问服务
打开浏览器,使用任意一台节点机器的“IP+8080”端口进行服务访问,都可以正常访问。