`

【赵强老师】Docker Swarm实现服务的滚动更新

阅读更多

 

一、什么是Docker Swarm?

 

Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

 

二、Docker Swarm的体系架构

 

这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源。管理者的管理对象不是服务器层面而是集群层面的,也就是说通过Manager,我们只能笼统地向集群发出指令而不能具体到某台具体的服务器上要干什么(这也是Swarm的根本所在)。至于具体的管理实现方式,Manager向外暴露了一个HTTP接口,外部用户通过这个HTTP接口来实现对集群的管理。对于稍微大一点的集群,最好是拿出一台实际的服务器作为专门的管理者,作为学习而言,也可以把管理者和被管理者放在一台服务器上。

 

三、Docker Swarm服务的滚动更新


Docker Swarm可以实现服务平滑升级,即服务不停机更新,客户端无感知。下面我们通过一个具体的例子,来为大家演示。这里我们将部署一个基于nginx的web应用程序服务,部署在node节点上。我们将创建同一个应用的两个版本:version 1 version 2

  • 创建一个Dockerfile,并使用docker build进行编译。

 

FROM nginx
RUN echo '<h1>Swarm:Version 1 <h1>' > /usr/share/nginx/html/index.html
 

 

注意:为了使得Swarm集群中的每个节点都能访问到镜像,我们这里把生成的镜像上传到自己的镜像仓库中。

 

docker login
docker build -t collenzhao/mynginx:v1 .
docker push collenzhao/mynginx:v1 

 

  • 创建Swarm的服务,即:通过镜像启动容器
docker service create -p 7788:80 --replicas 3 --name myswarmtest collenzhao/mynginx:v1

 

  • 通过docker service ls查看部署的服务。


  • 通过docker service ps myswarmtest查看部署服务的详细信息


  • 效果如下图所示


  • 更新之前的Dockerfile,注意版本号变为:2

 

FROM nginx
RUN echo '<h1>Swarm:Version 2 <h1>' > /usr/share/nginx/html/index.html

 

  • 使用docker build进行编译
docker build -t collenzhao/mynginx:v2 .
 
  • 使用docker push上传到docker hub
docker push collenzhao/mynginx:v2

 

  • 更新之前在Swarm部署的服务,版本号变成了2
docker service update --image collenzhao/mynginx:v2 myswarmtest

 

  • 效果如下如所示

分享到:
评论

相关推荐

    传智播客 赵强 Oracle课件

    赵强老师在传智播客的Oracle课程是专为IT专业人士和对数据库技术感兴趣的学员设计的一系列教学资料,旨在深入浅出地讲解Oracle的核心概念、功能以及实际操作技巧。 在赵强老师的课程中,你可以学到以下几个重要的...

    赵强老师的Oracle课件

    想要好好地学习Oracle数据库的朋友呀,你错过了她就太不值得了。里面有好多的Oracle操作命令可能你都没接触过吧。好了,话不多多说。坚信资料不错!你,值得拥有!OK.还有,之所有要你2分打赏,是我给了你这么好的...

    精通JSP编程 作者赵强 编

    精通JSP编程 作者赵强 编 12-18节

    精通JSP编程 作者赵强

    《精通JSP编程》是赵强先生的一部深入解析JSP技术的专业著作,该书针对JSP编程进行了全面且深入的讲解,旨在帮助读者掌握JSP的核心概念和技术,提升Web应用开发能力。根据提供的文件名列表,我们可以推测书籍的章节...

    [1120][赵强精通JSP编程][37M]

    根据提供的文件信息,我们可以推断出这是一份与Java Server Pages (JSP)相关的学习资料介绍,特别是关于赵强编写的《精通JSP编程》这本书的相关信息。下面将基于这个理解来生成相关知识点。 ### 一、JSP基础概念 ...

    Oracle学习笔记(传智播客 赵强)

    5. **多表查询与子查询的选择**:当两者都能实现需求时,尽量选择多表查询,因为它只需要对数据库进行一次操作,效率通常更高。 6. **处理NULL值**:在Oracle中,NULL表示无效、未指定或未知的值,它不等于空格或0...

    day2013-0110-webLogic配置和集群(赵强).zip

    5. 安全性:设置用户角色、权限,实现基于角色的访问控制(RBAC),并可以集成LDAP(Lightweight Directory Access Protocol)进行集中身份验证。 总结,"day2013-0110-webLogic配置和集群(赵强)"这个资料包涵盖了...

    Oracle数据库赵强视频教程【3天】

    教程名称:Oracle 数据库赵强视频教程【3天】教程目录:【】Oracle安装与管理、SQL语句(赵强)【】Orcale存储过程jdbc与Orcale大文本操作等(赵强)【】SQL简单查询触发器视图(赵强)  资源太大,传百度网盘了,链接在...

    10天掌握MongoDB

    MongoDB是一种面向文档的NoSQL数据库,它采用了类似JSON的格式存储数据,提供了丰富的查询功能和文档更新操作。它的特点在于它的无模式设计,这意味着用户可以在不需要改变数据库结构的前提下存储任何类型的数据。...

    信息存储技术的发展赵强.doc

    此外,大规模集群存储如Google的存储系统,以及对等存储(P2P)网络,利用分布式存储的优势,提供大规模、低成本的数据服务。 随着硬件技术的发展,遵循摩尔定律、贝尔定律、吉尔德定律等,存储密度和带宽持续提升...

    从零开始oracle

    **数据操纵语言(DML)**:用于插入、更新和删除数据的语言。 **数据库管理程序**:负责执行上述操作,并确保数据的一致性和完整性。 #### 目前主流的两类关系型数据库系统 ##### 1.2.1 桌面关系型数据库系统 这...

    LoadRunner性能测试巧匠训练营-完整版(带目录)-赵强邹伟伟

    《LoadRunner性能测试巧匠训练营》是一本深入讲解LoadRunner性能测试的教材,由赵强和邹伟伟两位专家共同编著。该资源提供的是完整版,且无需密码即可解压阅读,对于想要学习和提升LoadRunner性能测试技能的人来说,...

    java代码-46 赖赵强

    【标题】"java代码-46 赖赵强"所指的可能是一个关于Java编程的项目或示例,由开发者赖赵强创建。在这个项目中,他可能分享了一段特定的Java代码,用于解决某种问题或者实现一个功能。这个标题暗示了这是一个与Java...

    赵强_微信购物首页改版用户调研1

    定性研究发现,这些问题可能源于入口重复、促销信息分散、页面设计过长和商品更新速度慢等因素。例如,用户反映页面布局混乱,找不到方向,以及由于页面过长导致的浏览困难。 不同平台用户痛点的比较显示,尽管各...

    游戏运营策划手册.pdf

    10. **版本迭代**:持续更新游戏内容,修复问题,以适应用户需求变化和市场竞争。合理的版本规划和迭代节奏对保持用户兴趣有积极作用。 11. **客服支持**:提供优质的客户服务,解决玩家在游戏中遇到的问题,提升...

    oracle内部培训教材(来自传智播客学员)

    重做日志文件用于记录对数据库的修改,以实现事务的回滚和恢复。 三、SQL与PL/SQL SQL是用于操作Oracle数据库的语言,包括DML(数据操纵语言)、DDL(数据定义语言)、DCL(数据控制语言)和TCL(事务控制语言)。...

Global site tag (gtag.js) - Google Analytics