项目结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| dockerweb1/ ├── compose │ └── nginx │ ├── Dockerfile │ ├── log │ ├── nginx.conf │ └── ssl └── myproject ├── apps │ ├── debugTest │ ├── goods │ ├── __init__.py │ ├── __pycache__ │ ├── trade │ ├── user_operation │ ├── users │ └── utils ├── db.sqlite3 ├── db_tools ├── Dockerfile ├── extra_apps ├── manage.py ├── media ├── mycelery ├── myproject │ ├── asgi.py │ ├── __init__.py │ ├── __pycache__ │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── pip.conf ├── __pycache__ ├── requirements.txt ├── start.sh ├── static ├── templates ├── test.py ├── tests └── uwsgi.ini
|
这里主要需要步骤
- 1.编写一下nginx的dockerfile和nginx.conf
- 2.需要宿主机的static和media静态资源和两个容器的静态资源文件挂载在一起
- 3.特别注意设置django里面setting的static和media路径
- 4.注意挂载django和宿主机的django代码文件好在本地修改
nginx/Dockerfile
1 2 3 4 5 6 7 8 9
| 1 FROM nginx 2 3 RUN rm /etc/nginx/conf.d/default.conf \ 4 && mkdir -p /usr/share/nginx/html/static \ 5 && mkdir -p /usr/share/nginx/html/media \ 6 && mkdir -p /usr/share/nginx/ssl 7 8 ADD ./nginx.conf /etc/nginx/conf.d/ 9 CMD ["nginx", "-g", "daemon off;"]
|
nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # nginx配置文件。 2 upstream django { 3 ip_hash; 4 server 172.17.0.2:8000; # Django+uwsgi容器所在IP地址及开放端口,非宿主机外网IP 5 } 6 7 server { 8 listen 80; # 监听80端口 9 server_name localhost; # 可以是nginx容器所在ip地址或127.0.0.1,不能写宿主机外> 网ip地址 10 location /static { 11 alias /usr/share/nginx/html/static; # 静态资源路径 12 } 13 14 location /media { 15 alias /usr/share/nginx/html/media; # 媒体资源,用户上传文件路径 16 } 17 18 location / { 19 include /etc/nginx/uwsgi_params; 20 uwsgi_pass django; 21 uwsgi_read_timeout 600; 22 uwsgi_connect_timeout 600; 23 uwsgi_send_timeout 600; 24 }
|
双容器挂载运行
web容器
1 2 3 4 5
| sudo docker build -t myweb:2.0 . # 启动并运行容器2(名称mysite3), -d为后台运行,-v进行目录挂载。 sudo docker run -it --name mysite2 -p 8000:8000 \ -v /root/dockerweb1/myproject:/var/web/server/myproject \ -d myweb:2.0
|
nginx容器
1 2 3 4 5 6
| sudo docker build -t mynginx:1.0 . sudo docker run -it -p 80:80 --name myproject-nginx \ -v /root/dockerweb1/myproject/static:/usr/share/nginx/html/static \ -v /root/dockerweb1/myproject/media:/usr/share/nginx/html/media \ -v /root/dockerweb1/compose/nginx/log:/var/log/nginx \ -d mynginx:1.0
|
运行
``
sudo docker exec -it mysite3 /bin/bash start.sh