使用docker-compose部署flask应用

2023-04-13 16:22:59 浏览数 (1)

使用 docker-compose 部署 flask 应用

为了让开发环境、测试环境和线上环境统一,使用 docker 镜像部署应用是一个不错的方案。裸用 docker-cli 管理服务过于麻烦,在开发机上 k8s 又凭空增加了很多复杂性,使用 docker-compose 部署应用是一个不错的折中方案。

Docker-compose 是 docker 官方推出的一个管理多容器服务的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。其主要特性有:

  1. 使用一个 Host 启动多个服务
  2. 容器启动时持久化数据卷到宿主机
  3. 只在镜像发生变化时重新创建容器
  4. 更方便地管理环境变量

我们这里准备了一个示例项目,是一个 flask web 项目。提供了一个接口来根据参数生成二维码。 可以看一下它的 Dockerfile:

代码语言:javascript复制
FROM python:3.8-slim

COPY requirements.txt /tmp/requirements.txt
RUN set -xe 
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone 
    && pip install --no-cache-dir -r /tmp/requirements.txt 
    && rm -f /tmp/requirements.txt

COPY app.py /code/app.py
WORKDIR /code
CMD gunicorn app:app -b :8080 -k gevent --log-level info

流程比较简单,安装依赖,拷贝代码文件到/code/目录,设置/code/为工作目录,并且制定了启动命令。

然后再看一下docker-compose.yml:

代码语言:javascript复制
version: "3"

services:
  qr-web:
    build: .
    ports:
      - 0.0.0.0:8080:8080
    command: gunicorn app:app -b :8080 -k gevent --log-level info

我们定义了一个服务qr-web,指定这个服务的镜像从当前目录的Dockerfile构建,将容器的8080暴露到宿主机的0.0.0.0:8080上,并且指定了启动命令。

定义好docker-compose.yml,我们就可以通过docker-compose build命令来构建镜像。启动服务时只需要运行docker-compose up命令就可以了,如果希望服务在后台常驻,需要加上-d选项。

这个示例项目还只需要启动一个容器,并不能体现出docker-compose在管理多容器服务上的优势,下篇文章会讲一讲如何使用docker-compose部署和管理更复杂的服务。

0 人点赞