Docker搭建Django环境(nginx + uwsgi + django)

由于Docker官方提供的Django很久都没有更新
所以使用官方的python镜像,在此基础上再安装django和uwsgi
注意:一定要声明端口,因为使用其他容器如nginx时,需要访问到

FROM python:3.6.4-stretch
 
RUN pip install django uwsgi;
 
EXPOSE 80

另外使用官方的nginx镜像,将两个容器一起运行
整个流程是 客户端(浏览器) -> nginx -> uwsgi -> django(python)

通过定义docker-compose.yml来将两个容器运行起来

nginx:
    container_name: nginx
    image: registry.cn-shenzhen.aliyuncs.com/beni/nginx:latest
    ports:
        - 80:80
    volumes:
        - C:/data/django/nginx:/etc/nginx/conf.d
        - C:/data/django/www:/data/django/www
    links:
        - django:django
 
django:
    container_name: django
    image: registry.cn-shenzhen.aliyuncs.com/beni/django:latest
    volumes:
        - C:/data/django/www:/data/django/www
    command: uwsgi --ini /data/django/www/mblog/uwsgi.ini

uwsgi需要先启动起来,nginx才能去访问,启动uwsgi可以直接命令行带参数,或者可以写ini的配置文件去启动(这样会更新维护和管理)
这里涉及非常多的参数,目前还没完全搞懂
注意:一定要使用socket定义,并且跟nginx定义的端口一致,并且跟容器暴露的端口一致
注意:路径问题一定要处理好,这里是定义chdir跳去django项目的目录

[uwsgi]
chdir     = /data/django/www/mblog
module    = mblog.wsgi
socket    = :80
processes = 4
threads   = 10
enable-threads
master-as-root

nginx需要修改配置去指向uwsgi,并且要指定static资源,这里只列出关键的位置

location /static {
    alias /data/django/www/mblog/static;
}
location / {
    include uwsgi_params;
    uwsgi_pass django:80;
}

需要在settings.py文件中指定static目录,如果不指定会导致无法执行collectstatic
STATIC_ROOT = os.path.join(BASE_DIR, “static/”)

执行collectstatic将所有静态文件都整理到指定目录
python manage.py collectstatic

你可能感兴趣的:(docker)