使用Docker-compse编排Django+nginx+mysql

一、项目结构

[root@mail docker-feiyu]# tree
`-- dokcer-feiyu
    |-- docker-compose.yml
    |-- nginx
    |   |-- Dockerfile
    |   `-- nginx.conf
    |-- User
        |-- Dockerfile
        |-- manage.py
        |-- requirements.txt
        |-- static
        |-- users
        |-- db.sqlite3
        |-- gunicorn.conf
        |-- media
        |-- start.sh
        |-- templates
        `-- User 

二、nginx部分

1、先编写Dockerfile
[root@mail nginx]# vi Dockerfile
FROM nginx
#对外暴露端口
EXPOSE 80 8000
#RUN rm /etc/nginx/conf.d/default.conf
ADD nginx.conf /etc/nginx/conf.d/
RUN mkdir -p /usr/share/nginx/html/static
RUN mkdir -p /usr/share/nginx/html/media
2、准备nginx配置文件
[root@mail nginx]# vi nginx.conf
server {
listen 80;
server_name localhost;
charset utf-8;
error_log /tmp/nginx_error.log;
access_log /tmp/nginx_access.log;
location /media {
alias /usr/share/nginx/html/media;
}
location /static {
alias /usr/share/nginx/html/static;
}
location / {
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;              proxy_set_header Host http_host;
proxy_redirect off;
proxy_pass http://web:8000;
}
}
关于nginx配置,要注意以下两点,是非常重要的:
location
静态文件配置,nginx指定的静态文件原目录是在/usr/share/nginx/html/,而该目录下的静态文件是从web容器中通过volumes同步的。所以,等下docker-compose是非常非常重要的。
proxy_pass
这和你直接在主机上配置是不一样的,host不能写成具体的IP,要写服务名,这里要写web service的name,web是在docker-compose中定义的web应用的service名称。后面要写docker-compose的配置。

三、django部分

1、编写Dockerfile
[root@mail User]# vi Dockerfile
FROM python:3.5
#MySQL-Python必须得先安装这个库
RUN mkdir /User
#设置工作目录
WORKDIR /User
#将当前目录加入到工作目录中
ADD . /User
#install any needed pacakges in requirements.txt,你要把所有需要安装的Python模块加到这文
件中。
RUN pip install -r requirements.txt
#对外暴露端口
EXPOSE 80 8000
#设置环境变量
ENV SPIDER=/User
2、添加requirements.txt文件
Django
Pillow
PyMySQL
3、修改项目settings.py文件配置
修改地方有两个,
a、ALLOWED_HOSTS = [‘*’, ]
b、
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘dataname’,
‘USER’: ‘root’,
‘PASSWORD’: ‘123456’,
  ‘HOST’: ‘db’,
}
}

这里的NAME就是docker-compose.yml文件中的MYSQL_DATABASE,PASSWORD为docker-compose.yml文件中的MYSQL_ROOT_PASSWORD,HOST为docker-compose.yml 的db
4.启动脚本start.py
#!/bin/bash
python manage.py collectstatic –noinput &&
python manage.py migrate &&
gunicorn User.wsgi:application -c gunicorn.conf
5此外,django应用选择gunicorn做web服务器,gunicorn的配置文件如下:
workers=4
bind=[‘0.0.0.0:8000’]
proc_name=’blog’
pidfile=’/tmp/blog.pid’
worker_class=’gevent’
max_requests=6000

四、编写docker-compose文件

vi Docker-compose.yml
version: “3”
services:
db:
image: mysql
environment:
MYSQL_DATABASE: dataname
MYSQL_ROOT_PASSWORD: 123456
volumes:
- /srv/db:/var/lib/mysql
restart: always
web:
build: ./User
ports:
- “8001:8001”
volumes:
- ./User:/User
- /tmp/logs:/tmp
command: python3 manage.py runserver 0.0.0.0:8001
nginx:
build: ./nginx
ports:
- “81:80”
volumes:
- ./User/static:/usr/share/nginx/html/static
- ./User/media:/usr/share/nginx/html/media
links:
- web
depends_on:
- web
restart: always

五、编译和启动

a、编译
docker-compose build
b、启动
docker-compose up

docker-compose up -d(后台运行)

在浏览器中输入localhost就可以成功访问项目了

转自https://blog.csdn.net/hbnn111/article/details/77176629

猜你喜欢

转载自blog.csdn.net/bbwangj/article/details/80909752