1. 前言
Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。
使用Compose 基本上分为三步:
- Dockerfile 定义应用的运行环境
- docker-compose.yml 定义组成应用的各服务
- docker-compose up 启动整个应用
2. 安装Compose
从 最新版的Docker Compose,例如:
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose
安装成功后,查看版本
$ docker-compose --versiondocker-compose version 1.14.0, build 1719ceb
3. 使用Compose
3.1 创建一个Python应用, 使用Flask,将数值记入Redis
- 创建一个项目目录
# mkdir composetest# cd composetest
- 在项目目录下,创建app.py
from flask import Flaskfrom redis import Redisapp = Flask(__name__)redis = Redis(host='redis', port=6379)@app.route('/')def hello(): count = redis.incr('hits') return 'Hello World! I have been seen {} times.\n'.format(count)if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
- 在项目目录下,创建requirements.txt文件
flaskredis
3.2 创建 Dockerfile
在项目目录下,创建Dockerfile
FROM python:3.4-alpineADD . /codeWORKDIR /codeRUN pip install -r requirements.txtCMD ["python", "app.py"]
对上面的Dockerfile做一下简单说明:
- 容器使用Python 3.4的镜像
- 将当前目录下文件拷贝到容器内/code
- 指定工作目录为/code
- 安装python需要的库:flask, redis
- 容器执行命令 python app.py
3.3 创建Compose脚本
在项目目录下,创建docker-compose.yml
文件
version: '2'services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: "redis:alpine"
3.4 启动应用
会执行编排脚本,分别制作和抓取web,redis镜像,启动容器
$ docker-compose up Pulling image redis... Building web... Starting composetest_redis_1... Starting composetest_web_1... redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3 web_1 | * Running on http://0.0.0.0:5000/ web_1 | * Restarting with stat
3.5 访问应用
每刷新一下页面,次数加1
3.6 更新应用
- 修改
app.py
内容,然后保存,例如:
return 'Hello from Docker! I have been seen {} times.\n'.format(count)
- 刷新浏览器页面,发现页面内容改变,并且次数依然在递增
4. 体验其他命令
- 使用daemon模式启动,并且查看容器状态
$ docker-compose up -dStarting composetest_redis_1...Starting composetest_web_1...$ docker-compose psName Command State Ports-------------------------------------------------------------------composetest_redis_1 /usr/local/bin/run Upcomposetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
- 查看容器环境变量
$ docker-compose run web envPATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=bdc78b829f9fTERM=xtermLANG=C.UTF-8GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700DPYTHON_VERSION=3.4.6PYTHON_PIP_VERSION=9.0.1HOME=/root
- 停止Compose启动的容器
$ docker-compose stop
- 停止和删除所有容器
$ docker-compose down