django双容器编排

项目结构

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

分享到