使用Docker Compose必要性及定义
用容器运行一个服务,需要使用docker run
命令。但如果我要运行多个服务呢
假设我要运行一个web服务,还要运行一个db服务,那么是用一个容器运行,还是用多个容器运行呢?
一个容器运行多个服务会造成镜像的复杂度提高,docker倾向于一个容器运行一个应用。
那么复杂的架构就会需要很多的容器,并且需要它们之间有关联(容器之间的依赖和连接)就更复杂了。
这个复杂的问题需要解决,这就涉及到了容器编排的问题了。
- Compose
- 编排
- 是对多个容器进行启动和管理的方法
- 例如:LNMT,先启动MySQL,再启动Tomcat,最后启动Nginx
- 编排
- 服务架构的演进
- 单体服务架构
- 分布式服务架构
- 微服务架构
- 超微服务架构
容器编排工具
工程(project)
- 服务 (Service)
- 容器 (Container)
步骤
1.定义应用的Dockerfile文件,为了anywhere进行构建。
2.使用docker-compose.yaml定义一套服务,这套服务可以一起在一个隔离环境中运行。
3.使用docker-compose up就可以启动整套服务。
docker 创建应用wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
docker-compose version
1 创建网站文件 ```shell mkdir flaskproject cd flaskproject vim 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
vim requirements.txt flask redis
创建Dockerfile文件
vim Dockerfile 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 COPY . . CMD [“flask”, “run”]
创建docker-compose.yaml
vim docker-compose.yaml version: ‘3’ services: web: build: . ports:
- "5000:5000"
redis: image: “redis:alpine”
启动docker-componse
docker-compose up ```