一、前言

随着互联网快速发展,以及微服务架构的流行,服务器的压力越来越大。上一篇介绍的 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. weblogic 与项目jar冲突解决方案 ITsm部署

    部署时出现找不到类itims*****IMOType 时删除   2个fvsd-res-ws-1.0.ja,itims-fvsd-res-sync.jar jar包 里面的DeviceInfoPort ...

  2. MySQL--更新自增列的潜在风险

    ##=====================================================================##测试环境:MySQL版本:MySQL 5.7.19复制 ...

  3. 【转】vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的

    原文地址https://www.cnblogs.com/lxwphp/p/7738356.html (一)初级个性化配置你的vim 1.vim是什么? vim是Vi IMproved,是编辑器Vi的一 ...

  4. 【安全开发】浅谈JSP安全开发之XSS

    前言     大家好,好男人就是我,我就是好男人,我就是-0nise.在各大漏洞举报平台,我们时常会看到XSS漏洞.那么问题来了,为何会出现这种漏洞?出现这种漏洞应该怎么修复?目录     1.XSS ...

  5. Redis 配置内容总结

    命令 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 你可以通过 CONFIG 命令查看或设置配置项. (1)config get config_setting_ ...

  6. 画线动画——SVG版和纯CSS版

    概述 我们常常在网站中看到一些画线的动画效果,非常炫酷,大多数这种画线动画效果是通过SVG实现的,也有不少是用纯css实现的,下面我总结了一下这2种方法,供以后开发时参考,相信对其他人也有用. 参考资 ...

  7. Kali学习笔记32:Maltego、Exiftool

    有段时间没学Kali里面的工具了 以前做信息收集的时候呢,忘记了两个很强大的工具:Maltego.Exiftool 先来看看Maltego: 这个工具不仅可以方便地收集DNS信息等等,强大地地方还在于 ...

  8. 一款好用 mongodb 可视化工具

    最近想自己搭建一个个人博客,所以学了下mongodb,mongodb是用命令行输入的,有些人可能不太习惯,我自己找了下mongodb的一些可视化工具,一开始安装的是mongoVUE,mongoVUE页 ...

  9. 解决ios关于:ERROR Internal navigation rejected - <allow-navigation> not set for url='about:blank'

    在mac上,cordova打包ionic项目为苹果手机app出现 这个问题:ERROR Internal navigation rejected - <allow-navigation> ...

  10. linux设置打开文件句柄数

    介绍 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默认是 ...