Docker Swarm入门(一)概观

简介: 本文讲的是Docker Swarm入门(一)概观,【编者的话】本文作者Matt Bajor热衷Docker及其相关产品的研究,本文是他写的Docker Swarm入门系列博客的第一篇,主要介绍了Docker Swarm的基本概念以及它的工作原理。
本文讲的是Docker Swarm入门(一)概观 【编者的话】本文作者 Matt Bajor 热衷Docker及其相关产品的研究,本文是他写的Docker Swarm入门系列博客的第一篇,主要介绍了Docker Swarm的基本概念以及它的工作原理。

Docker Swarm 是什么?

Docker Swarm 是一个用于创建Docker主机(运行Docker守护进程的服务器)集群的工具,使用Swarm操作集群,会使用户感觉就像是在一台主机上进行操作。在 DockerCon欧洲大会 宣布Swarm相关技术之前,我就曾经在 Docker Global Hack Day 上对于Swarm的相关技术进行了介绍。在这次hackday上,大家介绍了一些 非常酷的新技术 ,包括Docker Swarm(译者注:Docker集群工具)、Docker Machine(译者注:Docker管理工具)以及Docker Compose(译者注:Docker编排工具)。由于 Ansible  (一个自动化的运维工具)与Machine和Compose有类似的功能,所以Swarm服务更能引起我的兴趣。

在大会上,Victor Vieux与Andrea Luzzardi介绍了有关Swarm的基本概念,并且演示了Swarm的基本工作流程,他们还提出了一个非常有趣的结论:虽然POC (概念验证proof of concept)在功能上对项目进行论证并且能够进行基本的展示,但是这是以忽略整个的项目代码并且从头开始构建项目为代价的。我很赞同这个想法,在以后对一个项目进行POC时也要牢记这一点。

Swarm守护进程是使用Go语言编写的, 截止到目前 仍然处于Alpha阶段。Swarm项目的发展速度很快,几乎每天都会有新的功能和特性更新,据说, @vieux 本人也十分支持在项目中添加的功能,并且欢迎通过GitHub的 Issue 来修复bug。虽然我暂时不推荐在生产环境中使用Swarm,但是我相信它会是一个非常有前景的技术。

Docker Swarm 如何工作?

对Swarm进行操作的过程与处理单个Docker主机非常相似,无需进行太多修改,它就可以和现有的工具链进行很好的交互。Swarm是运行在Linux机器上的守护程序,它所绑定的网络接口与独立Docker实例相同(http/2375或https/2376)。Swarm 守护进程可以与标准的Docker客户端 >=1.4.0 相连接并接受其发送来的信息,之后,Swarm服务会对来自Docker客户端的指令信息进行配置,最后通过代理的方式把信息发送给不同Docker的守护进程,Swarm服务同时也监听着标准的Docker端口。 比如,Swarm会基于不同的打包算法并结合Docker守护进程在启动时指定好标签(tags),把 create 命令分配到不同的Docker守护进程上来执行。根据这一特性,用户可以创建由不同的Docker主机所构成的分区集群(partitioned cluster)并且将整个集群在逻辑上以一个单一的Docker终端的形式公开给用户,Swarm使这个过程变得极其简单。

与Swarm的交互“或多或少”地类似于与一个非集群的Docker实例的交互,但是也有一些需要注意的地方。Swarm并非对所有的Docker命令提供一对一的支持。这不仅是由于两种服务在体系结构上的区别,还因为Swarm服务刚刚起步不久,有些命令尚未得到实现(我想有些可能永远不会被实现)。当前几乎一切需要运行容器的命令都是可用的,包括以下的常用命令(还有其他的):
  • docker run
  • docker create
  • docker inspect
  • docker kill
  • docker logs
  • docker start

以上介绍的内容是运行该工具时所需的重要组成部分。下面介绍一下在最常见的配置情况下,相关的技术具体如何运行:
  • Docker主机服务(服务器上的Docker守护进程)通过--label key=value被启动并对网络进行监听。
  • Swarm守护进程被启动并指向一个文件,这个文件包含有构成集群的主机以及这些主机所监听的端口列表。
  • Swarm与每个Docker主机交互并确定他们的标记、健康状况以及资源使用量,并维护后端和它们元数据的列表。
  • 客户端通过它的网络端口(2375)与Swarm交互。与Swarm的交互方式与Docker交互的方式类似:创建、销毁、运行、依附(attach)并获得运行容器的日志以及其他相关内容。
  • 当一个命令发出给Swarm,Swarm会:
    • 基于提供的constraint标签、终端的健康程度以及调度算法来决定把命令发送到哪里。
    • 针对合适的Docker守护进程执行命令。
    • 返回结果的格式与Docker守护进程相同。

Swarm_Diagram_Omnigraffle.jpg

Swarm守护进程本身相当于是一个调度器和一个路由器。它实际上并没有运行容器,也就是说,如果Swarm服务停止了,它在终端Docker主机上已分配好的容器仍然是开启的。另外,由于它不处理任何网络路由(网络连接需要被直接发送到后端的Docker主机上),即使Swarm守护进程意外终止,运行的容器仍然可用。当Swarm从这样的崩溃中恢复,它依然能够查询终端以重建其元数据的列表。

由于Swarm的设计理念,在所有运行时的活动与Swarm服务交互的过程中,几乎与其他Docker守护进程的交互过程是相同的,比如:Docker 客户端、docker-py、docker-api gem等。然而,目前Ansible似乎在 TLS 模式 下不能与Swarm共同使用,但它似乎不仅仅影响Swarm的使用,也影响Docker守护程序本身的使用。

这是有关Docker Swarm系列博文的第一篇。由于缺少相关的技术细节,我表示抱歉,但在随后的文章中会包含一些架构、代码片段以及相关的实践 :) 请留意第二篇:Docker Swarm的配置选项与需求,即将推出。

所有这些研究工作得以顺利进行,都归功于我工作的公司:  Rally Software in Boulder, CO. 。每季度我们至少有一个骇客周,它使我们能够研究很棒的东西,像Docker Swarm。如果您想切入正题,直接开始Vagrant 例子,这里有一个repo,它是我在2014年Q1骇客周研究的成果: https://github.com/technolo-g/docker-swarm-demo

原文链接:Intro to Docker Swarm: Part 1 - Overview (翻译:田浩浩 审校:王哲)

===========================
译者介绍
田浩浩, 悉尼大学USYD 硕士研究生,目前在珠海从事Android应用开发工作。业余时间专注Docker的学习与研究,希望通过 DockerOne 把最新最优秀的译文贡献给大家,与读者一起畅游Docker的海洋。

原文发布时间为:2015-01-30
本文作者:田浩浩 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker Swarm入门(一)概观
目录
相关文章
|
14天前
|
存储 虚拟化 数据中心
|
14天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
23小时前
|
运维 监控 持续交付
构建高效自动化运维系统:基于Docker Swarm的策略与实践
【5月更文挑战第29天】 在现代企业IT基础架构管理中,自动化运维已成为提升效率、确保稳定性的关键因素。本文通过探讨基于Docker Swarm的集群管理和自动化部署策略,旨在为读者提供一个构建和维护高效自动化运维系统的全面视角。文章不仅涵盖了Docker Swarm的基础概念和关键特性,还深入分析了如何结合持续集成/持续部署(CI/CD)流程,实现无人工干预的服务部署和横向扩展。此外,文中也讨论了监控、日志和故障恢复等运维实践,以期帮助读者构建一个既可靠又灵活的自动化运维平台。
|
7天前
|
Shell iOS开发 Docker
|
14天前
|
Ubuntu 应用服务中间件 Shell
Docker入门
Docker入门
34 0
|
14天前
|
存储 Ubuntu Linux
Docker 从入门到实践:Docker介绍
Docker 从入门到实践:Docker介绍
|
14天前
|
监控 Docker 容器
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
【5月更文挑战第8天】本文探讨了Docker Swarm集群的扩展与缩容策略。集群扩展可提高性能、增强可用性和适应业务发展,可通过手动或自动方式实现。缩容则需考虑业务需求、资源利用率和节点状态,可手动或按策略执行。关键步骤包括添加/移除节点及任务迁移。注意数据同步、监控评估和测试验证。案例分析和总结强调了灵活管理对保持集群最佳状态的重要性。
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
|
14天前
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
|
14天前
|
负载均衡 安全 数据安全/隐私保护
【Docker专栏】Docker Swarm集群管理详解
【5月更文挑战第7天】Docker Swarm是Docker的原生集群管理工具,用于将多个Docker主机整合为虚拟主机。其主要特点是服务发现、负载均衡、自动恢复和扩展性。Swarm由Manager(负责管理与控制)和Worker(运行服务)节点组成。创建Swarm集群涉及初始化、添加Worker节点及查看集群状态。服务部署包括创建、更新、扩展和缩减。Swarm还支持滚动更新、健康检查、网络管理和安全加密。本文概述了Swarm的基本功能,鼓励读者进一步探索其高级特性。
【Docker专栏】Docker Swarm集群管理详解
|
14天前
|
应用服务中间件 持续交付 nginx
【Docker专栏】Docker入门指南:快速构建你的第一个容器
【5月更文挑战第7天】Docker 入门指南:容器化应用利器。了解 Docker 核心概念——镜像、容器和仓库。安装 Docker 后,运行官方 `hello-world` 验证安装,再尝试运行 `nginx` Web 服务器。通过端口映射访问容器内服务,学习管理容器命令。创建自定义镜像,编写 Dockerfile,实现 Python Web 应用容器化。Docker 助力高效开发与运维,探索更多自动化部署与微服务场景。
【Docker专栏】Docker入门指南:快速构建你的第一个容器