前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 系列六(Docker Swarm 项目).

Docker 系列六(Docker Swarm 项目).

作者头像
JMCui
发布2018-08-21 17:35:09
4640
发布2018-08-21 17:35:09
举报
文章被收录于专栏:JMCuiJMCui

一、前言

? ? 随着互联网快速发展,以及微服务架构的流行,服务器的压力越来越大。上一篇介绍的 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、创建管理节点

代码语言:javascript
复制
docker swarm init

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

? ? 2、创建工作节点

代码语言:javascript
复制
docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

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

? ? 3、查看集群

代码语言:javascript
复制
#管理节点使用 
docker node ls 

四、部署升级服务

? ? 1、部署服务

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

代码语言:javascript
复制
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine

 --replicas 3 为该镜像创建三个副本集,管理节点会将副本实例均匀部署在集群中的 Docker 主机上
 --name 服务名

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

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

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

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

代码语言:javascript
复制
docker service scale nginx=[num]

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

? ? 2、升级服务

代码语言:javascript
复制
docker service update --image nginx:1.13.12-alpine nginx

  --image nginx:1.13.12-alpine 镜像名
  nginx 需要升级的服务名

? ? 3、回退服务

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

代码语言:javascript
复制
docker service rollback [服务名]

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

? ? 1、使用 secret 管理敏感数据

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

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

代码语言:javascript
复制
printf "mysqlPassword" | docker secret create mysql_password -

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

创建 MySQL 服务:

代码语言:javascript
复制
docker service create \
     --name mysql \
     --replicas 1 \
     --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

代码语言:javascript
复制
docker config create redis.conf redis.conf

? ? 使用 docker config ls 命令来查看 config

? ? 利用配置文件创建服务:

代码语言:javascript
复制
#如果没有在 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/

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、基本概念
  • 三、创建 Swarm 集群
    • ? ? 1、创建管理节点
      • ? ? 2、创建工作节点
        • ? ? 3、查看集群
        • 四、部署升级服务
          • ? ? 1、部署服务
            • ? ? 2、升级服务
              • ? ? 3、回退服务
              • 五、管理敏感数据和配置信息
                • ? ? 1、使用 secret 管理敏感数据
                  • 2、使用 config 管理配置信息
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com