docker、flask、gunicorn、flask-script、nginx部署实践
程序员文章站
2022-06-11 14:43:53
...
docker和docker-compose部署flask(flask-script)、gunicorn实践记录
这里不介绍docker和docker-compose的工作原理,只真实的记录本次实践。
循序渐进的来,先用gunicorn启动,再用Dockerfile启动,最后尝试docker-compose编排
1.准备项目目录和模拟代码,先本地用gunicorn启动
- ~/flask-demo 目录,创建好虚拟环境,flask启动文件,我这里用了flask-script的方式
# ~/flask-demo/manage.py
from flask import Flask
from flask-script import Manager
app = Flask(__name__)
manager = Manager(app)
@app.route("/")
def index():
return "hello world"
if __name__ == "__main__":
manager.run()
- gunicorn配置文件,这里其他很多教学是文件名以conf结尾,我这里这样写会报错,建议写成一个py文件的形式
# ~/flask-demo/gun_cfg.py 都是字面意思
worker = 4 # 进程数
thread = 2 # 每个进程的线程数
bind = "0.0.0.0:8897" # 监听地址端口
worker_class = "gevent" # 工作模式 协程
worker_connection = 2000 # 设置最大连接数
pidfile = "gunicorn.pid" # 设置进程文件目录
accesslog = "logs/access.log"
errorlog = "logs/error.log"
loglevel = "info"
reload = True # 自动重新加载
debug = True
- gunicorn 启动命令
gunicorn -c ./gun_cfg.py manage:app
2. 用Dockerfile启动项目
-
编写Dockerfile文件
# 指定基础环境 FROM python:3.7 # 指定个人信息 可有可无 MAINTAINER username<email> # 安装项目依赖 COPY requirements.txt ./ # 拷贝当前目录下的req文件到容器的当前目录下 RUN pip3 install --no-cache-dir -i https://pypi.douban.com/simple -r requirements.txt # 拷贝项目代码到容器的当前路径下 COPY . . # 运行项目 CMD gunicorn -c ./gun_cfg.py manage:app
-
生成镜像
# -t 指定镜像名称 . 指在当前目录寻找可执行的Dockerfile文件 docker build -t flask-test .
-
用flask-test镜像启动容器
# -itd 交互和守护模式启动 --name 指定容器名 docker run -itd --name:test -p 8000:8897 flask-test
尝试使用docker-compose编排启动项目,真正实现一键启动
-
结构目录有所改变,为了更好的适应实际的项目开发的情况
|—— flask-demo | |—— docker | |—— app | |—— Dockerfile | |—— requirements.txt | |—— nginx | |—— Dockerfile | |—— nginx.conf | |—— mysql | |—— Dockerfile | |—— init.sql | |—— docker-compose.yml | |—— src | |—— app | |—— handler | |—— model | |—— ... | |—— config.py | |—— manage.py | |—— gun_cfg.py
-
下面来一步步介绍
# flask-demo/docker/docker-compose.yml version: "3" services: app: build: ./app stdin_open: true tty: true ports: - "8897:8897" container_name: "flask-demo" volumes: - ../: /home/root/flask-demo: rw working_dir: /home/root/flask-demo/src/app depends_on: - mysql command: gunicorn -c ./gun_cfg.py manage:app mysql: build: ./mysql ports: - "3306:3306" volumes: - ./data/mysql:/var/lib/mysql:rw environment: MYSQL_ROOT_PASSWORD: "test123" TZ: Asia/Shanghai restart: always nginx: build: ./nginx ports: - "80:80" container_name: "flask-nginx" volumes: - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ../:/home/root/flask-demo:rw depends_on: - app # flask-demo/docker/app/Dockerfile FROM python:3.7 COPY requirements.txt ./ RUN pip3 install --no-cache-dir -i https://pypi.douban.com/simple/ -r requirements.txt # flask-demo/docker/nginx/Dockerfile FROM nginx:1.9.9 COPY ./nginx.conf /etc/nginx/nginx.conf # flask-demo/docker/mysql/Dockerfile FROM mysql:5.6 COPY ./init.sql /docker-entrypoint-initdb.d
-
启动
docker-compose up -d
推荐阅读
-
Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践
-
Docker新手实践及部署NGINX的步骤详解
-
flask+docker + nginx + uwsgi环境部署
-
flask+docker + nginx + uwsgi + https环境部署
-
Docker部署Django+Mysql+Redis+Gunicorn+Nginx的实现
-
docker实战docker+python3.5+flask+gunicorn+gevent+nginx base image:centos
-
记一次 FLask + docker +Gunicorn + gevent 部署服务遇见的问题
-
gunicorn+gevent+nginx部署flask应用
-
gunicorn+gevent+nginx部署flask应用
-
通过Docker部署Flask应用(gunicorn+gevent)