Python: Docker Compose—简化复杂容器应用的利器
May 29, 2015
Compose是用于定义和运行复杂Docker应用的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成。
Table of Contents
1. 安装Docker和Compose
# 当前最新的Docker是1.6.2,Compose为1.2.0 curl -s https://get.docker.io/ubuntu/ | sudo sh sudo apt-get update sudo apt-get install lxc-docker # 参考http://docs.docker.com/compose/install/#install-compose curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose上面这个方法真的慢出翔,可以通过Python pip安装。 apt-get install python-pip python-dev pip install -U docker-compose
这样compose就安装好了,查看一下compose的版本信息:
chmod +x /usr/local/bin/docker-compose docker-compose -version docker-compose 1.2.0
2. 使用Compose
使用Compose只需要简单的三个步骤:首先,使用Dockerfile来定义你的应用环境:
FROM python:2.7 ADD ./code WORKDIR /code RUN pip install -r requirements.txt
其中,requirements.txt中的内容包括:
flask redis
再用Python写一个简单的app.py
from flask importFlaskfrom redis importRedisimport os app =Flask(__name__) redis =Redis(host='redis', port=6379)@app.route('/')def hello(): redis.incr('hits')return'Hello World! I have been seen %s times.'% redis.get('hits')if __name__ =="__main__>": app.run(host="0.0.0.0>", debug=True)
第二步,用一个compose.yaml来定义你的应用,他们可以在下个互隔离的容器中组成你的应用。
web: build:. command: python app.py ports:-"5000:5000>" volumes:-.:/code links:- redis redis: image: redis
第三步,执行docker-compose up来启动你的应用,它会根据compose.yaml的设置来pull/run这俩个容器。
Creating myapp_redis_1... Creating myapp_web_1... Building web... Step 0 : FROM python:2.7 2.7: Pulling from python ... Status: Downloaded newer image for python:2.7 ---> d833e0b23482 Step 1 : ADD . /code ---> 1c04b1b15808 Removing intermediate container 9dab91b4410d Step 2 : WORKDIR /code ---> Running in f495a62feac9 ---> ffea89a7b090 Attaching to myapp_redis_1, myapp_web_1 ...... redis_1 | [1] 17 May 10:42:38.147 * The server is now ready to accept connections on port 6379 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) web_1 | * Restarting with stat
3. Yaml文件参考
在上面的yaml文件中,我们可以看到compose文件的基本结构。首先是定义一个服务名,下面是yaml服务中的一些选项条目:
ports:-"3000>"-"8000:8000>"-"127.0.0.1:8001:8001>"
volumes:-/var/lib/mysql - cache/:/tmp/cache -~/configs:/etc/configs/:ro
environment:- RACK_ENV=development - SESSION_SECRET
common.yml webapp: build:./webapp environment:- DEBUG=false- SEND_EMAILS=false development.yml web:extends: file: common.yml service: webapp ports:-"8000:8000>" links:- db environment:- DEBUG=true db: image: postgres
其他的
cpu_shares:73 working_dir:/code entrypoint: /code/entrypoint.sh user: postgresql hostname: foo domainname: foo.com mem_limit:1000000000 privileged:true restart: always stdin_open:true tty:true
4. docker-compose常用命令
在第二节中的
docker-compose的动作包括:
参考:
0 Comments