nginx-docker-uwsgi-django
[TOC]
前言
docker
# 查看所有容器
docker container ls -a
# 查看所有镜像
docker image ls -a
# 停止正在运行的容器
docker stop container-id
# 重启已经停止的容器
docker start container-id
# 不管容器是否启动都直接重启容器
docker restart container-id
# 删除不需要的容器
docker rm container-id
# 删除不需要的镜像
docker image rm image-id
# docker创建运行每个容器时会为每个容器分配一个ip地址
docker inspect container-name | grep "IPAddress"
docker pull python:3.6.5
可能timeout,可以百度docker换国内源试试
docker+django
在django项目的manage.py文件的同级目录创建dockerfile文件。
# 基于哪个镜像来实现
FROM python:3.6.5
# 镜像作者
MAINTAINER yun
# python禁用缓存输出
ENV PYTHONUNBUFFERED 1
# 在容器内递归创建/home/yun/mysite文件夹
RUN mkdir -p /home/yun/mysite
# 设置容器内工作目录
WORKDIR /home/yun/mysite
# 将当前目录文件加入到容器工作目录中
ADD . /home/yun/mysite
# 安装django
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
# -t表示创建名django-py版本v1的镜像, .表示用当前路径的Dockerfile进行构建
docker build -t django-py:v1 .
# -d 后台运行 --name 命名容器名字 -p 设置端口映射(从宿主机到容器)
docker run -itd --name mysite -p 8000:8000 django-py:v1
# 进入容器终端,-i 交互式 -t 终端
docker exec -it container-id sh
# 进入容器终端之后启动django服务
python manage.py runserver 0.0.0.0:8000
启动之后在宿主机浏览器中打开127.0.0.1:8000
就可以看到Django的Hello World!
如果希望提供对外服务的话,可以在settings.py文件中更改IP地址ALLOWED_HOSTS = ['本机对外的IP地址']
,然后再执行python manage.py runserver 0.0.0.0:8000
docker+uwsgi+django
在django项目的manage.py文件的同级目录创建dockerfile文件。
# 基于哪个镜像来实现
FROM python:3.6.5
# 镜像作者
MAINTAINER yun
# python禁用缓存输出
ENV PYTHONUNBUFFERED 1
# 在容器内递归创建/home/yun/mysite文件夹
RUN mkdir -p /home/yun/mysite
# 设置容器内工作目录
WORKDIR /home/yun/mysite
# 将当前目录文件加入到容器工作目录中
ADD . /home/yun/mysite
# 安装django
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
# 安装uwsgi
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
在django项目的manage.py文件的同级目录创建uwsgi.ini文件。
# 配置uwsgi
[uwsgi]
# 指定服务器部署IP地址和端口
http=0.0.0.0:9090
# 配置项目在当前服务器中的绝对路径
chdir=/home/yun/mysite
# 相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
# 设置启动的进程数量
processes=4
# 设置每个进程启动的线程数量
threads=2
# 设置主进程
master=True
# 指定保存主进程编号的文件
pidfile=uwsgi.pid
# 指定守护进程的日志存储
daemonize=uwsgi.log
# -t表示创建名django-py版本v1的镜像, .表示用当前路径的Dockerfile进行构建
docker build -t django-py:v2 .
# -d 后台运行 --name 命名容器名字 -p 设置端口映射(从宿主机到容器)
docker run -itd --name mysite -p 9090:9090 django-py:v2
# 进入容器终端,-i 交互式 -t 终端
docker exec -it container-id sh
# 进入容器终端之后启动uwsgi服务
uwsgi --ini uwsgi.ini
启动之后在宿主机浏览器中打开127.0.0.1:9090
就可以看到Django的Hello World!
如果希望提供对外服务的话,可以在settings.py文件中更改IP地址ALLOWED_HOSTS = ['本机对外的IP地址']
,然后再执行uwsgi --ini uwsgi.ini
nginx+docker+uwsgi+django
配置nginx
把在nginx官网下载下来的压缩包解压到django项目的manage.py文件的同级目录下
# 在http的server大括号里面添加
# location / {
# root html;
# index index.html index.htm;
# }
# 静态文件配置
location /static {
alias C:\Users\yun\Documents\HelloCode\mysite\static;
}
# 反向代理配置
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
配置docker+uwsgi
在django项目的manage.py文件的同级目录创建uwsgi.ini文件。
# 配置uwsgi
[uwsgi]
# 配置和nginx之间的连接地址
socket=0.0.0.0:9090
# 配置项目在当前服务器中的绝对路径
chdir=/home/yun/Documents/HelloCode/mysite
# 相对路径指定当前项目中wsgi.py
wsgi-file=mysite/wsgi.py
# 设置启动的进程数量
processes=4
# 设置每个进程启动的线程数量
threads=2
# 设置主进程
master=True
# 指定保存主进程编号的文件
pidfile=uwsgi.pid
# 指定守护进程的日志存储
daemonize=uwsgi.log
在django项目的manage.py文件的同级目录创建Dockerfile文件。
# 基于哪个镜像来实现
FROM python:3.6.5
# 镜像作者
MAINTAINER yun
# python禁用缓存输出
ENV PYTHONUNBUFFERED 1
# 在容器内递归创建/home/yun/mysite文件夹
RUN mkdir -p /home/yun/mysite
# 设置容器内工作目录
WORKDIR /home/yun/mysite
# 将当前目录文件加入到容器工作目录中
ADD . /home/yun/mysite
# 安装django
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
# 安装uwsgi
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
启动测试
根据dockerfile构建docker-uwsig镜像,先在容器中启动uwsgi服务
# -t表示创建名django-py版本v1的镜像, .表示用当前路径的Dockerfile进行构建
docker build -t mysite-uwsgi:v1 .
# -d 后台运行 --name 命名容器名字 -p 设置端口映射(从宿主机到容器)
docker run -itd --name mysite-uwsgi -p 9090:9090 mysite-uwsgi:v1
# 进入容器终端,-i 交互式 -t 终端
docker exec -it container-id sh
# 进入容器终端之后启动uwsgi服务
uwsgi --ini uwsgi.ini
在django项目下进入刚才解压的nginx文件夹启动nginx服务
# 启动nginx
start ./nginx
# 停止nginx
./nginx -s quit
# 重新加载nginx
./nginx -s reload
启动之后打开127.0.0.1:80
就可以看到django的Hello World!
如果希望提供对外服务的话,可以在django的settings.py文件中更改IP地址ALLOWED_HOSTS = ['本机对外的IP地址']
,然后在nginx的nginx.conf文件中更改server_name 本机对外的IP地址;
,最后再重新加载nginx;此时不需要重新加载docker-uwsgi容器,因为docker-uwsgi容器的uwsgin.ini文件socket=0.0.0.0:9090
不需要更改,所以不需要重新加载docker-uwsgi容器