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初体验
第 1 步:设置
- 为项目创建一个目录:
mkdir composetest
cd composetest
- 项目目录中创建一个名为app.py的文件
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.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
第 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
掌握方法:
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 工作模式
- 管理节点负责管理工作节点
- 管理节点之间可以互通,互相查看是否存活(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 , 容器只是玩具,脱离了编排,它就没有任何意义了!
先把集群恢复,启动起来: