Docker Swarm集群部署lnmp+redis
时间:2022-07-22
本文章向大家介绍Docker Swarm集群部署lnmp+redis,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
swarm简单介绍
我们先说一下docker
集群之一的swarm集群
, 先说一下集群这个东西, 它并不适用于任何项目, 他是为了解决架构中高性能的。将单节点的负载转移到多节点身上, 但是多节点中存在很多问题, 例如节点的状态、通信、调度、任务分配等等, 我们自己来弄的话十分麻烦、相当复杂, 但是使用了docker集群
, 它已经帮我们做好了这些工作, 甚至做的更多。
swarm
和docker-compose
一样, 都是声明yml
文件来创建应用服务
那么我们知道, 集群就是多台机器进行工作, 肯定要有master
和worker
,
来看看集群架构图
多master
, 多worker
, 已经是比较比较复杂了。最少master
得有一个,我们这边先弄一个,你们后期可以自己扩展
然后我们再说一下swarm
里面的一些概念:
- services
swarm service
是一个抽象的概念,它只是一个对运行在swarm
集群上的应用服务,所期望状态的描述。它就像一个描述了下面物品的清单列表一样:
- 服务名称
- 使用哪个镜像来创建容器
- 要运行多少个副本
- 服务的容器要连接到哪个网络上
- 应该映射哪些端口
- 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
因为博主这边docker
是18.09
, 所以我编写version
为最新版3.7
的yml
文件, 大家可以对应Docker Engine
来编写对应version
的yml
- 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
- 【Python环境】Python分类现实世界的数据
- Android基础总结(7)——异步消息处理
- No.008 String to Integer (atoi)
- No.007 Reverse Integer
- No.006 ZigZag Conversion
- No.005 Longest Palindromic Substring
- Android基础总结(6)——内容提供器
- No.004 Median of Two Sorted Arrays
- No.001 Two Sum
- No.002 Add Two Numbers
- 【Python环境】探索 Python、机器学习和 NLTK 库
- 【机器学习】机器学习之组合算法总结
- IE 11浏览器0day漏洞(CVE-2015-2425)UAF分析
- 【Python环境】Python可视化工具综述
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法