开始使用 Docker Compose

Docker Compose

准备应用

准备好应用程序 app.py:

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

应用依赖包 requirements.txt:

flask
redis

创建 Dockerfile:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

Compose file

在 docker-compose.yml 中定义服务, 这里定义了两个服务 web 和 redis:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

构建并启动

docker-compose up

然后打开浏览器 http://localhost:5000/

如果想让服务在后台进程中运行,可以增加 -d 参数:

# 后台运行
docker-compose up -d

# 查看当前运行的服务
docker-compose ps

# 停止服务
docker-compose stop

# 删除redis容器关联的数据卷
docker-compose down --volumes

docker-compose run 命可以只启动其中一个或多个服务,如果你想要看web服务使用的环境变量可以运行:

docker-compose run web env