Docker 集群

Docker Compose

简介

DockerFile build run 手动操作,单个容器!

如果是微服务,100个微服务!各种依赖关系

  • Docker Compose 可以轻松高效的管理容器,定义运行多个容器 == 批量容器编排

官方文档 Overview of docker-compose CLI | Docker Documentation

步骤:
1、DockerFile 保证我们的项目在任何地方可以运行
2、service 什么是服务;docker-compose.yml 文件怎么写?
3、启动项目   up / down

安装 Dcocker-Compoes

Compose 是 Docker 官方的开源项目,需要安装!

Dockerfile 让程序运行在任何地方,web 服务,redis,mysql,nginx…多个容器

docker-compose.yml

version: "3.9"  # optional since v1.27.0
services:web:                                  # 再启动 webbuild: .ports:- "8000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redis                         # 先启动 redis
volumes:logvolume01: {}

docker-compose up 100 个微服务,一建上线

Compose 重要概念

  • 服务 service (web、redis、mysql …)

  • 项目 project = 一组关联的容器 = 对外的业务单元

安装

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
# 官方镜像
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

体验

应用 app.py
import time
import redis
from flask import Flaskapp = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')
def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.\n'.format(count)# requirements.txt 文件
flask
redis
Dockerfile 应用打包镜像
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
**Docker compose yaml **
  • 定义整个服务,需要的环境 web redis) , 完整的上线服务
version: "3.9"
services:web:build: .ports:- "8000:5000"redis:image: "redis:alpine"
启动 compose 文件
docker compose up .              # 启动
docker compose down              # 停止
# 流程
1、创建网络
2、执行 docker-compose.yml
3、启动服务
⠿ Network composetest_default    Created
⠿ Container composetest-redis-1  Created
⠿ Container composetest-web-1    Created

yaml 文件规则

  • docker-compose.yaml 是核心
# 语法 - 3 层version: ''              # 版本
services:               # 服务服务1: web# 服务配置images:build:network:...服务2: redis...服务3: mysql...服务4: ...# 其他配置    网络、卷、全局规则
volumes:
networks:
configs:

示例

Quickstart: Compose and WordPress | Docker Documentation

version: "3.9"
services:db:                                            # db 服务image: mysql:5.7volumes:- db_data:/var/lib/mysql                   # 挂载到本地 db_data 目录下restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:                               # WordPress 服务depends_on:                               # depends_on   解决服务依赖,启动次序- dbimage: wordpress:latestvolumes:- wordpress_data:/var/www/html            # 挂载到本地的 WordPress_data 目录下ports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpress
volumes:                                          # 全局配置db_data: {}wordpress_data: {}

Docker Swarm

集群的方式部署,环境需要 4 台 2v4g 的云服务器

Swarm mode overview | Docker Documentation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CeoNfhcI-1651712847192)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220428215748278.png)]

搭建集群

  • 四台服务器搭建好 docker 环境后启动 docker !
docker swarm --help
# 查看 swarm 命令
docker swarm init --advertise-addr 172.16.0.4
# 初始化一个节点,连接到节点内网地址-eth0
docker swarm join --token SWMTKN-1-6a8k9vzo6vlnlq6wrzeolrcznkiwfxz151g4bjo2t8g8dla27u-by93wkc6oka6nxbic09rxz6yx 172.16.0.4:2377
# 得到命令 == 其他节点 join 加入进来
docker swarm join-token manager
docker swarm join-token worker
# 主节点,获取管理员的令牌,生成后其他节点加入
docker node ls
# 其他节点加入后,可以查看
docker swarm leave
# 离开集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXr7rpIf-1651712847193)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220428221303675.png)]

Raft 协议

  • 双主双从:假设一个节点挂了,其他节点是否可用?

Raft 协议:保证大多数节点存活才可以用,至少 > 一台,集群模式至少 > 三台,高可用

集群弹性扩缩容

告别 docker run

docker-compose up 启动一个项目,单机版!

集群: swarm docker service 容器==》服务==》副本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DttHvuAr-1651712847193)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220428223126272.png)]

灰度发布:金丝雀发布

service 启动,具有扩缩容,滚动更新

docker service --help
# 查看创建命令
docker service create -p 8888:80 --name mynginx nginx
# 启动一个服务
docker service ps mynginx
# 查看启动的服务
docker service ls
# 查看 service
docker service rm mynginx
# 删除 service

动态扩缩容

docker service update --relipcas 3 mynginx
# 创建 三个 nginx 副本
# --relipcas number   可以实现动态扩缩容  number 可以根据实际情况填写
docker service create --replicas 2 --network host -p 8081:8081 --name nginx nginx
# 创建 2 副本的nginx
docker service create --mode
# --mode 默认使用副本运行

Docker Stack

  • Docker Stack 部署,集群部署
docker compose up -d wordpress.yaml
# 单机
docker stack deploy  wordpress.yaml
# 集群

Docker Secret

  • 安全,配置密码,证书
docker secret create

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RsoHm8ph-1651712847194)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220428231054415.png)]

Dcoekr Config

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mylfTato-1651712847194)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220428231218415.png)]

Docker 进阶,Docker 集群部署相关推荐

  1. docker进行ElasticSearch集群部署

    环境: (1)Centos7 (2)JDK1.8 (3)docker (4)ElasticSearch7.6 建议: (1)服务器至少3台,否则没必要集群部署 (2)java后台推荐直接连接客户端节点 ...

  2. Docker 【Nginx集群部署】

    目录 1. nginx前置操作 2. 自定义容器 3. nginx常用命令 4. Error 4.1 502(无响应网关/代理) 4.2 404(找不到对应页面) 4.3 400(异常请求) 4.4  ...

  3. Docker中Swarm集群部署

    资源列表 全部安装好docker12版本以上 节点设置 ip     manager 172.25.11.250     slave1 172.25.11.1     slave2 172.25.11 ...

  4. K8S+Jenkins+Harbor+Docker+gitlab集群部署

    K8S+Jenkins+Harbor+Docker+gitlab服务器集群部署 所需资源下载地址 将此文章写给我最心爱的女孩 目录 K8S+Jenkins+Harbor+Docker+gitlab服务 ...

  5. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

    背景 [注意]: 鄙人认为本篇适合做入门测试/学习之用,选择的 "单机多节点配置",后面再整理 "多机配置"文章. 近期正突击学习数据库知识 想着对 PXC 集 ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  7. docker集群部署:第3部分:服务

    docker集群部署:第3部分:服务 介绍 在第3部分中,我们将扩展应用程序并实现负载平衡. 关于服务 在分布式应用程序中,应用程序的不同部分被称为"服务".例如,一个视频共享站点 ...

  8. swarm部署mysql_「实战篇」开源项目docker化运维部署-借助dockerSwarm搭建集群部署(九)...

    为了让学习的知识融汇贯通,目前是把所有的集群都放在了一个虚拟机上,如果这个虚拟机宕机了怎么办?俗话说鸡蛋不要都放在一个篮子里面,把各种集群的节点拆分部署,应该把各种节点分机器部署,多个宿主机,这样部署 ...

  9. Docker Swarm集群部署

    Docker Swarm集群部署 1 方案介绍 1.1 概述 1.2 软件包 2 Swarm集群搭建 2.1 IP规划 2.2 基础配置 2.2.1 关闭SELinux 2.2.2 关闭防火墙或开放需 ...

最新文章

  1. 吴恩达老师深度学习视频课笔记:深度卷积网络
  2. 全中了!接手同事项目时最崩溃的事 | 每日趣闻
  3. Android移动开发之【Android实战项目】DAY11-App实现截图分享qq,微信
  4. STM32 基础系列教程 37 - Lwip_igmp
  5. vue12 循环添加重复数据
  6. c++简单程序设计-5
  7. 在linux程序里面,知道一个函数地址,改函数是属于某个动态库的,怎么样得到这个动态库的全【转】...
  8. 企业数字化转型过程中,如何真正把数据用起来、用的对、用的好?
  9. Windows SharePoint Services To Be Open Source With 2007 Microsoft Office Release
  10. 插画素材 | 圣诞节设计离不了!
  11. R语言中读取xlsx文件的方法
  12. 通用线程 -- sed 实例
  13. table固定表头行及列,其中行包含合并单元格
  14. 就个人开发而言,Ubuntu比Debian更适合
  15. 四、docker-compose的编程模版
  16. logisim的安装
  17. 如何下载高清卫星地图
  18. 远程桌面同步本地计算机,微软更新远程桌面应用现在终于可以在本地和远程计算机上复制文件...
  19. error: X11/extensions/XInput.h: No such file or directory(转)
  20. Python 学习笔记 列表 for 循环 xxx XXX

热门文章

  1. 可以使用Adobe缪斯使用什么种类的项目为
  2. php获取公众号_php判断用户是否关注微信公众号
  3. QT开发实践之简单的图像视频处理软件
  4. 微分方程的数值解法——常微分方程——差分法(1)
  5. NYIST20级排位赛第一场 复盘
  6. 新加坡国立大学NUS ECE学院招收数名博士
  7. pubg国服服务器维修怎么解决 ios,刺激战场ios更新不了解决方法_绝地求生刺激战场ios更新不了怎么办_4月25日刺激战场ios更新后进不去_9号资讯...
  8. 计算机属性打开自动关上,win10移动热点自动关闭怎么办 win10移动热点自动关闭解决方法...
  9. 21天学通HTML+CSS+JavaScript Web开发(第7版) 中文完整pdf扫描版
  10. Windows磁盘管理中的压缩卷操作