Docker网络管理、Swarm集群管理工具、Volumes数据卷管理
一、Docker的网络管理
1、 Docker默认网络管理
在进行Docker安装时,Docker就会自动创建三种网络。客户端可以通过网络管理指令进行查看。
#docker network ls
#该指令用于列举Docker中的所有网络。
Docker中默认的三种网络分别是bridge、host和none;
bridge是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能;
host和none属于无网络,容器添加到这两个网络时不能与外界网络通信。
bridge网络管理方式演示:
(1)创建并启动容器
#docker run -itd --name=networktest ubuntu
#在后台启动ubuntu容器,将启动后的容器命名为networktest。
(2)查看网络详情
#docker network inspect bridge
#核查名称为bridge的网络详情,需要指明网络名称或网络ID。
执行上述指令后会显示出bridge网络的所有详细信息,其中包括了使用默认bridge网络管理方式启动的networktest容器。
2、 自定义birdge网络
在docker中可以自定义bridge网络、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器网络的完全定制和控制。
非集群环境下基于bridge驱动的自定义网络演示:
(1)创建自定义网络
#docker network create --driver bridge isolated_nw
#创建一个基于bridge驱动的isolated_nw网络。
(2)使用自定义网络启动容器
自定义网络创建成功后,可以使用该网络启动一个容器。
#docker run --network=isolated_nw -itd --name=nwtest busybox
#docker inspect nwtest
#查看启动后的容器网络详情,来核查其网络管理方式。
nwtest容器使用isolated_nw网络进行容器网络管理。
(3)为容器添加网络管理
nwtest容器默认只使用isolated_nw一种网络管理方式,我们可以为该容器添加其他网络管理方式。
#docker network connect bridge nwtest
#为容器nwtest添加一种默认的bridge网络管理方式,使用docker inspect nwtest查看该容器网络详情。
(4)断开网络连接
#docker network disconnect isolated_nw nwtest
(5)移除自定义网络
#docker network rm isolated_nw
#移除前将所有与该网络连接的容器断开。
当网络移除成功后,会返回网络名称。
3、容器之间的网络通信
实现Docker容器之间网络通信的具体步骤如下:
(1)创建容器
#docker run -itd --name=container1 busybox
#docker run -itd --name=container2 busybox
创建一个使用自定义isolated_nw网络(该网络需要预先创建)的容器。
#docker run --network=isolated_nw -itd --name=container3 busybox
为container2容器新增一个自定义的isolated_nw网络连接。
#docker network connect isolated_nw container2
container1使用默认bridge网络管理;
container2容器同时拥有bridge和isolated_nw两种网络管理方式;
container3使用自定义isolated_nw网络管理。
(2)容器地址查看
#docker attach container2
#进入container2容器,进入之前要先启动该容器。
在container2容器内部有两个网卡eth0和eth1,并分别对应的IP地址为172.17.0.3和172.18.0.3。
接下来分别进入容器container1和container3,并通过ifconfig指令查看对应容器ip地址。
container1的IP地址为:172.17.0.2
container3的IP地址为:172.18.0.2
(3)通信测试
首先使用 docker attach container1指令进入container1容器内部,使用ping命令连接container3来查看是否能够通信。
使用 docker attach container2指令进入container2容器内部,使用容器ip分别连接container1和container3的通信测试。
在container2容器内部使用容器名称分别连接container1和container3进行通信测试。
不同容器之间想要互相通信必须在同一个网络环境下;
使用默认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集群节点信息。
#docker node ls
3、向Docker Swarm集群添加工作节点
(1)启动另外两台Docker机器worker1和worker2,分别打开终端窗口,执行向集群中加入工作节点的指令。
#docker swarm join --token SWMTKN-1-3xddnyp8hkw6w54tolaokvehbgsg77rkp827p7nmkisd3zi8tk-8j4bhzfnq1551bvufo5xk0ddg 192.168.197.143:2377
(2)再次在集群管理节点上使用 docker node ls指令查看集群节点信息
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
5、查看Docker Swarm集群中的服务
(1)当服务部署完成后,在管理节点上可以通过docker service ls指令查看当前集群中的服务列表信息。
#docker service ls
(2)可以使用docker service inspect指令,查看部署服务具体详情。
#docker service inspect helloworld
(3)使用docker service ps指令查看指定服务在集群节点上的分配和运行情况。
#docker service ps helloworld
6、更改Docker Swarm集群服务副本数量
#docker service scale helloworld=5
helloworld服务的5个副本实例被随机分配到了manager1、worker1和worker2这三个节点运行,状态都是Running表示服务正常运行。
7、删除服务
对于不需要的服务,我们可以/进行删除。
#docker service rm helloworld
在集群管理节点manager1上执行上述删除服务指令后(需要指定删除服务的名称),该服务就会在集群中彻底删除。
8、访问服务
集群下的网络管理与服务访问,具体实现过程如下:
(1)在集群管理节点manager1上,执行docker network ls 查看网络列表。
与非集群环境下的Docker网络对比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。
(2)在集群管理节点manager1上,创建以overlay为驱动的自定义网络。
#docker network create --driver overlay my-multi-host-network
#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指令查看服务的两个服务副本运行情况
两个副本任务被随机分配到了worker1和worker2两台主机上,并已正常运行。
(5)外部访问服务
使用任意一台的“IP+8080”端口进行服务访问。
三、Docker数据管理—Volumes数据卷管理
1、创建并管理数据卷
(1)创建数据卷
在Docker主机终端,通过对docker volume create指令创建一个名为my-vol的数据卷。
#docker volume create my-vol
(2)查看数据卷
使用docker vvolume ls指令查看本地数据卷列表。
#docker volume ls
(3)核查数据卷
使用docker volume inspect指令查看指定数据卷详情。
#docker volume inspect my-vol
#显示my-vol的数据卷的详细信息。
(4)删除数据卷
#docker volume rm my-vol
2、启动容器并加载数据卷
(1)查看本机容器和数据卷
#docker ps -a
#查看本地Docker机器上的容器。
#docker volume ls
#查看本地Docker机器上的数据卷。
(2)确认查看本机Docker文件系统中的容器和数据卷
首先在Docker主机终端中将普通用户切换到root用户,然后进入“/var/lib/docker”目录,即Docker默认在本机上的文件系统目录,查看信息。
(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
#用于创建并启动一个容器,同时挂载一个数据卷
(4)再次查看本机容器和数据卷列表
在Docker主机终端分别使用docker ps -a和docker volume ls指令查看本地Docker机器上存在的容器和数据卷。
容器创建成功后自动加载了数据卷。如果在创建容器时数据卷不存在,则Docker会自动创建。
(5)检查容器详情
在Docker主机终端使用docker inspect+容器名称指令查看容器详情(主要查看数据挂载信息)。
(6)再次确认本机Docker文件系统中的容器和数据卷
首先在Docker主机终端中将普通用户切换到root用户,然后进入/var/lib/docker目录,然后分别进入containers容器文件目录和volumes数据卷文件目录查看内容。
新建的容器和数据卷已自动生成在本地Docker文件目录中。