Docker
1,docker网络管理
- 默认网络
1,查看docker网络
docker network ls
Docker中默认的三种网络分别为bridge、host和none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加到这两个网络时不能与外界网络通信。
这里介绍的三种网络bridge、host和none都是在非集群环境下Docker提供的默认网络,而在Docker Swarm集群环境下,除了这三种默认网络外,Docker还提供了docker_gwbridge和ingress两种默认网络。
2,查看容器使用的网络情况
docker inspect 容器名称
3,查看网络中的容器
docker network inspect bridge
- 自定义网络
虽然Docker提供的默认网络的使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理。在Docker中,可以自定义bridge网络、overlay网络,也可以创建newwork plugin(网络插件)或者远程网络以实现容器网络的完全定制和控制。
1,网络类型
-
Bridge networks(桥接网络)
为了保证容器的安全性,我们可以使用基于bridge的驱动创建新的bridge网络,这种基于bridge驱动的自定义网络可以较好的实现容器隔离。需要说明的是,这种用户自定义的基于bridge驱动的网络对于单主机的小型网络环境管理是一个不错的选择,但是对于大型的网络环境管理(如集群)就需要考虑使用自定义overlay集群网络 -
Overlay network in swarm mode(Swarm集群中的覆盖网络)
在Docker Swarm集群环境下可以创建基于overlay驱动的自定义网络。为了保证安全性,Swarm集群使自定义的overlay网络只适用于需要服务的群集中节点,而不会对外部其他服务或者Docker主机开放。 -
Custom newwork plugins(定制网络插件)
如果前面几种自定义网络都无法满足需求时,就可以使用Docker提供的插件来自定义网络驱动插件。自定义网络插件会在Docker进程所在主机上作为另一个运行的进程。自定义网络驱动插件与其他插件遵循相同的限制和安装规则,所有插件都使用Docker提供的插件API,并且有一个包含安装、启动、停止和激活的生命周期。由于自定义网络插件使用较少,所以只需了解即可。
2,自定义网络
docker network create --driver bridge isolated_nw
创建一个基于bridge驱动的名称为isolated_nw的网络。其中–driver(可简写为-d)用于指定网络驱动类型,isolated_nw就是新创建的网络名称。需要说明的是,–driver bridge可以省略,省略时Docker会默认使用基于bridge驱动来创建新的网络
docker run -itd --name=nwtest --network=isolated_nw busybox
会创建一个名为nwtest的容器,指令中的–network参数指定了该容器的网络连接为自定义的isolated_nw。通过docker inspect nwtest指令可以查看启动后的容器详情,来核查其网络管理方式
docker network connect bridge nwtest
会为容器nwtest另添加一种默认的bridge网络管理方式。再次使用docker inspect nwtest指令查看该容器网络详情
docker network disconnect isolated_nw nwtest
断开网络连接的指令与连接网络的指令类似,在使用时也需要指定网络名称和容器名称
docker network rm isolated_nw
移除名为isolated_nw的自定义网络。当网络移除成功后,会返回网络名称。
- 容器间的网络通信
1,创建两个使用默认的bridge网络的容器
docker run -itd --name c1 busybox
docker run -itd --name c2 busybox
2,创建一个使用自定义的isolated_nw网络(需要预先创建)的容器
docker network create --driver bridge isolated_nw
docker run --network=isolated_nw -itd --name c3 busybox
3,为container2容器新增一个自定义的isolated_nw网络连接
docker network connect isolated_nw c2
4,c1、c2、c3网络分配情况如下
C1:172.17.0.5 【bridge】
C2:172.17.0.6 和 172.19.0.3 【bridge、isolated_nw】
C3:172.19.0.2 【isolated_nw】
docker inspect c1
docker inspect c2
docker inspect c3
5,测试容器间通信:分别登录c1、c2、c3容器,通过ping命令判断是否通信
ping -w 4 ip地址
6,结论:
不同容器之间想要相互通信必须在同一个网络环境下;使用默认bridge网络管理的容器可以使用容器IP进行通信,但无法使用容器名称进行通信;而使用自定义网络管理的容器则可以使用容器IP进行通信
2,搭建docker swarm集群
- swarm介绍
Swarm这个项目名称特别贴切。在WiKi的解释中,Swarm behavior是指动物的群集行为。比如我们常见的蜂群,鱼群,秋天往南飞的雁群都可以称作Swarm behavior。Swarm项目正是这样,通过把多个Docker Engine聚集在一起,形成一个大的docker-engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。
Swarm是Docker公司在2014年12月初发布的容器管理工具,和Swarm一起发布的Docker管理工具还有Machine以及Compose。Swarm将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go,docker_py,docker等)均可以直接与Swarm通信,使得在可用的节点上传播它们,以及支持更多的Dockejr命令以及集群驱动。Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。