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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本文讲的是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集群

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Kubernetes Docker Python
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
31 0
|
6天前
|
存储 虚拟化 数据中心
|
8天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
5天前
|
安全 Linux 数据库
Docker 入门详解
通过遵循这些步骤,你将能够快速入门 Docker 并开始探索容器化的世界,关注 V 哥,技术之路一起成长。
|
9天前
|
算法 Nacos Docker
docker部署nacos集群
docker部署nacos集群
18 0
|
9天前
|
NoSQL Redis Docker
使用Docker搭建Redis主从集群
使用Docker搭建Redis主从集群
21 1
|
10天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
17 0
|
10天前
|
Linux 虚拟化 Docker
docker入门
docker入门
19 2
|
10天前
|
存储 运维 Docker
Docker从入门到精通:Docker 容器数据卷详解
Docker 数据卷是持久化容器数据的关键机制,允许跨容器或主机共享,即使容器删除数据仍保留。创建数据卷可通过命令行或容器启动时指定,挂载到容器目录以读写。使用 `docker volume` 命令可管理数据卷,适用于持久化存储、数据共享及备份场景。了解和善用数据卷能优化 Docker 应用程序的运维。
20 0
|
11天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
13 0