Docker Swarm集群部署lnmp+redis

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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
目录
相关文章
|
30天前
|
NoSQL Redis Docker
Docker中Redis数据迁移到本地
Docker中Redis数据迁移到本地
19 1
|
30天前
|
NoSQL 关系型数据库 MySQL
安装Docker&镜像容器操作&使用Docker安装部署MySQL,Redis,RabbitMQ,Nacos,Seata,Minio
安装Docker&镜像容器操作&使用Docker安装部署MySQL,Redis,RabbitMQ,Nacos,Seata,Minio
392 1
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
54 0
|
1月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
56 0
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
44 0
|
1月前
|
负载均衡 算法 应用服务中间件
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
113 0
|
1月前
|
负载均衡 容灾 安全
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/5)
69 2
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
221 0
|
7月前
|
关系型数据库 MySQL 应用服务中间件
手动部署LNMP环境(Alibaba Cloud Linux 2)
本场景带您体验如何在Alibaba Cloud Linux 2.1903 LTS 64位操作系统的云服务器上搭建LNMP环境。
203 0
|
4月前
|
关系型数据库 应用服务中间件 nginx
基于Docker的LNMP环境微服务搭建
基于Docker的LNMP环境微服务搭建
基于Docker的LNMP环境微服务搭建