一、前言

随着互联网快速发展,以及微服务架构的流行,服务器的压力越来越大。上一篇介绍的 Docker Compose 项目,可以将多个容器捏合在一起,实现容器间的通信,比如 Web 项目对 DB、Cache 的依赖,以及微服务之间的通信等。但这还是远远不够的,Docker Compose 仅仅局限在一个 Docker 主机上,服务器的压力仍然没有得到解决,怎么办呢?集群呗!Docker Swarm 可以将多个 Docker 主机 集群成一个大型的虚拟 Docker 主机,然后在上面部署服务,当服务器压力上来时,不断的往 Swarm 集群中添加 Docker 主机就行了!更重要的,不必像传统发布那样,在每台服务器上都运行一遍分布式项目,大大节约了流程和工作量。

由于没有多台 Docker 主机给我做集群操作,以及 Centos 7 上 安装虚拟机各种报错,以下多为学习笔记。

二、基本概念

Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具,提供 Docker 容器集群服务。

Swarm 集群中每台 Docker 主机称为一个节点。其中主动初始化一个 Swarm 集群的节点称为管理节点,加入一个Swarm 集群的节点称为工作节点。工作节点是任务执行节点,管理节点将任务下发至工作节点执行。管理节点默认也作为工作节点。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader。

任务(Task):是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。

服务(Services):是指一组任务的集合,服务定义了任务的属性,主要有两种模式(通过 docker service create 的 --mode 参数指定):

-- replicated services  按照一定规则在各个工作节点上运行指定个数的任务。
-- global services  每个工作节点上运行一个任务

三、创建 Swarm 集群

1、创建管理节点

docker swarm init

这样就初始化了一个 Swarm 集群,执行该命令的节点自动成为管理节点,命令的结果会给出提示表示如何加入该节点,如下。

2、创建工作节点

docker swarm join \
--token SWMTKN--49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
192.168.99.100:

表示该 Docker 主机作为工作节点,加入到 Swarm 集群中。

3、查看集群

#管理节点使用
docker node ls

四、部署升级服务

1、部署服务

现在我们将多个 Docker 主机虚拟成一个大型的虚拟主机了,我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。

docker service create --replicas  -p : --name nginx nginx:1.13.-alpine
--replicas 为该镜像创建三个副本集,管理节点会将副本实例均匀部署在集群中的 Docker 主机上
--name 服务名

使用 docker service ls 来查看当前 Swarm 集群中运行的服务。

使用 docker service ps [服务名] 来查看某个服务的详情。

使用 docker service logs [服务名] 来查看某个服务的日志。

使用 docker service scale 对一个服务运行的容器数量进行伸缩,根据业务的压力自由伸缩容器的数量:

docker service scale nginx=[num]

使用 docker service rm 来从 Swarm 集群中移除某个服务。

2、升级服务

docker service update --image nginx:1.13.-alpine nginx
--image nginx:1.13.-alpine 镜像名
nginx 需要升级的服务名

3、回退服务

如果新部署的服务出现问题,我们需要快速的将服务回退到前一个版本!

docker service rollback [服务名]

五、管理敏感数据和配置信息

1、使用 secret 管理敏感数据

在动态的、大规模的分布式集群上,管理和分发密码、证书 等敏感信息是极其重要的工作。我们可以用 docker secret 命令来管理敏感信息,并允许在多个Docker 容器实例之间共享访问制定的敏感数据。

secret创建后其内容是不能更新的,只能删除掉旧的secret然后再重新创建,并且不能删除正在被使用的secret。

printf 'mysqlPassword' | docker secret create mysql_password -

使用 docker secret ls 命令来查看 secret 。

创建 MySQL 服务:

docker service create \
--name mysql \
--replicas \
--network mysql_private \
--mount type=volume,source=mydata,destination=/var/lib/mysql \
--secret source=mysql_root_password,target=mysql_root_password \
--secret source=mysql_password,target=mysql_password \
-e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \
-e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password" \
-e MYSQL_USER="wordpress" \
-e MYSQL_DATABASE="wordpress" \
mysql:latest

如果没有在 target 中显式的指定路径时,secret 默认通过 tmpfs 文件系统挂载到容器的 /run/secrets 目录中。

secret 也可以在 Docker Compose 中使用。

2、使用 config 管理配置信息

Docker 新增了 docker config 子命令来管理集群中的配置信息,用户无需将配置文件放入镜像或挂载到容器中就可实现对服务的配置。

创建 config

docker config create redis.conf redis.conf

使用 docker config ls 命令来查看 config

利用配置文件创建服务:

#如果没有在 target 中显式的指定路径时,默认的 redis.conf 以 tmpfs 文件系统挂载到容器的 /config.conf
docker service create \
--name redis \
# --config source=redis.conf,target=/etc/redis.conf \
--config redis.conf \
-p 6379:6380 \
redis:latest \
redis-server /redis.conf

config 仅能在 Swarm 集群中使用。

参考资料:https://yeasy.gitbooks.io/docker_practice/swarm/

Docker 系列六(Docker Swarm 项目).的更多相关文章

  1. Docker系列六: 使用Docker官方公共仓库和私有仓库

    使用公共仓库 登陆官方网站:https://hub.docker.com/   注册账号和密码 在Docker hub中创建一个资源,  create  respositories,   创建后会提示 ...

  2. Docker系列03—Docker 基础入门

    本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...

  3. Docker系列05—Docker 存储卷详解

    本文收录在容器技术学习系列文章总目录 1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加面成,启动容器时,docker会加载只读镜像层并在镜 ...

  4. Docker系列之Docker镜像(读书笔记)

    一.基本概念 Docker包括三个基本概念镜像.容器.仓库. Docker镜像:就是一个只读的模板.例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或其他应用程序.用 ...

  5. Docker系列01—Docker 基础入门

    一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...

  6. docker 系列之 docker安装

    Docker支持以下的CentOS版本 CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker. ...

  7. Docker系列二: docker常用命令总结

    https://docs.docker.com/reference/  官方命令总结地址 容器生命周期管理 1.docker run 创建一个新的容器并运行一个命令 docker run [optio ...

  8. Docker系列一: docker简介及基本环境安装

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  9. Docker系列03—Docker 存储卷

    一.存储卷介绍 1.1 背景 Docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部加一个读写层: 如果运行的容器修改了 ...

随机推荐

  1. Visual Studio 2017 集成Crystal Report为ASP.NET MVC呈现报表

    最近项目需要实现报表功能,平衡各方面的因素,还是使用Crystal Report(水晶报表) 下载较新版本: http://downloads.businessobjects.com/akdlm/cr ...

  2. MySQL索引优化看这篇文章就够了!

    阅读本文大概需要 5 分钟. 来源:cnblogs.com/songwenjie/p/9410009.html 本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引 ...

  3. 4 年前端狗,2 年 CTO

    阅读本文大概需要 14 分钟. 本文系作者:『Scott』原创发布于慕课网. 我,Scott,一家创业公司的 CTO. 从业6年却很少写文章,近一年来接触了几十个刚毕业的前端新人,也面试了100多个前 ...

  4. docker 简单介绍及基础命令运用

    一.什么是docker? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. 简单的来讲Docker实际上就是一个大型容器.容器是完全使用沙箱机制,相互之间不 ...

  5. 【app】自动化必备之adb使用

    1.1 Adb介绍 adb(android debug bridge)是android sdk自带的一个工具 Adb是用来连接android设备和PC端的桥梁,通过adb工具,用户可以在PC端对手机进 ...

  6. Merge branch 'master' of xxx error

    Merge branch 'master' of xxx Please enter a commit message to explain why this merge is necessary,es ...

  7. mybatis框架(3)---SqlMapConfig.xml解析

    SqlMapConfig.xml SqlMapConfig.xml是Mybatis的全局配置参数,关于他的具体用的有专门的MyBatis - API文档,这里面讲的非常清楚,所以我这里就挑几个讲下: ...

  8. mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)

    1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...

  9. MFC原理第五讲.消息映射.以及如何添加消息

    MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...

  10. PHP接口的思考

    其中就有一个SPL(标准PHP库)的尝试,SPL中实现一些接口,其中最主要的就是Iterator迭代器接口,通过实现这个接口,就能使对象能够用于foreach结构,从而在使用形式上比较统一.比如SPL ...