由於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