docker-compose

安装 Docker Compose 并运行一个简单的 Python Web 应用

安装

$ sudo -i
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose

运行一个简单的 Python Web 应用
步骤1:设置
创建项目目录:

$ mkdir composetest
$ cd composetest

在项目目录中创建 app.py:

from flask import Flask
from redis import Redis

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)

在项目目录下创建 requirements.txt 定义依赖,内容如下:

flask
redis

步骤 2:创建一个 Docker 映像文件
在项目目录下创建 Dockerfile 文件,内容如下:

FROM python:2.7
ADD . /code
RUN pip install -r requirements.txt
CMD python app.py

该文件告诉 Docker:

基于 Python 2.7 映像开始构建新映像
将当前目录挂载到映像的 /code 目录
安装 Python 依赖文件
设置容器默认运行的命令 python app.py
再创建一个名为 web 的新映像文件:

$ docker build -t web .

步骤 3:定义服务
使用 docker-compose.yml 来定义一组服务:

1, 在项目目录中创建 docker-compose.yml 文件,内容如下:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis

该文件定义了两个服务: web 和 redis。

针对 web 服务:

将从当前目录下的 Dockerfile 文件构建出 web 映像
将主机的 5000 端口映射到容器中的 5000 端口
将主机的当前目录挂载到容器的 /code 目录,从而当代码修改后,无需重建映像
将 web 服务与 redis 服务连接起来
步骤 4:构建并用 Compose 运行应用
在项目目录下,开启应用:

$ 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
之后,就能通过 5000 端口进行访问了。

步骤 5:实验其它的命令
通过使用 -d 使服务在后端运行,通过 docker-compose ps 来查看当前运行的服务:

$ 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 服务上的环境变量:

$ docker-compose run web env

对应 docker-compose up -d,停止用 docker-compose stop。

上一篇:拉取docker报错解决方法:Error response from daemon: Get https://192.168.0.201:5000/v1/_ping: http: server gav


下一篇:ACM 杭电HDU 2084 数塔 [解题报告]