docker、flask、gunicorn、flask-script、nginx部署实践
最新推荐文章于 2024-09-28 20:19:14 发布
原创最新推荐文章于 2024-09-28 20:19:14 发布·2.2k 阅读
1·
·
0
·
0
1·CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本文详述了如何使用gunicorn、Dockerfile和docker-compose逐步部署Flask应用。首先,通过gunicorn在本地启动Flask应用,接着编写Dockerfile以独立容器运行,最后利用docker-compose进行服务编排,实现一键启动,包括Flask应用、MySQL和Nginx服务。docker和docker-compose部署flask(flask-script)、gunicorn实践记录
这里不介绍docker和docker-compose的工作原理,只真实的记录本次实践。
循序渐进的来,先用gunicorn启动,再用Dockerfile启动,最后尝试docker-compose编排
1.准备项目目录和模拟代码,先本地用gunicorn启动
- ~/flask-demo 目录,创建好虚拟环境,flask启动文件,我这里用了flask-script的方式
# ~/flask-demo/manage.pyfrom flaskimport Flaskfrom flask-scriptimport Managerapp= Flask(__name__)manager= Manager(app)@app.route("/")defindex():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:app2. 用Dockerfile启动项目
编写Dockerfile文件
# 指定基础环境FROM python:3.7# 指定个人信息 可有可无MAINTAINER username<email># 安装项目依赖COPY requirements.txt ./# 拷贝当前目录下的req文件到容器的当前目录下RUN pip3install --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 -p8000: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.ymlversion:"3"services:app:build: ./appstdin_open:truetty:trueports:-"8897:8897"container_name:"flask-demo"volumes:-../:/home/root/flask-demo: rwworking_dir: /home/root/flask-demo/src/appdepends_on:- mysqlcommand: gunicorn-c ./gun_cfg.py manage:appmysql:build: ./mysqlports:-"3306:3306"volumes:- ./data/mysql:/var/lib/mysql:rwenvironment:MYSQL_ROOT_PASSWORD:"test123"TZ: Asia/Shanghairestart: alwaysnginx:build: ./nginxports:-"80:80"container_name:"flask-nginx" volumes:- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro- ../:/home/root/flask-demo:rwdepends_on:- app# flask-demo/docker/app/DockerfileFROM python:3.7COPY requirements.txt ./RUN pip3 install--no-cache-dir-i https://pypi.douban.com/simple/-r requirements.txt# flask-demo/docker/nginx/DockerfileFROM nginx:1.9.9COPY ./nginx.conf /etc/nginx/nginx.conf# flask-demo/docker/mysql/DockerfileFROM mysql:5.6COPY ./init.sql /docker-entrypoint-initdb.d启动
docker-compose up -d

1 条评论您还未登录,请先登录后发表或查看评论
















2696






















