Docker Swarm集群部署lnmp+redis

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Docker Swarm集群部署lnmp+redis

博主使用的配置都在github上面, 大家拉下来即可使用

swarm简单介绍

我们先说一下docker集群之一的swarm集群, 先说一下集群这个东西, 它并不适用于任何项目, 他是为了解决架构中高性能的。将单节点的负载转移到多节点身上, 但是多节点中存在很多问题, 例如节点的状态、通信、调度、任务分配等等, 我们自己来弄的话十分麻烦、相当复杂, 但是使用了docker集群, 它已经帮我们做好了这些工作, 甚至做的更多。

swarmdocker-compose一样, 都是声明yml文件来创建应用服务

那么我们知道, 集群就是多台机器进行工作, 肯定要有masterworker,

来看看集群架构图

master, 多worker, 已经是比较比较复杂了。最少master得有一个,我们这边先弄一个,你们后期可以自己扩展

然后我们再说一下swarm里面的一些概念:

  • services
    swarm service是一个抽象的概念,它只是一个对运行在swarm集群上的应用服务,所期望状态的描述。它就像一个描述了下面物品的清单列表一样:
  1. 服务名称
  2. 使用哪个镜像来创建容器
  3. 要运行多少个副本
  4. 服务的容器要连接到哪个网络上
  5. 应该映射哪些端口
  • task
    Docker Swarm中,task是一个部署的最小单元,task与容器是一对一的关系。
  • stack
    stack是描述一系列相关services的集合。我们通过在一个YAML文件中来定义一个stack。简而言之就是一个应用 包括了什么数据库 框架等,一个服务 = 多个容器

swarm基本操作命令

  • 创建应用
docker stack deploy -c docker-compose.yml laravel
 # -c 指定yml文件 后面跟的是应用名
  • 删除应用
docker stack rm laravel
  • 查看应用
docker stack ps laravel
  • 查看所有服务
docker service ls

小试牛刀-搭建lnmp

因为博主这边docker18.09, 所以我编写version为最新版3.7yml文件, 大家可以对应Docker Engine来编写对应versionyml

  • docker-compose.yml
version: "3.7"   # 声明yml文件版本
services: 
  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=1234567
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=1234567
# redis服务被限制为使用不超过50M的内存和0.50(不超过单个内核的50%)可用处理时间(CPU),并且具有保留20M的内存和0.25CPU时间(始终可用)。
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
# 构建一个镜像(利用docker-compose执行此文件);如果在集群模式下部署,将忽略此项,docker stack仅仅接受预先构建好的镜像。 
  php-fpm:
    image: wearemobedia/php-fpm:latest
    volumes:
       - ./www:/application
    working_dir: /application  
    environment: 
      - APP_ENV=local
      - APP_DEBUG=true
      - APP_TIMEZONE=UTC
      - DB_CONNECTION=mysql # 设置为服务名 别搞错了 重点
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_DATABASE=test
      - DB_USERNAME=test
      - DB_PASSWORD=1234567
      - CACHE_DRIVER=redis
      - QUEUE_DRIVER=redis
      - REDIS_HOST=redis
      - REDIS_PORT=6379
    deploy:
      mode: replicated # 默认
      replicas: 1 # 副本数量一个
  webserver:
      image: nginx:alpine
      labels: # 指定标签
        com.example.description: "This label will appear on all containers for the web service"
      volumes:
        - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
        - "80:80"
      depends_on: # 依赖于mysql redis
        - php-fpm
  visualizer: # 可视化的东西
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      restart_policy:  # 配置是否以及如何在退出容器时重新启动容器
        condition: on-failure # 条件
        delay: 1s # 延时
        max_attempts: 3 # 重新启动次数
        window: 120s # 决定重新启动是否成功之前要等待的时间
      placement:
        constraints: [node.role == manager]

进入从github上拉下来的仓库,利用编写好的yml创建应用

sudo docker stack deploy -c docker-compose.yml laravel

查看一下服务咋样了

都启动完了, 可以查看访问每个节点的ip了, 都没有问题,数据表没有建立,所以抛的异常, redis已经OK

Swarm 集群管理节点新建该文件,其中的 visualizer 服务提供一个可视化页面(就是yml里面声明的那个visualizer),我们可以从浏览器中很直观的查看集群中各个服务的运行节点。来看看效果

结束语

swarm集群功能挺强大,博主不再做过多介绍,资料都在github上, 大家拉取下来看看即可。希望大家多看看文档,实践,下次我们说说k8s

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5天前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
13 6
|
5天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
10 5
|
5天前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
9 5
|
4天前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
随着容器技术的快速发展,容器编排工具成为了现代软件开发和运维的重要环节。在众多容器编排工具中,Kubernetes和Docker Swarm无疑是最受欢迎的两个。本文将从技术特性、易用性和社区支持三个方面,对Kubernetes和Docker Swarm进行比较,以帮助您选择更适合您需求的容器编排工具。
17 3
|
6天前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
13 4
|
6天前
|
Docker 容器
|
6天前
|
应用服务中间件 nginx Docker
docker swarm创建覆盖网络
【10月更文挑战第14天】
11 3
|
6天前
|
数据安全/隐私保护 Docker 容器
docker swarm创建网络
【10月更文挑战第15天】
7 1
|
6天前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
9 2
|
2天前
|
负载均衡 安全 调度
深入调查研究Docker Swarm
【10月更文挑战第19天】
8 0