Docker部署Django由浅入深系列(中): 双容器部署Django + Uwsgi + Nginx

本文详细介绍了如何使用Docker构建双容器环境,部署Django、Uwsgi和Nginx。通过Dockerfile和配置文件,实现Django项目在生产环境的正确配置和运行。同时,文中还提到了容器间的通信、数据持久化以及常见的部署问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是使用Docker部署Django由浅入深系列的中篇,我们将构建两个容器,一个容器放Django + Uwsgi,另一个容器放Nginx。我们将了解不同容器间是如何通信的,并学会正确配置uwsgi.ini和nginx.conf使整个项目跑起来。在阅读本篇前,请先阅读本系列上篇使用Docker单容器部署Django + Uwsgi。下篇我们会更进一步介绍如何使用docker-compose部署Django + Uwsgi + Nginx + MySQL + Redis(多容器组合), 欢迎关注我们的微信公众号【Python Web与Django开发】。

双容器部署Django+Uwsgi+Nginx项目示意图

整个项目流程示意图如下所示。用户通过客户端访问服务器的80端口(http协议默认端口)时,请求由于宿主机和容器1间存在80:80端口映射关系会被转发到Nginx所在的容器1。Nginx接收到请求后会判断请求是静态的还是动态的,静态文件请求自己处理,动态请求则转发到Django+Uwsgi所在的容器2处理,容器2的开放端口为8000。本例中所使用到的容器1的名字为mysite3-nginx, 容器2的名称为mysite3。由于两个容器在一台宿主机上,你可以看到docker分配的容器IP地址非常接近,有点像局域网IP。使用如下命名即可查看容器的IP地址。

 sudo docker inspect container_name | grep "IPAddress"

例子:

注意:

  • 容器创建和启动的先后顺序很重要,本例中容器1对容器2有依赖。这是因为如果容器2不运行,容器1收到动态请求后不知道给谁处理。

  • 创建容器并运行前,必须先使用docker pull命令或Dockerfile构建容器对应的镜像。

双容器部署Django+Uwsgi+Nginx代码布局图

整个项目的代码布局如下所示。我们新建了一个compose文件夹,专门存放用于创建其它镜像的Dockerfile及配置文件。在本例中,我们只创建了一个nginx文件夹。在下篇文章中,我们会将MySQL和Redis也加进去。

 mysite3
 ├── compose
 │   └── nginx
 │       ├── Dockerfile # 创建nginx镜像需要用到的Dockerfile
 │       ├── log # 存放nginx的日志
 │       ├── nginx.conf # nginx配置文件
 │       ├── ssl # 如果需要配置https需要用到
 ├── db.sqlite3
 ├── Dockerfile # 创建django+uwsgi镜像需要用到的Dockerfile
 ├── manage.py
 ├── mysite3
 │   ├── asgi.py
 │   ├── __init__.py
 │   ├── settings.py
 │   ├── urls.py
 │   └── wsgi.py
 ├── pip.conf # 设置pypi为国内源,加速静态文件安装
 ├── static # 静态文件夹,存放css,
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值