当前位置: 代码迷 >> 综合 >> Docker进阶篇教程,docker-compose, docker swarm, 弹性、扩缩容
  详细解决方案

Docker进阶篇教程,docker-compose, docker swarm, 弹性、扩缩容

热度:19   发布时间:2023-11-24 02:11:25.0

docker进阶篇目录

    • 1. 简介
    • 2. 安装Compose
    • 3. compose初体验
      • 第 1 步:设置
      • 第 2 步:创建一个 Dockerfile
      • 第 3 步:在 Compose 文件中定义服务
      • 第 4 步: Build and run your app with Compose
      • 查看服务
      • 查看镜像
      • 服务命名规则
      • docker network ls 查看网络
      • docker-compose down 停掉服务
      • docker-compose 小结
      • Docker 小结
    • 4. compose yaml 编写规则
    • 5. 开源博客项目 wordpress快速运行
    • 6. docker-compose启动微服务项目实战
      • 6.1 创建springboot项目
      • 6.2 编写dockerfile
      • 6.3 编写docker-compose.yml
      • 6.4 项目打包
      • 6.5 上传所需文件至服务器
      • 6.6 docker-compose一键启动
      • 6.7 总结
    • 7. Docker Swarm
      • 7.1 购买服务器
      • 7.2 4台机器安装docker
      • 7.3 工作模式
      • 7.4 搭建集群
    • 8. Raft协议
      • 8.1 双主双从宕机测试
      • 8.2 节点离开集群
      • 8.3 三主测试
    • 9. 体会弹性、扩缩容

1. 简介

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 安装Compose

官网地址:Install Compose on Linux systems
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. compose初体验

官网地址: Get started with Docker Compose
在这里插入图片描述

第 1 步:设置

  1. 为项目创建一个目录:
 mkdir composetestcd composetest
  1. 项目目录中创建一个名为app.py的文件
import timeimport 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)
  1. 项目目录中创建另一个文件requirements.txt
flask
redis

第 2 步:创建一个 Dockerfile

创建一个名为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"]

在这里插入图片描述

第 3 步:在 Compose 文件中定义服务

docker-compose.yml

version: "3.9"
services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

这个 Compose 文件定义了两个服务:web和redis.
在这里插入图片描述

第 4 步: Build and run your app with Compose

在这里插入图片描述

查看服务

在这里插入图片描述

查看镜像

在这里插入图片描述

服务命名规则

因为当前不是集群,所以尚没有服务的概念:
在这里插入图片描述
在这里插入图片描述

docker network ls 查看网络

在这里插入图片描述
在这里插入图片描述可以发现它是通过域名找到Redis服务的,更说明了他们是在同一个网络的
在这里插入图片描述
实际项目中,当前Redis服务ip为172.27.0.2,如果该服务挂了,然后我们重新又拉起了一个redis服务,ip变成了172.27.0.8,如果写死ip根据ip找redis服务,那么由于ip发生变化将会导致redis服务不可用了
而现在我们可以看到Name是服务名称 redis_1, 即使我们重新启了一个服务,它还是能够连接到的,这就是好处! 保证了高可用!

docker-compose down 停掉服务

在这里插入图片描述

docker-compose 小结

在这里插入图片描述

Docker 小结

在这里插入图片描述

4. compose yaml 编写规则

官网地址: Compose file

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

掌握方法:
在这里插入图片描述
官网地址:Compose Specification

5. 开源博客项目 wordpress快速运行

参考官网: Compose and WordPress

在这里插入图片描述
docker-compose.yml
在这里插入图片描述

docker-compose up -d         #后台启动

在这里插入图片描述

6. docker-compose启动微服务项目实战

  • 编写微服务项目计数器
  • dockerfile构建镜像
  • docker-compose.yaml编排项目
  • 丢到服务器,docker-compose up

6.1 创建springboot项目

在这里插入图片描述
在这里插入图片描述

6.2 编写dockerfile

通过dockerfile构建镜像

在这里插入图片描述

6.3 编写docker-compose.yml

在这里插入图片描述

6.4 项目打包

在这里插入图片描述

6.5 上传所需文件至服务器

在这里插入图片描述

6.6 docker-compose一键启动

重新构建:

docker-compose up --build

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
最后:

docker-compose --help

6.7 总结

在这里插入图片描述

7. Docker Swarm

官网地址: How nodes work

7.1 购买服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2 4台机器安装docker

在这里插入图片描述

7.3 工作模式

官网地址: How nodes work
管理节点与工作节点

  • 管理节点负责管理工作节点
  • 管理节点之间可以互通,互相查看是否存活(2个节点无意义,一般至少3个)

在这里插入图片描述

7.4 搭建集群

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 下面把docker-4作为主节点加入集群:
    在这里插入图片描述
    在这里插入图片描述
    再次查看节点:
    在这里插入图片描述
    小结:

在这里插入图片描述

8. Raft协议

  • 双主双从:其中一个主节点挂了,另一个页不能用了
  • Raft协议:保证大多数节点存活才可以用,只要>1台, 集群至少3台

8.1 双主双从宕机测试

将第一个主节点停掉:
在这里插入图片描述
下图中可以发现,另一个主节点页挂了:
在这里插入图片描述
重新启动docker, 查看节点下图中可以发现,新的Leader产生了,原来的老大是3Z,现在变成了2Z
在这里插入图片描述

8.2 节点离开集群

在这里插入图片描述
在这里插入图片描述

8.3 三主测试

先生成一个令牌:
在这里插入图片描述
下面将docker3也加到管理节点:
在这里插入图片描述

停止docker1:
在这里插入图片描述
在这里插入图片描述
然后分别在主节点docker3和主节点docker4里面执行 docker node ls 发现是可以正常执行这条命令的,说明他们都还正常存活

下面再停掉一个主节点: docker3, 然后在docker4上查看节点信息:
在这里插入图片描述
可以发现docker4已经不能正常使用了,即使它是主节点

Raft一致性算法协议:(集群)至少保证有3个主节点,有一个挂了没关系,剩余俩可以保证可用,但要是有2个挂了,第三个是不能用的
在这里插入图片描述

9. 体会弹性、扩缩容

以后告别docker run , 容器只是玩具,脱离了编排,它就没有任何意义了!

先把集群恢复,启动起来:
在这里插入图片描述

详见下一篇: Docker进阶篇教程 docker swarm弹性、动态扩缩容