Docker Compose 是 Docker 容器進行編排的工具,定義和運行多容器的應用,能夠一條命令啓動多個容器。python
使用Compose 基本上分爲三步:git
從 Compose repository release page on GitHub 最新版的Docker Compose,例如:github
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
安裝成功後,查看版本web
$ docker-compose --version docker-compose version 1.14.0, build 1719ceb
# mkdir composetest # cd composetest
from flask import Flask from redis import Redis app = 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)
flask redis
在項目目錄下,建立Dockerfileredis
FROM python:3.4-alpine ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD ["python", "app.py"]
對上面的Dockerfile作一下簡單說明:docker
在項目目錄下,建立docker-compose.yml
文件flask
version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/code redis: image: "redis:alpine"
會執行編排腳本,分別製做和抓取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
每刷新一下頁面,次數加1
app
app.py
內容,而後保存,例如:return 'Hello from Docker! I have been seen {} times.\n'.format(count)
$ docker-compose up -d Starting composetest_redis_1... Starting composetest_web_1... $ docker-compose ps Name Command State Ports ------------------------------------------------------------------- composetest_redis_1 /usr/local/bin/run Up composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
$ docker-compose run web env PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=bdc78b829f9f TERM=xterm LANG=C.UTF-8 GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D PYTHON_VERSION=3.4.6 PYTHON_PIP_VERSION=9.0.1 HOME=/root
$ docker-compose stop
$ docker-compose down