介绍
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环境,尽管它并不是原始示例。
如果您做这样的笔记,下次可以再享受。
我希望这将对那些看到过的人有所帮助。