使用uwsgi-nginx-flask-docker轻松进行Flask的Docker操作


介绍

Flask具有用于开发的简单服务器功能,并且在开发时很容易,但是在操作时,准备使用Nginx(或Apache)uWSGI进行操作的环境很麻烦。

运行带有Nginx uWSGI的Flask的Docker环境以uwsgi-nginx-flask-docker的名称发布,因此我尝试使用它。

与示例有一些差异,例如目录结构和时区设置的差异,因此我将其留在本文中作为备忘。

目录结构

因为它在一个容器中工作,所以我决定将Dockerfile和docker-compose.yml放在项目根目录中。

1
2
3
4
5
6
7
8
.
├── Dockerfile
├── README.md
├── docker-compose.yml
├── myapp/
├── requirements.txt
├── run.py
└── uwsgi.ini

docker-compose.yml

首先,来自docker-compose.yml。
Docker在每个进程中拥有一个容器的最佳实践可能是Nginx容器和uWSGI容器应该分开,但是uwsgi-nginx-flask-docker都在一个容器中运行。

1
2
3
4
5
6
7
8
9
10
11
12
version: "2"

services:
  web:
    build: ./
    ports:
      - "80:80"
    volumes:
      - .:/app
    environment:
      - FLASK_APP=run.py
      - 'RUN=flask run --host=0.0.0.0 --port=80'

您可以将

web和run.py重命名为任意名称。

Docker文件

接下来是Dockerfile。
我使用基于高山的图像作为基本图像,并将时区设置为亚洲/东京。

1
2
3
4
5
6
7
8
9
10
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7

ENV STATIC_PATH /app/myapp/static

RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*
COPY ./requirements.txt /app
RUN pip install -r requirements.txt

RUN的前4行是时区更改。
然后,它将安装项目requirements.txt中列出的必需软件包。

运行

如上所述,文件名可以是您喜欢的任何名称。

1
2
3
4
5
from myapp import app

if __name__ == '__main__':
    # 開発中のみ利用
    app.run(host="0.0.0.0", port=8080, debug=True)

说"仅在开发期间使用"的部分是

在开发期间。

1
python run.py

这是为了执行

以启动和使用启用了调试功能的简单开发服务器。
不在Docker环境中使用。

就我而言,我在myapp / __ init__.py中编写了以下内容。

1
2
3
4
5
6
from flask import Flask

app = Flask(__name__)
app.config.from_object('myapp.config')

# (以下略)

概要

通过使用

uwsgi-nginx-flask-docker,我可以很轻松地用Docker构建Flask的Nginx uWSGI环境,尽管它并不是原始示例。

如果您做这样的笔记,下次可以再享受。
我希望这将对那些看到过的人有所帮助。