Docker如何部署Nginx+Flask+Mongo
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下Docker如何部署Nginx+Flask+Mongo,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用
千家信息网最后更新 2026年11月01日Docker如何部署Nginx+Flask+Mongo
小编给大家分享一下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 <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.conf /etc/nginx/nginx.conf/nignx/conf/nginx.conf的内容如下
user nginx;worker_processes 1;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; # 开启gzip gzip on; gzip_min_length 1k; gzip_buffers 4 16k; #gzip_http_version 1.0; gzip_comp_level 1; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary off; gzip_disable "MSIE [1-6]\."; server { listen 80; server_name localhost; keepalive_timeout 5; root /usr/share/nginx/html; location /static/ { alias /usr/share/nginx/html/src/app/static/; } location / { # checks for static file, if not found proxy to app try_files $uri @flask_app; } location @flask_app { proxy_pass http://192.168.0.2:5000; # 发布在阿里云上,应填写内网IP proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; #proxy_buffers 8 32k; #proxy_buffer_size 64k; } }}启动部署
- 进入docker-flie目录
cd docker-flie- 启动docker
docker-compose up- 查看容器状态
docker ps- 本地部署浏览器输入 127.0.0.1即可
最后出现类似docker_file_nginx_1,docker_file_mongo_1, docker_file_flask_1的3个容器,说明成功!!!
踩坑吐槽
- 1 mongol容器中的初始化文件需要放在 docker-entrypoint-initdb.d 目录下
本人做过如下尝试,会显示 mongdb未启动。
ADD setup.sh /data/setup.shRUN chmod +x /data/setup.shCMD ["/data/setup.sh"]
- 2 flask应用无法连接mongo,本文使用link方式。
在数据库的配置应相应写成:
MONGODB_SETTINGS = { 'db': 'test', 'host': 'mongo', # 127.0.0.1 host地址一定要写你配置的--link的名字 'username': 'test', 'password': 'test', 'port': 27017 }本地测试时改回127.0.0.1
3 nginx中配置使用的代理模式,其中执行flask应用的IP,应为内网IP
以上是"Docker如何部署Nginx+Flask+Mongo"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
配置
内容
目录
应用
容器
数据
数据库
文件
时区
篇文章
代码
服务器
项目
工作
服务
成功
不怎么
名字
命令
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
花魁咖啡
互联网是第几次科技革命的成果
华服互联网科技怎么样
科技互联网政务服务
深圳艾佳互联网科技
华脉科技工业互联网产品
字节跳动和互联网科技
想开互联网科技公司怎么样
中国科技创新与世界互联网大会
卓翼科技产业互联网合作
烟台灵鸽互联网科技有限公司
中科明德北京互联网科技
互联网营销推广黑科技
厦门江牛科技互联网
互联网相关科技技术
工业互联网科技成果转化
易企秀互联网科技是做什么的
全球科技与互联网公司市值变化
普陀区互联网教育科技管理办法
科技互联网专业务虚会材料
互联网科技网
江苏根荣互联网科技
互联网科技有限公司图片
互联网科技上市公司
广州善班互联网科技
互联网实体化科技化
无锡工业互联网科技有限公司
合肥互联网科技公司公章图片
深圳互联网科技的发展
广东工业互联网大赛深圳学泰科技