本篇文章给大家带来的内容是关于Docker部署Nginx+Flask+Mongo的应用介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
使用Docker部署Nginx+Flask+Mongo的应用
Nginx做为服务器,Mongo为数据库支持,Flask为Python语言的Web框架,利用Docker的容器特性,可以简单地部署在linux服务器上
项目准备
项目主要目录如下
__ project-name |__ docker-file |__ ningx |__ Dockerfile |__ conf |__ nginx.conf |__ flask |__ Dockerfile |__ requirements.txt |__ mongo |__ Dockerfile |__ setup.sh |__ docker-compose.yml |__ src |__ app |__ ... |__ run.py
简要说明
docker-file目录为docker部署的配置文件
src目录为flask应用的python代码
Docker的详细配置
docker-compose配置
version: '2.2'services: mongo: build: ./mongo volumes: - "./mongo/db:/data/db" restart: always ports: - "27017:27017" environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: 123456 flask: build: ./flask links: - mongo ports: - "5000:5000" expose: - "5000" volumes: - ../src:/home/web nginx: build: ./nginx links: - flask volumes: - "./nginx/log:/var/log/nginx" - "../:/usr/share/nginx/html" ports: - "80:80" - "8080:8080" - "443:443" restart: always
MongoDB的配置
/mongo/Dockerfile的内容如下
FROM mongo:3.6# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置工作目录ENV WORKDIR /usr/local/workENV AUTO_RUN_DIR /docker-entrypoint-initdb.dENV INSTALL_MONGO_SHELL setup.shRUN mkdir -p $WORKDIR# 复制数据库的初始化命令COPY ./$INSTALL_MONGO_SHELL $AUTO_RUN_DIR/RUN chmod +x $AUTO_RUN_DIR/$INSTALL_MONGO_SHELL
/mongo/setup.sh的内容如下
该文件的目的是,启动MongoDB后创建一个密码为test的用户test,并赋予它数据库test的读写操作
#!/bin/bashmongo <<EOFuse admin;db.auth('root', '123456');use dmx_aluminum;db.createUser({user:'test',pwd:'test',roles:[{role:'readWrite',db:'test'}]});db.createCollection("user");EOF
Flask应用的配置
/flask/Dockerfile的内容如下
FROM python:3.6# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 设置工作区RUN mkdir -p /home/webWORKDIR /home/web# 添加依赖ADD requirements.txt /home/web/requirements.txtRUN pip3 install -i https://pypi.douban.com/simple/ -r requirements.txt# 使用gunicorn启动应用CMD gunicorn -w 4 -b 0.0.0.0:5000 run:app
/src/app/run.py的代码
此处注释了调试用的 app.run(),发布时用gunicorn启动
from app import create_appapp = create_app('default')app.debug=False# if __name__ == '__main__':# app.run()
Nginx的配置
/nginx/Dockerfile的内容如下
FROM nginx:1.14# 设置时区ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone# 复制配置COPY conf/nginx.co<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码网@</strong>nf /etc/nginx/nginx.conf