Compose项目是Docker官方的开源项目,负责实现对基于Docker容器的多应用服务的快速编排。从功能上看,跟OpenStack中的Heat十分类似。其代码目前在https://github.com/docker/compose上开源。
Compose定位是"定义和运行多个Docker容器的应用",其前身是开源项目Fig,目前仍然兼容Fig格式的模板文件。
它允许用户通过一个单独的docker-compose.yml模板文件来定义一组相关联的应用容器为一个服务栈。
概念:
任务(task):一个容器被称为一个任务。任务拥有独一无二的ID,在同一个服务中的多个任务序号依次递增。
服务(service):某个相同应用镜像的容器副本集合,一个服务可以横向扩展为多个容器实例。
服务栈(stack):由多个服务组成,互相配合完成特定业务,如Web应用服务、数据库服务共同构成Web服务栈,一般由一个docker-compose.yml文件定义。
Compose的默认管理对象是服务栈,通过子命令对栈中的多个服务进行便捷的声明周期管理。
Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。
安装安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
验证:
docker-compose -v
测试 创建文件夹$ mkdir composetest$ cd composetest
创建app.py应用import timeimport redisfrom flask import Flaskapp = 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.txtflaskredis
创建Dockerfile# syntax=docker/dockerfile:1FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP=app.pyENV FLASK_RUN_HOST=0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtEXPOSE 5000COPY 、.CMD ["flask", "run"]
定义compose配置文件docker-compose.ymlversion: "3.9"services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
构建并运行docker-compose up
测试 停止docker-compose down