Docker Swarm入门:如何搭建原生态Docker集群

简介: 本文讲的是Docker Swarm入门:如何搭建原生态Docker集群【编者的话】我们已花大量时间研究Docker及亚马逊的弹性云计算(EC2)容器服务(ECS)组建Docker容器集群的解决方案。而本文将重点阐述通过Docker Swarm搭建原生态Docker集群的方法。
本文讲的是Docker Swarm入门:如何搭建原生态Docker集群【编者的话】我们已花大量时间研究Docker及亚马逊的弹性云计算(EC2)容器服务(ECS)组建Docker容器集群的解决方案。而本文将重点阐述通过Docker Swarm搭建原生态Docker集群的方法。

Docker Swarm介绍

Docker Swarm是Docker原生态的集群技术。他可同Docker或者Docker-Machine的命令行行工具配合,提供在主机集群上部署容器引擎的基本功能。Docker Swarm同亚马逊ECS在功能域上的确存在很大差异。

亚马逊ECS 利用自有技术栈来运行Docker容器,包括在虚拟宿主机上运行EC2实例,实现动态自动扩展和缩减虚拟机,使用弹性负载均衡器(ELB)将负载分发到各个Docker容器,等等。

从另一个角度讲,Docker Swarm还仅仅只是一个集群工具:通过Swarm来注册可运行Docker容器的服务器,然后Swarm将部署容器到这些虚拟机上,通过Swarm实现主机的启动和停止、注册和注销,并设置负载均衡策略注册和注销容器。

然而,亚马逊ECS 更倾向于在AWS环境中构建容器集群,Docker Swarm的确有能力运行在任何地方,包括在亚马逊之外。目前,许多组织接纳云计算较慢,或者运行在一种混合云环境中,让部分应用或实例运行在公有云上,剩余应用运行在本地的数据中心内。

因此,无论组织是否接纳了云平台,在混合云或纯数据中心环境中,采用Swarm均可发挥Docker的技术优势。

Docker Swarm是如何工作的?

实施Docker Swarm采用了两类组件:
  • 管理者容器:运行在一台虚拟机上,用来管理环境,实现发布容器到不同的代理,向集群报告容器状态及部署信息。他是Docker Swarm的主要接口;
  • 代理:是一组运行在虚拟机上的容器服务,负责向管理容器注册代理,并运行最终的Docker容器服务。

图1 展示了相关概念
fig-1dockerswarm-1024x812.png

这个例子中,采用了一个Docker Swarm管理者,管理了两个代理(代理1、代理2),这两个代理运行了两个Nginx容器实例,这里管理者和代理都属于“Docker Machine”,“Docker Machine”含有Docker引擎并可运行Docker容器。在下一节中将看到,除了启动命令一个使用 Docker Machine命令而另一个使用docker命令外,Docker Machine和Docker容器自身非常相似。

在下一节的例子中将会阐述如何在本机上搭建一个Docker Swarm集群(参考图1中Docker主机的方式(在笔记本上搭建的方式))。在生产环境下,管理者和代理一样可直接运行在各自的虚拟机上。

开始Docker Swarm之旅

现在已经理解Docker Swarm的概念及工作原理,本节将带您一步一步的构建本地Docker Swarm集群,并启动运行。

第一步安装Docker,您可在相关链接中找到在Mac、Windows、Linux环境下安装Docker的相关信息,在安装Docker时,需要使用Docker-Machine的命令,创建Swarm的管理者和代理。 Docker Swarm的文档是这么定义Docker Machine的:

Docker Machine是一种在虚拟宿主机上安装Docker引擎工具,通过使用Docker-Machine命令行来管理宿主机。您可在办公网、数据中心或者云提供商(如AWS 或Digital Ocean)内,使用此命令在本机调用Mac或Windows的Virtualbox创建容器主机。使用Docker-Machine命令行可实现启动、检查、停止和重启一个管理者主机,升级Docker客户端及守护进程,以及配置同主机通信的Docker客户端。

启动Docker并打开一个Docker-Machine命令行终端,执行Docker-Machine的 ls 命令可看到所有运行在电脑上的Docker主机:
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default * virtualbox Running tcp://192.168.99.100:2376

我的电脑上,只设置了的运行在IP地址192.168.99.100的”默认“主机。由于需要创建并启动三个新的主机(1个管理者,2个代理),故需停止默认主机来确保本机资源:
$ docker-machine stop default

使用Docker-Machine create命令来创建三个Docker 主机:
$ docker-machine create -d virtualbox manager
$ docker-machine create -d virtualbox agent1
$ docker-machine create -d virtualbox agent2

至此,这些主机跟Swarm还没有任何关系,他们只是需要在电脑上运行的虚拟机,-d参数定义了创建主机的驱动。当创建主机时在本地运行时,驱动则应该是Virtualbox,执行Docker-Machine的 ls 命令可看到所有Docker主机:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
agent1 - virtualbox Running tcp://192.168.99.101:2376 v1.11.1
agent2 - virtualbox Running tcp://192.168.99.102:2376 v1.11.1 default - virtualbox Stopped Unknown
manager * virtualbox Running tcp://192.168.99.100:2376 v1.11.1

我们运行了三个主机,叫做管理者、代理1和代理2.在启动Swarm集群前,还需创建一个发现令牌,发现令牌是Swarm集群的唯一标识,使用令牌启动管理者,代理用令牌向管理者注册自己。

创建发现令牌

要创建发现令牌,需运行一个Docker Swarm容器的实例,并发送“创建”的命令参数。有趣的是,Docker Swarm是构建在Docker技术基础之上的,本节介绍内容包括:(1)创建发现令牌;(2)启动一个Swarm集群的管理者;(3)启动Swarm集群的代理;都将在一个预置的名叫“swarm”的Docker容器上执行。让我们继续探究。

Docker命令行工具用来向激活的主机发送命令,如上段命令中所示,“管理者”主机的“ACTIVE”列有一个星号,这意味着所有的Docker命令都要发送给这个管理者主机,下面介绍如何更改激活的主机。
首先建立一个发现令牌:
$ docker run --rm swarm create
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
eada7ab697d2: Pull complete
afaf40cb2366: Pull complete
7495da266907: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116
Status: Downloaded newer image for swarm:latest
7c14cbf2a86ecd490a7ea7ae4b795a6b

这行命令看着有些眼熟:
  • Docker run:运行指定的容器实例
  • “swarm”:是容器Docker 镜像的名字,用来创建容器。注意这里没有指定版本,因此默认为“swarm:latest”
  • “create”:是一个发送给“swarm”容器的命令
  • –rm:此命令参数告诉Docker执行完毕后删除Docker镜像,这意味着如果需要可重新下载此镜像,毕竟镜像占了空间。

在命令输出的最后一行就是发现令牌: 7c14cbf2a86ecd490a7ea7ae4b795a6b 。请保存,后续步骤需要使用。

后续文章将介绍如何启动Swarm管理者和代理。

原文链接:Getting Started with Docker Swarm: Part 1(翻译:Chilly)

原文发布时间为:2016-07-24

本文作者:Chilly

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Docker Swarm入门:如何搭建原生态Docker集群

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
运维 Kubernetes 开发者
解锁现代开发与部署:Docker入门指南
解锁现代开发与部署:Docker入门指南
210 100
|
2月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
504 5
|
7月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
584 79
|
5月前
|
NoSQL 安全 Redis
Docker Compose :从入门到企业级部署
Docker Compose 是用于定义和运行多容器应用的工具,支持服务、网络和卷三大核心要素。通过简洁的 YAML 文件,可实现应用的快速部署与管理,适用于开发、测试及生产环境。
436 1
|
10月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1421 91
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
654 161
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
613 64
|
9月前
|
Ubuntu Linux Docker
Docker 入门全攻略:安装、操作与常用命令指南
Docker 的世界非常广阔,这只是一个开始,请继续探索和学习 Docker 的高级特性和最佳实践。后续也会继续更新相关的理论与实践内容。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
Ubuntu 应用服务中间件 nginx
docker入门-快速学会docker
本文介绍了Docker的基本概念,包括镜像、容器、tar文件、Dockerfile和仓库,并通过实际操作演示了如何使用Docker。从拉取Nginx镜像、运行容器、修改容器内容、保存容器为新镜像,到使用Dockerfile构建自定义镜像,最后讲解了如何保存和恢复镜像。文中还推荐了一个在线实践平台Play with Docker,方便读者快速上手Docker。
981 5
docker入门-快速学会docker

热门文章

最新文章