django单容器编排

文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dockerweb1/
└── myproject
├── apps
├── db.sqlite3
├── db_tools
├── Dockerfile
├── extra_apps
├── manage.py
├── media
├── mycelery
├── myproject
├── pip.conf
├── __pycache__
├── requirements.txt
├── start.sh
├── static
├── templates
├── test.py
├── tests
└── uwsgi.ini

dockerfile

1
2
3
4
5
6
7
8
9
1 FROM python:3.8.1
2 MAINTAINER chunjianghuayueye
3 ENV PYTHONUNBUFFERED 1
4 RUN mkdir -p /var/web/server/myproject
5 WORKDIR /var/web/server/myproject
6 ADD . /var/web/server/myproject
# dockerfile的volume无法指定挂载,想要指定使用docker run时添加或者docker-compose
7 VOLUME ["/var/web/server/myproject"]
8 RUN pip install -r requirements.txt

start.sh

1
2
3
4
#!/bin/bash
python manage.py makemigrations&&
python manage.py migrate&&
python manage.py runserver 0.0.0.0:8000

修改setting中的配置文件

  • 如mysql、redis的连接

生成镜像&运行容器

1
2
3
4
5
6
7
docker build -f Dockerfile -t myweb:1 .
docker run -it -d -p 82:8000 --name myweb myweb:1
# 进入容器内
docker exec -it myweb /bin/bash
# 执行初始化
/bin/bash start.sh
# 也可以直接在dockerfile里面写ENTRYPOINT /bin/bash ./start.sh

然后既可以在82端口访问我们的项目

配置uwsgi启动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
docker exec -it myweb /bin/bash
apt-get update
apt-get install vim
pip install uwsgi

vim uwsgi.ini
[uwsgi]
project=myproject
uid=www-data
gid=www-data
base=/var/web/server/

chdir=%(base)/%(project)
module=%(project).wsgi:application
master=True
processes=4

http=0.0.0.0:8000 #这里直接使用uwsgi做web服务器,使用http。如果使用nginx,需要使用socket沟通。
buffer-size=65536

pidfile=/tmp/%(project)-master.pid
vacuum=True
max-requests=5000
daemonize=/tmp/%(project)-uwsgi.log

#设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
harakiri=60
#当一个请求被harakiri杀掉会,会输出一条日志
harakiri-verbose=true

vim start.sh
# 把runserver替换为uwsgi启动
#!/bin/bash
python manage.py makemigrations&&
python manage.py migrate&&
uwsgi --ini /var/www/html/mysite2/uwsgi.ini
分享到