Docker Compose用户指南

Docker Compose

Compose 是一个工具,定义和运行复杂Docker应用。使用Compose,你定义多容器应用在当个文件中,然后将你的所有应用联系在一起,通过单一命令就可以完成运行这么多容器应用的事情。

Compose 对与开发环境,staging servers和CI是有利的。我们不用推荐使用它,在你的产品中。

使用Compose 基本上分为三步:

第一步,你定义你的app的环境使用dockerfile,它可以在任何地方被生成。

  1. FROM python:2.7
  2. WORKDIR /code
  3. ADD requirements.txt /code/
  4. RUN pip install -r requirements.txt
  5. ADD ./code
  6. CMD python app.py

接下来,你定义服务,确保在docker-compose.yml包含你的应用,它们可以被运行在隔离的环境。

  1. web:
  2. build: .
  3. links:
  4. - db
  5. ports:
  6. -"8000:8000"
  7. db:
  8. image: postgres

最后,运行docker-compose up,Compose 将启动并运行你整个app。

Compose 有命令用来管理你app的整个生命周期:

启动、停止,重构服务

查看正在运行服务的状态

打印正在运行服务的log输出。

运行一次性的服务命令

Compose 文档

  • Installing Compose

  • Command line reference

  • Yaml file reference

  • Compose environment variables

  • Compose command line completion

快速开始

让我们开始与演练获得一个简单的Python Web应用程序上,运行Compose。它是需要Python的一点知识,但这里展示的概念,即使你不熟悉Python是可以理解的。

安装与设置

首先,安装Docker Compose。

接下来,你需要为项目建立目录:

  1. $ mkdir composetest
  2. $ cd composetest

在这个目录里面,创建app.py,一个单个web app,使用Flask 框架,在Redis增加一个值。

  1. from flask import Flask
  2. from redis import Redis
  3. import os
  4. app =Flask(__name__)
  5. redis =Redis(host='redis', port=6379)
  6. @app.route('/')
  7. def hello():
  8. redis.incr('hits')
  9. return'Hello World! I have been seen %s times.'% redis.get('hits')
  10. if __name__ =="__main__":
  11. app.run(host="0.0.0.0", debug=True)

接下来,定义Python依赖,在一个叫做requirements.txt文件中写入:

  1. flask
  2. redis

创建一个docker镜像

现在,创建一个docker镜像,包含你app的依赖项。你指定怎样构建镜像,使用一个叫做Dockerfile文件。

  1. FROM python:2.7
  2. ADD . /code
  3. WORKDIR /code
  4. RUN pip install -r requirements.txt

这告诉docker包含Python,code和你的Python 依赖项到你的docker镜像中。关于怎样写dockerfile的信息,请阅读Docker user guide 和Dockerfile reference。

定义服务

接下来,定义一个服务,使用docker-compose.yml:

  1. web:
  2. build: .
  3. command: python app.py
  4. ports:
  5. - "5000:5000"
  6. volumes:
  7. - .:/code
  8. links:
  9. - redis
  10. redis:
  11. image: redis

这里定义了两个服务:

web,在当前目录通过Dockerfile构建。在构建的镜像中,它一直说明运行命令 python app.py,期望暴露容器端口5000到宿主机端口5000,链接Redis服务,挂载当前目录到容器中,因此我们可以操作code目录而不必重构镜像。

redis, 使用公有image redis, 从 Docker Hub registry中pull下来。

通过Compose构建和运行你的app

现在,你可以运行docker-compose up,Compose 将pull一个Redis 镜像,构建一个包含你的code的镜像,启动所有的任何事情。

  1. $ docker-compose up
  2. Pulling image redis...
  3. Building web...
  4. Starting composetest_redis_1...
  5. Starting composetest_web_1...
  6. redis_1 |[8]02Jan18:43:35.576# Server started, Redis version 2.8.3
  7. web_1 |*Running on http://0.0.0.0:5000/

web app现在需要监听5000 端口,在你的docker daemon主机。

如果你想运行你的服务在后台,你可以通过-d标志到docker-compose up命令后,使用docker-compose ps查看当前运行的情况:

  1. $ docker-compose up -d
  2. Starting composetest_redis_1...
  3. Starting composetest_web_1...
  4. $ docker-compose ps
  5. Name Command State Ports
  6. -------------------------------------------------------------------
  7. composetest_redis_1 /usr/local/bin/run Up
  8. composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp

docker-compose run命令,运行你运行一次性命令为你的服务。例如,查看web 服务的环境变量。

  1. $ docker-compose run web env

docker-compose --help看看其他有效的命令。

如果你启动Compose 是通过docker-compose up -d,你将可能想要停止你的服务,一旦你结束他们时。

  1. $ docker-compose stop

最后,你已经看到了基本的怎样让Compose 工作了。

接下来,你可以快速开始 Django, Rails, 或者 Wordpress.

可以查看参考指南,了解更加详尽的 commands, configuration file 和environment variables。