Docker中的网络和数据管理
学习目标
- 掌握Docker的网络管理
- 掌握Docker Swarm集群的使用
- 掌握Volumes数据卷的使用
(一)Docker网络管理
1、Docker默认网络管理
在进行Docker安装时,Docker就会自动创建三种网络。客户端可以通过网络管理指令进行查看,具体操作指令如下。
$docker network ls
上述指令用于列举Docker中的所有网络,执行后效果如图。
下面通过一个事例来演示默认的bridge网络管理方式,其执行过程如下。
(1)创建并启动容器。在终端中执行如下指令。
$docker run -itd --name=networktest ubuntu
上述指令在后台启动了一个镜像名称为ubuntu的容器,并为启动后的容器命名为networktest。
(2)使用网络查看指令查看网络详情。
$docker network inspect bridge
上述指令用于核查名称为bridge的网络详情,需要指明网络名称或者网络ID,执行上述指令后,效果如图。
-
需要注意的是,这里介绍的三种网络bridge、host和none都是在非集群环境下Docker提供的默认网络,而在Docker Swarm集群环境下,除了这三种默认网络外,Docker还提供了docker_gwbridge和ingress两种默认网络。
-
之前已经启动了多个容器,并且都是默认使用bridge网络进行管理的。为了不对本次实验造成干扰,建议先将前面创建的容器全部删除。
2、自定义网络介绍
- Bridge networks(桥接网络)
- Overlay network in swarm mode(Swarm集群中的覆盖网络)
- Custom network plugin(定制网络插件)
3、自定义bridge网络
(1)创建自定义网络
在Docker主机上可以使用docker network create指令来创建网络,具体操作如下。
$ docker network create --driver bridge isolated_nw
(2)使用自定义网络启动容器
自定义网路创建成功后,就可以使用该网络启动一个容器,具体操作指令如下。
$docker run --network=isolated_nw -itd --name=nwtest busybox
执行上述指令后,会创建一个名为nwtest的容器,指令中的–network参数指定了该容器的网络连接为自定义的isolated_nw。
通过docker inspect nwtest指令可以查看启动后的容器网络详情,来核查其网络管理方式。
(3)为容器添加网络管理
名为nwtest的容器使用的只有自定义的isolated_nw一种网络管理方式,还可以继续为该容器添加其他网络管理方式,具体操作指令如下。
$docker network connect bridge nwtest
执行上述指令后,会为容器nwtest另添加一种默认的bridge网络管理方式。再次使用docker inspect nwtest指令查看该容器网络详情。
(4)断开容器网络连接
容器既可以连接网络,也可以断开网络。这里以断开nwtest容器的自定义网络isolated_nw为例进行演示,断开网络连接的指令如下。
$ docker network disconnected isolated_nw nwtest
(5)移除自定义网络
当不再需要某个网络时,可以将该网络移除,但在移除网络之前,一定要先将所有与该网络连接的容器断开。指令如下。
$docker network rm isolated_nw
4、容器之间的网络通信
(1)创建容器
1)创建两个使用默认的bridge网络的容器,具体操作指令如下。
$docker run -itd --name=container1 busybox
$docker run -itd --name=container2 busybox
执行完上述指令后,会创建两个名为container1和container2的容器,同时他们都是使用默认的bridge进行网络管理的。
2)创建一个使用自定义的isolated_nw网络(需要预先创建)的容器,具体操作指令如下。
$docker run --network=isolated_nw -itd --name=container3 busybox
3)为container2容器增加一个自定义的isolated_nw网络连接,具体操作指令如下。
$docker network connect isolated_nw container2
执行上述指令后,container2容器就同时拥有了bridge和isolated_nw两种网络管理方式。
容器 | 网络管理 |
---|---|
container1 | bridge |
container2 | bridge、isolated_nw |
container3 | isolated_nw |
(2)容器地址查看
先查看各个容器的网络地址。
进入container2容器,具体操作如下。
$docker attach container2
分别进入容器1和容器3,并通过ifconfig指令查看对于容器的IP地址。
(3)容器通信测试
首先,使用docker attach container1指令进入container1容器内部,使用ping指令连接container3来查看是否能够通信。
验证了两个容器不在同一个网络环境下,无法通信的判断。
接着,使用docker attach container2指令进入container2容器内部,使用容器IP分别连接container1和container3进行通信测试。
可以看出,在container2容器内部使用容器名称分别连接container1和container3进行通信测试。
最后,再在container2容器内部使用容器名称分别连接container1和container3进行通信测试。
通过前面的测试,我们可以得出一个结论:不同容器之间想要相互通信必须在同一个网络环境下;使用默认bridge网络管理可以使用容器IP进行通信,但无法使用容器名称及进行通信;而使用自定义网络管理的容器则可以同时使用容器名称和容器IP进行通信。
(二)Docker Swarm集群
1、Docker Swarm概述
(1)方便创建和管理集群
(2)可扩展
(3)可实现期望的状态调节
(4)集群中多主机网络自动扩展管理
(5)提供服务发现功能
(6)可实现负载均衡
(7)安全性强
(8)支持延迟更新和服务回滚
Docker Swarm使用
(1)环境搭建
1)准备3台Ubuntu系统主机,每台机器上都需要安装Docker并且可以连接网络,同时要求Docker版本都必须是1.12及以上,因为老版本不支持Docker Swarm。
2)集群管理节点Docker机器的IP地址必须固定,集群中所有节点都能够访问该管理节点。
3)集群节点之间必须使用相应的协议并保证其以下端口号可用。
三台主机名分别是manager1(管理节点)、worker1(工作节点)、worker2(工作节点),其IP地址如下。
- manager1:192.168.197.143
- worker1:192.168.197.144
- worker2:192.168.197.145
另外worker1、worker2与上述manager1操作相同。
(2)创建Docker Swarm集群
1)在名为manager1的Docker机器上创建Docker Swarm集群,具体操作指令如下。
$ docker swarm init --advertise-addr 192.168.197.143
Docker就会在自动在IP为192.168.197.143的机器上创建一个Swarm集群,并将该IP地址的机器设置为集群管理节点。
2)在管理节点上,使用docker node ls指令查看集群节点信息,效果如图。
可用看出,此时只创建了一个集群节点,而没有其他工作节点。
(3)向Docker Swarm集群添加工作节点。
1)启动另外两台Docker机器worker1和worker2,分别打开终端窗口,执行向集群中加入工作节点的指令,具体操作如下。
$docker swarm join --token SWMTKN-1-5hnv7qorqn6y727m2eqloxysrhx4hgp2x1zwt5b1y3bfx5zqs9-dmclqe6otu0lexguna35rxqq4 192.168.197.143:2377
2)再次在管理管理节点上使用docker node ls指令查看集群节点信息。
(4)向Docker Swarm集群部署服务
如果使用自己通过Dockerfile构建的镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。
(5)查看Docker Swarm集群中的服务
1)当服务部署完成后,在管理节点上可以通过docker service ls指令查看当前集群中服务列表信息。
$docker service ls
2)使用docker service inspect指令,查看部署的服务具体详情。
$docker service ps helloworld
3)使用docker service ps指令查看指定服务在集群节点上的分配和运行情况。
$docker service ps helloworld
(6)更改Docker Swarm集群服务副本数量。
(7)删除服务
对于不需要的服务,我们可以进行删除。
$docker service rm helloworld
(8)访问服务
1)在集群管理节点manager1上,执行docker network ls 指令查看网络列表。
2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络。
$docker network create \
--driver overlay \
my-multi-host-network
3)在集群管理节点manager1上,再次部署服务。
$docker service create \
--network my-multi-host-network \
--name my-web \
--publish 8080:80 \
--replicas 2 \
nginx
4)在集群管理节点manager1上,使用docker service ps my-web指令查看服务的两个服务副本运行情况。
5)外界访问服务
(三)Volumes数据卷管理
1、Volumes数据卷的优势
2、Volumes数据卷的使用
(1)创建并管理数据卷
1)创建数据卷
$docker volumes create my-vol
2)查看数据卷
$docker volume ls
3)核查数据卷
$docker volume inspect my-vol
4)删除数据卷
$docker volume rm my-vol
(2)启动容器并加载数据卷
1)查看本机容器和数据卷
2)确认查看本机Docker文件系统中的容器和数据卷
3)启动容器并挂载数据卷
4)再次查看本机容器和数据卷列表
5)检查容器详情
6)再次确认本机Docker文件系统中的容器和数据卷