Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

一、Docker的网络管理

1、 Docker默认网络管理

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

#docker network ls

#该指令用于列举Docker中的所有网络。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

Docker中默认的三种网络分别是bridge、host和none;

bridge是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能;

host和none属于无网络,容器添加到这两个网络时不能与外界网络通信。

bridge网络管理方式演示:

(1)创建并启动容器

#docker run -itd --name=networktest ubuntu

#在后台启动ubuntu容器,将启动后的容器命名为networktest。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(2)查看网络详情

#docker network inspect bridge

#核查名称为bridge的网络详情,需要指明网络名称或网络ID。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

执行上述指令后会显示出bridge网络的所有详细信息,其中包括了使用默认bridge网络管理方式启动的networktest容器。

2、 自定义birdge网络

在docker中可以自定义bridge网络、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器网络的完全定制和控制。

非集群环境下基于bridge驱动的自定义网络演示:

(1)创建自定义网络

#docker network create --driver bridge isolated_nw

#创建一个基于bridge驱动的isolated_nw网络。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(2)使用自定义网络启动容器

自定义网络创建成功后,可以使用该网络启动一个容器。

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

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

#docker inspect nwtest

#查看启动后的容器网络详情,来核查其网络管理方式。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

nwtest容器使用isolated_nw网络进行容器网络管理。

(3)为容器添加网络管理

nwtest容器默认只使用isolated_nw一种网络管理方式,我们可以为该容器添加其他网络管理方式。

#docker network connect bridge nwtest

#为容器nwtest添加一种默认的bridge网络管理方式,使用docker inspect nwtest查看该容器网络详情。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(4)断开网络连接

#docker network disconnect isolated_nw nwtest

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(5)移除自定义网络

#docker network rm isolated_nw

#移除前将所有与该网络连接的容器断开。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

当网络移除成功后,会返回网络名称。

3、容器之间的网络通信

实现Docker容器之间网络通信的具体步骤如下:

(1)创建容器

#docker run -itd --name=container1 busybox

#docker run -itd --name=container2 busybox

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

创建一个使用自定义isolated_nw网络(该网络需要预先创建)的容器。

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

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

为container2容器新增一个自定义的isolated_nw网络连接。

#docker network connect isolated_nw container2

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

container1使用默认bridge网络管理;

container2容器同时拥有bridge和isolated_nw两种网络管理方式;

container3使用自定义isolated_nw网络管理。

(2)容器地址查看

#docker attach container2

#进入container2容器,进入之前要先启动该容器。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

在container2容器内部有两个网卡eth0和eth1,并分别对应的IP地址为172.17.0.3和172.18.0.3。

接下来分别进入容器container1和container3,并通过ifconfig指令查看对应容器ip地址。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

container1的IP地址为:172.17.0.2

container3的IP地址为:172.18.0.2

(3)通信测试

首先使用 docker attach container1指令进入container1容器内部,使用ping命令连接container3来查看是否能够通信。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

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

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

在container2容器内部使用容器名称分别连接container1和container3进行通信测试。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

不同容器之间想要互相通信必须在同一个网络环境下;

使用默认bridge网络管理的容器可以使用容器ip进行通信,但无法使用容器名称进行通信;

而使用自定义网络管理的容器则可以同时使用容器ip和容器名称进行通信。

二、Docker Swarm集群管理工具

1、环境搭建

(1)3台安装了Docker的Ubuntu系统主机,且都可以连接网络,Docker版本都必须是1.12及以上;

(2)集群管理节点Docker机器的ip地址必须固定,集群中的所有节点都能够访问该管理节点;

(3)集群节点之间必须使用相应的协议并保证其以下端口号可用:

#用于集群管理通信的TCP端口2377;

#TCP和UDP端口7946,用于节点间的通信;

#UDP端口4789,用于覆盖网络流量。

集群有三台,分别为manager1(作为管理节点)、worker1(作为工作节点)和worker2(作为工作节点),其ip地址分别如下:

manager1:192.168.197.143

worker1:192.168.197.144

worker2:192.168.197.145

2、创建Docker Swarm集群

(1)在manager1上创建Docker Swarm集群

#docker swarm init --advertise-addr 192.168.197.143

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

#查看Docker Swarm集群节点信息。

#docker node ls

3、向Docker Swarm集群添加工作节点

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

#docker swarm join --token SWMTKN-1-3xddnyp8hkw6w54tolaokvehbgsg77rkp827p7nmkisd3zi8tk-8j4bhzfnq1551bvufo5xk0ddg 192.168.197.143:2377

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

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

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

4、向Docker Swarm集群部署服务

Docker Swarm集群中部署服务可使用Docker Hub上自带的镜像启动服务,也可用通过Dockerfile构建的镜像启动服务。

(如果用通过Dockerfile构建的镜像来启动服务,先将镜像推送到Docker Hub中心仓库。)

例:Docker Hub上自带的alpine镜像部署集群服务

#docker service create --replicas 1 --name helloworld alpine ping docker.com

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

5、查看Docker Swarm集群中的服务

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

#docker service ls

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(2)可以使用docker service inspect指令,查看部署服务具体详情。

#docker service inspect helloworld

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

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

#docker service ps helloworld

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

6、更改Docker Swarm集群服务副本数量

#docker service scale helloworld=5

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

helloworld服务的5个副本实例被随机分配到了manager1、worker1和worker2这三个节点运行,状态都是Running表示服务正常运行。

7、删除服务

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

#docker service rm helloworld

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

在集群管理节点manager1上执行上述删除服务指令后(需要指定删除服务的名称),该服务就会在集群中彻底删除。

8、访问服务

集群下的网络管理与服务访问,具体实现过程如下:

(1)在集群管理节点manager1上,执行docker network ls 查看网络列表。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

与非集群环境下的Docker网络对比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。

(2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络。

#docker network create --driver overlay my-multi-host-network

#overlay驱动创建了一个my-multi-host-network网络。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

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

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

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(4)在集群管理节点manager1上,使用docker service ps my-web指令查看服务的两个服务副本运行情况

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

两个副本任务被随机分配到了worker1和worker2两台主机上,并已正常运行。

(5)外部访问服务

使用任意一台的“IP+8080”端口进行服务访问。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

三、Docker数据管理—Volumes数据卷管理

1、创建并管理数据卷

(1)创建数据卷

在Docker主机终端,通过对docker volume create指令创建一个名为my-vol的数据卷。

#docker volume create my-vol

(2)查看数据卷

使用docker vvolume ls指令查看本地数据卷列表。

#docker volume ls

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(3)核查数据卷

使用docker volume inspect指令查看指定数据卷详情。

#docker volume inspect my-vol

#显示my-vol的数据卷的详细信息。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
(4)删除数据卷

#docker volume rm my-vol

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

2、启动容器并加载数据卷

(1)查看本机容器和数据卷

#docker ps -a

#查看本地Docker机器上的容器。

#docker volume ls

#查看本地Docker机器上的数据卷。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
(2)确认查看本机Docker文件系统中的容器和数据卷

首先在Docker主机终端中将普通用户切换到root用户,然后进入“/var/lib/docker”目录,即Docker默认在本机上的文件系统目录,查看信息。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
(3)创建容器并挂载数据卷

#docker run -d -it --name devtest --mount source=myvol,target=/app busybox:latest

#docker run -d -it --name devtest2 -v myvol:/app busybox:latest

#用于创建并启动一个容器,同时挂载一个数据卷

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
(4)再次查看本机容器和数据卷列表

在Docker主机终端分别使用docker ps -a和docker volume ls指令查看本地Docker机器上存在的容器和数据卷。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
容器创建成功后自动加载了数据卷。如果在创建容器时数据卷不存在,则Docker会自动创建。

(5)检查容器详情

在Docker主机终端使用docker inspect+容器名称指令查看容器详情(主要查看数据挂载信息)。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理

(6)再次确认本机Docker文件系统中的容器和数据卷

首先在Docker主机终端中将普通用户切换到root用户,然后进入/var/lib/docker目录,然后分别进入containers容器文件目录和volumes数据卷文件目录查看内容。

Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
新建的容器和数据卷已自动生成在本地Docker文件目录中。