Docker中的网络和数据管理

Docker中的网络和数据管理

学习目标

  1. 掌握Docker的网络管理
  2. 掌握Docker Swarm集群的使用
  3. 掌握Volumes数据卷的使用

(一)Docker网络管理

1、Docker默认网络管理

在进行Docker安装时,Docker就会自动创建三种网络。客户端可以通过网络管理指令进行查看,具体操作指令如下。

$docker network ls

上述指令用于列举Docker中的所有网络,执行后效果如图。
图1.1.1 Docker中的所有网络
下面通过一个事例来演示默认的bridge网络管理方式,其执行过程如下。

(1)创建并启动容器。在终端中执行如下指令。

$docker run -itd --name=networktest ubuntu

上述指令在后台启动了一个镜像名称为ubuntu的容器,并为启动后的容器命名为networktest。
图1.1.2 创建并启动容器
(2)使用网络查看指令查看网络详情。

$docker network inspect bridge

上述指令用于核查名称为bridge的网络详情,需要指明网络名称或者网络ID,执行上述指令后,效果如图。
图1.1.3 查看网络详情

  • 需要注意的是,这里介绍的三种网络bridge、host和none都是在非集群环境下Docker提供的默认网络,而在Docker Swarm集群环境下,除了这三种默认网络外,Docker还提供了docker_gwbridge和ingress两种默认网络。

  • 之前已经启动了多个容器,并且都是默认使用bridge网络进行管理的。为了不对本次实验造成干扰,建议先将前面创建的容器全部删除。
    图1.1.4

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

图1.3.1 查看创建的网络是否成功
(2)使用自定义网络启动容器

自定义网路创建成功后,就可以使用该网络启动一个容器,具体操作指令如下。

$docker run --network=isolated_nw -itd --name=nwtest busybox

执行上述指令后,会创建一个名为nwtest的容器,指令中的–network参数指定了该容器的网络连接为自定义的isolated_nw。
图1.3.2 使用该网络启动容器
通过docker inspect nwtest指令可以查看启动后的容器网络详情,来核查其网络管理方式。
图1.3.3 查看启动后的容器网络详情图1.3.4 查看启动后的容器网络详情
(3)为容器添加网络管理

名为nwtest的容器使用的只有自定义的isolated_nw一种网络管理方式,还可以继续为该容器添加其他网络管理方式,具体操作指令如下。

$docker network connect bridge nwtest

图1.3.5 添加网络管理
执行上述指令后,会为容器nwtest另添加一种默认的bridge网络管理方式。再次使用docker inspect nwtest指令查看该容器网络详情。
图1.3.6 Docker容器网络详情
图1.3.7 Docker容器网络详情(4)断开容器网络连接

容器既可以连接网络,也可以断开网络。这里以断开nwtest容器的自定义网络isolated_nw为例进行演示,断开网络连接的指令如下。

$ docker network disconnected isolated_nw nwtest

图1.3.8 断开容器网络连接
(5)移除自定义网络

当不再需要某个网络时,可以将该网络移除,但在移除网络之前,一定要先将所有与该网络连接的容器断开。指令如下。

$docker network rm isolated_nw
4、容器之间的网络通信

(1)创建容器

1)创建两个使用默认的bridge网络的容器,具体操作指令如下。

$docker run -itd --name=container1 busybox
$docker run -itd --name=container2 busybox

图1.4.1 创建容器
执行完上述指令后,会创建两个名为container1和container2的容器,同时他们都是使用默认的bridge进行网络管理的。

2)创建一个使用自定义的isolated_nw网络(需要预先创建)的容器,具体操作指令如下。

$docker run --network=isolated_nw -itd --name=container3 busybox

图1.4.2
3)为container2容器增加一个自定义的isolated_nw网络连接,具体操作指令如下。

$docker network connect isolated_nw container2

图1.4.3 增添自定义网络连接
执行上述指令后,container2容器就同时拥有了bridge和isolated_nw两种网络管理方式。

容器网络管理
container1bridge
container2bridge、isolated_nw
container3isolated_nw

(2)容器地址查看

先查看各个容器的网络地址。
进入container2容器,具体操作如下。

$docker attach container2

图1.4.4 容器的IP地址详情
分别进入容器1和容器3,并通过ifconfig指令查看对于容器的IP地址。
图1.4.5 容器的IP地址详情图1.4.6 容器的IP地址详情
(3)容器通信测试

首先,使用docker attach container1指令进入container1容器内部,使用ping指令连接container3来查看是否能够通信。
图1.4.7 容器连接效果图1
验证了两个容器不在同一个网络环境下,无法通信的判断。

接着,使用docker attach container2指令进入container2容器内部,使用容器IP分别连接container1和container3进行通信测试。

图1.4.8 容器连接效果图2
可以看出,在container2容器内部使用容器名称分别连接container1和container3进行通信测试。

最后,再在container2容器内部使用容器名称分别连接container1和container3进行通信测试。
图1.4.9 容器连接效果图3
通过前面的测试,我们可以得出一个结论:不同容器之间想要相互通信必须在同一个网络环境下;使用默认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

图2.2.1 配置IP1图2.2.2 配置IP2图2.2.3 配置IP3图2.2.4 配置IP4
图2.2.5 配置IP5图2.2.6 端口
另外worker1、worker2与上述manager1操作相同。

(2)创建Docker Swarm集群

1)在名为manager1的Docker机器上创建Docker Swarm集群,具体操作指令如下。

$ docker swarm init --advertise-addr 192.168.197.143

图2.2.7 Docker Swarm集群创建成功
Docker就会在自动在IP为192.168.197.143的机器上创建一个Swarm集群,并将该IP地址的机器设置为集群管理节点。

2)在管理节点上,使用docker node ls指令查看集群节点信息,效果如图。
图2.2.6 查看Docker Swarm集群节点信息可用看出,此时只创建了一个集群节点,而没有其他工作节点。

(3)向Docker Swarm集群添加工作节点。

1)启动另外两台Docker机器worker1和worker2,分别打开终端窗口,执行向集群中加入工作节点的指令,具体操作如下。

$docker swarm join --token SWMTKN-1-5hnv7qorqn6y727m2eqloxysrhx4hgp2x1zwt5b1y3bfx5zqs9-dmclqe6otu0lexguna35rxqq4 192.168.197.143:2377

图2.2.7 加入工作节点1图2.2.8 加入工作节点2

2)再次在管理管理节点上使用docker node ls指令查看集群节点信息。

图2.2.9 Docker Swarm集群节点信息
(4)向Docker Swarm集群部署服务

如果使用自己通过Dockerfile构建的镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。
图2.2.10 拉取图2.2.11 执行
(5)查看Docker Swarm集群中的服务

1)当服务部署完成后,在管理节点上可以通过docker service ls指令查看当前集群中服务列表信息。

$docker service ls

图2.2.12 查看
2)使用docker service inspect指令,查看部署的服务具体详情。

$docker service ps helloworld

图2.2.13 查看
3)使用docker service ps指令查看指定服务在集群节点上的分配和运行情况。

$docker service ps helloworld

图2.2.14 查看

(6)更改Docker Swarm集群服务副本数量。
图2.2.15 更改服务副本数量图2.2.16 查看指定服务
(7)删除服务

对于不需要的服务,我们可以进行删除。

$docker service rm helloworld

图2.2.16 删除服务

(8)访问服务

1)在集群管理节点manager1上,执行docker network ls 指令查看网络列表。
图2.2.17 查看网络列表
2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络。

$docker network create \
--driver overlay \
my-multi-host-network

图2.2.18 创建自定义网络

3)在集群管理节点manager1上,再次部署服务。

$docker service create \
--network my-multi-host-network \
--name my-web \
--publish 8080:80 \
--replicas 2 \
nginx

图2.2.19 再次部署服务
4)在集群管理节点manager1上,使用docker service ps my-web指令查看服务的两个服务副本运行情况。
图2.2.20 查看服务的两个服务副本运行情况
5)外界访问服务
图2.2.21 使用节点进行访问1图2.2.22 使用节点进行访问2图2.2.23 使用节点进行访问3

(三)Volumes数据卷管理

1、Volumes数据卷的优势
2、Volumes数据卷的使用

(1)创建并管理数据卷
1)创建数据卷

$docker volumes create my-vol

图3.2.1 创建数据卷
2)查看数据卷

$docker volume ls

图3.2.2 查看数据卷
3)核查数据卷

$docker volume inspect my-vol

图3.2.3 核查数据卷
4)删除数据卷

$docker volume rm my-vol

图3.2.4 删除数据卷
(2)启动容器并加载数据卷
1)查看本机容器和数据卷
图3.2.5图3.2.6
2)确认查看本机Docker文件系统中的容器和数据卷
图3.2.7
3)启动容器并挂载数据卷
图3.2.8
图3.2.9
4)再次查看本机容器和数据卷列表
图3.2.10图3.2.11
5)检查容器详情
图3.2.12
6)再次确认本机Docker文件系统中的容器和数据卷
图3.2.13 图3.2.14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值