当有互相依赖的多个容器,作为一个整体出现并提供服务时,用docker-compose来管理是一件非常愉快的事情,Docker Compose专门为编排Docker容器而产生。下面通过一个实例说明如何使用docker-compose,有一组应用里面有两个服务portal和redis,其中portal提供web访问界面,redis提供数据存储,portal依赖于redis。
建立项目目录:
mkdir demoproj mkdir demoproj/{portal,redis,service} cd demoproj
其中portal用来保存web相关文件,redis保存redis的数据文件(此样例暂时不保存数据在容器外部),service用来保存服务相关的程序(这个样例中没用)
建立web应用
web应用相关文件都放在portal
目录中
编写基于flask的web应用,建立app.py文件,这个应用连接redis做访问计数
from flask import Flask from redis import Redis import os app = Flask(__name__) redis = Redis(host="redis", port=6379) @app.route("/") def hello(): count = redis.incr("hits") return "Hello World! I have been seen %s times. \n" % (count,) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
编写requirements.txt描述这个python应用需要依赖的库
flask redis
编写Dockerfile
FROM python:2.7 MAINTAINER jilili <jilili@aliyun.com> ADD . / WORKDIR / RUN pip install -r requirements.txt CMD ["python", "app.py"]
编写编排文件
在项目的根目录,既demoproj
目录
编写docker-compose.yml文件
version: "3" services: portal: build: portal/ ports: - "5000:5000" redis: image: "redis:alpine"
使用docker-compose启动相关应用
docker-compose up -d
完成启动后就可以通过http://127.0.0.1:5000
来访问了。
如果程序发生了改变可以通过如下命令重建
docker-compose up -d --build