首页 > 网络 > 云计算 >

【实验】老式的DockerSwarm集群操作与单机Docker的不同之处

2017-06-27

【实验】老式的DockerSwarm集群操作与单机Docker的不同之处,使用Docker Toolbox 以及脚本,能很快速方便地创建好Docker Swarm集群环境。Docker自从1 12版开始,引擎内置Swarm mode集群功能,有许多新的特性,这些新特性,老的 Docker Swarm都不具备。

【实验】老式的DockerSwarm集群操作与单机Docker的不同之处,使用Docker Toolbox 以及脚本,能很快速方便地创建好Docker Swarm集群环境。Docker自从1.12版开始,引擎内置Swarm mode集群功能,有许多新的特性,这些新特性,老的 Docker Swarm都不具备,但现在来学习也是有必要的。Docker Swarm集群到底怎么使用呢?集群上的操作与单机上的操作有什么不同呢?本文通过对比实验,加深对集群操作的理解。

现有疑问:

使用Docker Toolbox 以及编好的脚本,能很快速、很方便地在本地电脑上创建好一个Docker Swarm集群环境。但这样的Docker Swarm集群却无法使用docker swarm/ docker node/docker Service等命令(会报404 page not found错误),Docker Swarm集群到底怎么操作呢?如何使用Docker Swarm集群呢?Docker Swarm集群上的操作与单机Docker上的操作有什么不同呢?

自从Docker 1.12版开始,Docker引擎内置的Swarm mode集群功能,有许多新的特性,比如去中心化的容错设计、内置负载均衡、跨主机网络路由等。这些新特性,老的Docker Swarm都不具备,现在还来学习以前使用的Docker Swarm集群还有必要吗?

特别说明:

1、不能混淆Docker SwarmSwarm mode,具体参见我整理的另一篇《Docker Swarm和Swarm mode是两个概念!!》。

2、我觉得再来学习老式的Docker Swarm集群是有必要的,集群搭建的思想都差不多,都要求性能更强大、资源利用率更高、功能更多更全、更加安全可靠、更加易于使用等,很多知识都是触类旁通的,在学习中增长见识,见证Swarm发展的历史。

3、集群是使用Consul作为KV存储服务器的,从中可以学到如何以容器的方式创建及使用Consul。这种使用方式在很多地方都用得到。

本文目录

1、创建老式的Docker Swarm集群

1.1创建1个K/V外部键值存储虚机

1.2创建3个master集群管理虚机

1.3创建1个node集群工作虚机

2、实际操作对比及说明(单机上操作与Docker Swarm集群上操作的对比)

2.1 docker-machine 切换主机的命令不同,--swarm参数,单机不用,集群要用

2.2 docker info不同,一个是单机的信息,一个显示整个集群的信息

2.3 docker ps 不同,一个是显示单机运行的容器,一个显示整个集群运行的容器

2.4 docker pull不同,一个是在单机上下载镜像,一个是整个集群机器都下载一遍

2.5 docker volume不同,一个是在单机上创建数据卷,一个在整个集群上创建数据卷

2.6 docker network不同,一个是在单机上创建网络,一个是在集群中的每台机器上都创建的网络,实现跨主机的通讯。

2.7 docker run不同,一个是在单机上运行容器,一个是在集群中按照调度策略,选择其中一台机器,运行容器。多次执行同一条命令(仅端口和容器名称不一样),可以看到容器被分配到不同主机上运行的效果

2.8 docker images不同,单机上显示当前机器上的镜像,如果切换到集群,则显示所有节点内的镜像。(这点还是有疑问的,单机上下载的镜像,在集群环境下也显示该镜像?)

集群创建

集群由1个K/V虚拟机、3个master集群管理虚拟机、1个node集群非管理虚拟机组成。使用docker-machine create 命令快速创建虚机,主要创建过程如下:

# 1.1创建1个K/V外部键值存储虚机

# 为了以后快速下载Docker镜像,解决国内网络访问国外服务器慢的问题,

# 在创建虚拟机时,一定要加上镜像加速器地址。

# kv虚拟机的名称为kvstore

docker-machine create \

--driver virtualbox \

--engine-registry-mirror=https://registry.docker-cn.com \

kvstore

# 切换到kvstore虚拟机上

# 运行consul容器,提供集群的KV存储和查询服务

eval $(docker-machine env kvstore)

docker run --name consul \

--restart=always \

-p 8400:8400 \

-p 8500:8500 \

-p 53:53/udp \

-d progrium/consul \

-server -bootstrap-expect 1 \

-ui-dir /ui

# 显示Consul图形化管理界面的的访问方法:

echo 访问 consul服务器的网址:http://$(docker-machineip kvstore):8500/ui

# 1.2.1 创建3个master集群管理虚机

# 创建Swarm集群的主控节点 master1

# 使用KV存储,提供服务发现功能

# 注意末尾的反斜杠后面不能有空格!!!

docker-machine create \

--driver virtualbox \

--engine-registry-mirror=https://registry.docker-cn.com \

--swarm \

--swarm-master \

--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-advertise=eth1:2376" \

master1

# 1.2.2创建Swarm集群的管理节点 master2

docker-machine create \

--driver virtualbox \

--engine-registry-mirror=https://registry.docker-cn.com \

--swarm \

--swarm-master \

--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-advertise=eth1:2376" \

master2

# 1.2.3创建Swarm集群的管理节点 master3

docker-machine create \

--driver virtualbox \

--engine-registry-mirror=https://registry.docker-cn.com \

--swarm \

--swarm-master \

--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-advertise=eth1:2376" \

master3

# 1.3 创建1个node集群工作节点虚机

# 注意:这里没有 --swarm-master 参数

docker-machine create \

--driver virtualbox \

--engine-registry-mirror=https://registry.docker-cn.com \

--swarm \

--swarm-discovery="consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-store=consul://$(docker-machine ip kvstore):8500" \

--engine-opt="cluster-advertise=eth1:2376" \

node1

实际操作及说明:

我们可以同时打开两个Docker Toolbox控制终端,执行不同的操作命令,从中对比分析,发现其中的不同之处,加深对Docker Swarm操作的理解和认识。

# 2.1 docker-machine切换主机的命令不同,单机不用--swarm参数,集群要用

# 执行Docker-machine ls时,可以区分开集群操作和单机操作

# 加上--swarm参数,切换到集群操作状态,执行ls时有(swarm)标记

# 不加--swarm参数,执行ls则没有(swarm)标记,便于区分、识别。

# 如图2.1\

#

# 2.2 docker info不同,一个是单机的信息,一个显示整个集群的信息

# 下左窗是单机的情况下,docker info显示单机的Docker信息,

# 其中的swarm:inactive指的是 swarm mode的状态为inactive

# 并不是指该机器不是Docker Swarm的成员。

# 下右窗是集群的操作,使用--swarm参数,切换到集群内的控制节点master1

# 执行docker info时显示整个Docker Swarm集群的Docker信息,

# 图上显示集群共有4个节点,共有17个容器,13个在运行,8个镜像

# 以及4个节点服务器上的地址端口、状态、运行的容器、CPU内存大小等相关信息。

# 如图2.2.1、图2.2.2\\

#

# 2.3 docker ps不同,一个是显示单机运行的容器,一个显示整个集群运行的容器

# 下图左窗中,分别显示每台单机上的容器运行情况,

# 下图右窗中,使用 --swarm 参数,切换到任何一个管理节点,

# 都可以查看整个集群运行的容器,

# 并且非管理节点无法使用 --swarm 参数(如node1节点)。

# 如图2.3\

#

# 2.4 docker pull不同,一个是在单机上下载镜像,一个是集群上每台机器上都下载

# 下图左窗口中,在单机上拉取busybox镜像,该镜像只在单机上有

# 下图右窗口中,在集群控制节点中拉取busybox镜像,

# 结果显示分别在3个控制节点和1个工作节点上都下载了该镜像。

# 分别切换到几个节点上,查看镜像,确实都已经下载到本地了,

# 同样在集群中删除镜像时,会一并把所有节点上的busybox镜像都删除了

# 如图2.4.1、图2.4.2、图2.4.3\\\

#

# 2.5 docker volume不同,一个是在单机上创建数据卷,一个在整个集群上创建数据卷

# 同样的道理,在单机上创建数据卷,只在该单机上。

# 而在集群控制节点上创建数据卷,一条创建命令,分别在4个节点上都创建了www数据卷

# 如图2.5.1、图2.5.2\\

#

# 2.6 docker network不同,一个是在单机上创建网络,一个是在集群中创建网络。

# 与数据卷创建不同的是,创建覆盖网络可以在每个节点上进行,无需--swarm参数,

# 在任意集群节点上创建覆盖网络,则集群中每台机器中都有该网络,从而实现跨主机的通讯。#这一点,集群的操作和集群内一台单机上操作是没有区别的。

# 删除网络时,在集群中任何一个节点上删除覆盖网络,其他机器上就没有该网络了,

# 集群内也没有该网络了

# 如图2.6.1、图2.6.2、图2.6.3\\\

#

# 2.7 docker run不同,一个是在单机上运行容器,

# 一个是在集群中按照调度策略,

# 选择其中一台机器,运行容器。

# 在集群中多次执行同一条命令(仅端口和名称不一样),

# 可以看到容器被分配到不同的主机上去执行

# 如图2.7.1、图2.7.2\\

#

# 2.8 docker images不同,在单个节点上下载镜像,该节点上是肯定有的,

# 切换到其他节点上查看,并没有该镜像,

# 再但切换到集群上查看,集群中却有该镜像?!

#(这点是有疑问的,单机上下载的镜像,在集群环境下也显示该镜像?)

# 如图2.8.1、图2.8.2、图2.8.3\\\

#

# 结束

相关文章
最新文章
热点推荐