前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker Swarm学习笔记(一)

Docker Swarm学习笔记(一)

作者头像
小小科
发布2018-05-04 11:56:26
7490
发布2018-05-04 11:56:26
举报
文章被收录于专栏:北京马哥教育北京马哥教育

Docker Swarm概述

Docker Swarm是Docker官方提供的集群工具。它可以将一些关联的Docker主机转变成一个虚拟Docker主机。因为Docker Swarm符合Docker API的标准,任何已经可以与Docker守护进程通信的工具都可以使用Swarm来透明地扩展到多个主机。支持工具包括:

Dokku

Docker Compose

Docker Machine

Jenkins

当然,Docker客户端本身也是被支持的,而Docker Swarm支持的工具还不止这些。 如同其他的Docker项目,Docker Swarm依然遵循着“swap, plug, and play”的原则。

理解Swarm集群创建

创建一个Swarm集群的第一步是从网上拉取Docker Swarm镜像。然后,你可以使用Docker配置Swarm manager和所有节点运行Docker Swarm。步骤:

1.在每个节点上打开一个TCP端口用于跟Swarm manager通信

2.在每个节点上安装Docker

3.创建和管理TLS证书以保护集群

对于有经验的管理员或者程序员来说,手动安装Docker Swarm的方法是最好的。另外也可以用docker-machine来安装。使用Docker Machine可以快速的在云供应商或者你自己的数据中心安装Docker Swarm。如果你的本地主机已经安装了虚拟机,那么你可以在本地环境中使用Docker Machine快速的构建和浏览Docker Swarm。这种方法会自动生成证书以保护你的集群。

安装Docker Swarm的方式

两种方式

直接以swarm为镜像模板启动容器;

在系统中安装swarm的二进制可执行文件。

优缺点

以swarm镜像启动容器:

无需在系统中安装可执行的二进制文件;

用docker run命令每次都可以获取并运行最近版本的镜像;

容器是Swarm与主机环境相隔离,无需维护shell的路径和环境。

在系统中安装swarm:

Swarm项目的开发者在测试代码变更的过程中,无需在运行该二进制文件前进行容器化(“containerizing”)操作。

因此,官方的推荐的方式也是以Swarm镜像启动容器的方式,而且官方给出的指导文档也都是采用的此种方法。

构建Swarm集群

关于Swarm集群的构建,官方依然给了两种

1.Mac或Windows系统在虚拟机中运行Docker Swarm(Evaluate Swarm in a sandbox)

2.Linux系统中运行Docker Swarm(Build a Swarm cluster for production)

因为习惯了Hyper-v,如果要使用第一种方法必须要替换为Oracle VM VirtualBox(点击了解更多),这里计划是用Hyper-v创建虚拟机,然后安装Ubuntu Server系统,然后对第二种方法进行实践。这里只简单提一下第一种方法的步骤:

1.安装Docker Toolbox(Install Docker Toolbox);

2.创建三个虚拟机运行Docker Engine(Create three VMs running Docker Engine);

3.创建一个Swarm发现服务的token(Create a Swarm discovery token);

4.创建Swarm的管理者和节点(Create the Swarm manager and nodes);

5.管理Swarm(Manage your Swarm);

每一步的具体操作请参考Docker的官方文档。 下面主要演示Docker Swarm在Linux系统中的使用,而官方文档中用到的是AWS(Amazon Web Services)平台,这里我们有选择性的参照官方文档继续自己的操作。本次示例中用到了5个host,那么这里就创建5个虚拟机。

在这里我的 Docker01 和 Docker02 分别对应 manager0 和 manager1; Docker04 和 Docker05 分别对应 node0 和 node1; Docker03 对应 consul0;

创建虚拟机;

安装Ubuntu 16.04/15.04 Server (64-bit)系统;

开启并配置ssh服务;

安装Docker;

配置环境; 这里的配置环境主要是使用私有仓库的配置和使用,请参照文章:批量上传镜像到私有仓库

# 在客户端主机创建文件夹(DomainName:Port例如example.com:9527)mkdir -p /etc/docker/certs.d/DomainName:Port# 先将ca.crt文件传到客户端主机# 在ca.crt的当前目录下将该证书复制到上面创建的文件夹cp ca.crt /etc/docker/certs.d/DomainName:Port/# 重启docker服务service docker restart# 接下来就可以从私有仓库拉取镜像或向其上传镜像了。

建立了一个发现服务的后端;

在这里,你需要创建一个及其简单的发现服务的后台,Swarm集群的管理者和节点通过这个后台进行身份验证,从而成为集群的一员。Swarm集群的管理者也会利用这些信息去判断哪些节点能够运行容器。为了简单起见,您要在同一主机Swarm集群的管理者主机上运行一个consul守护进程。

# 操作对象manager0和consul0# 命令docker run -d -p 8500:8500 --name=consul swarm/consul -server -bootstrap

创建Swarm集群;

在创建完成发现服务的后台之后就可以开始创建集群的管理者了。接下来会创建两个Swarm集群的管理者,第一个启动的管理者将会成为Swarm集群的主管理者(primary manager)。也有文章称其为master,但那种说法已经被废弃。第二个启动的管理者可以看作是备胎(replica),一旦主管理者挂掉,那么备胎将升级为主管理者。

# 在高可用的Swarm集群中创建主管理者# 操作对象 manager0 和 consul0# <manager0_ip> 和 <consul_ip>相同docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <manager0_ip>:4000 consul://<consul_ip>:8500# 操作对象 manager1docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <manager1_ip>:4000 consul://172.30.0.161:8500# 操作对象 node0 和 node1docker run -d swarm join --advertise=<node_ip>:2375 consul://<consul_ip>:8500

操作Swarm集群;

# 获取集群的管理者和节点的信息# 操作对象 manager0 和 consul0docker -H :4000 info# 在Swarm集群中运行应用docker -H :4000 run hello-world# 查询Swarm集群的哪个节点在运行该应用docker -H :4000 ps

测试Swarm集群的故障;

# 获取swarm容器的id或名称# 操作对象 manager0docker ps# 删除或关闭当前的主管理者 manager0docker rm -f <id_name># 创建或启动Swarm集群管理者 manager0docker run -d -p 4000:4000 swarm manage -H :4000 --replication --advertise <manager0_ip>:4000 consul://<consul_ip>:8500# 查看该容器的日志sudo docker logs <id_name># 获取集群管理者和节点的信息docker -H :4000 info

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档