使用docker搭建Django框架与Nginx多域名配置

搭建之前的准备工作:

  1. Docker镜像
    Python3.5
    Mysql:5.7
    nginx:alpine
  2. 框架及拓展
    Django框架
    mysqlclient

进入CMD执行docker pull 镜像名称:版本  拉取所需的镜像到本地

构建Django镜像及容器

镜像准备完毕后,建立如下目录:

/code # 根目录
/code/docker # docker文件目录
/code/docker/django # 需要构建django镜像的文件目录
/code/docker/nginx # nginx虚拟域名配置目录
/code/static # 静态目录(可以配置vue或纯html的客户端目录)

构建django镜像所需文件

/code/docker/django/Dockerfile

FROM python:3.5 # 来源镜像
ENV PYTHONUNBUFFERED 1

RUN mkdir /app # 创建目录
RUN mkdir /app/db 
RUN mkdir /app/config
ADD ./requirements.txt /app/config/ # 添加本地文件到容器目录
RUN pip install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com -r /app/config/requirements.txt # pip安装框架及拓展
WORKDIR /app # 每次进入容器的工作目录

/code/docker/django/requirements.txt

Django
mysqlclient

nginx虚拟域名配置文件

/code/docker/nginx/django-index.conf

server {
        listen        80;
        server_name  youhostname;
        root   "/usr/share/nginx/html/hall";
        location / {
            # try_files $uri $uri/ /index.html =404;
			index index.html;
        }
        location = /50x.html {
			root   /usr/share/nginx/html;
		}
}

/code/docker/nginx/django-admin.conf

server {
        listen        80;
        server_name  youhostname;
        root   "/usr/share/nginx/html/admin";
		client_max_body_size 5M;
		keepalive_timeout 5;
        location /public {
		index index.html;
	}
	location / {
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		# enable this if and only if you use HTTPS
		# proxy_set_header X-Forwarded-Proto https;
		proxy_set_header Host $host;
		# we don't want nginx trying to do something clever with
		# redirects, we set the Host: header above already.
		proxy_redirect off;
		proxy_pass http://django-demo:8890;  # 转发到django处理请求
	}
		
}

创建docker-compose.yml文件

/code/docker/docker-compose.yml

version: '3' # docker-compose版本
services:
  db: # 数据库
    image: mysql:5.7 # 镜像和版本号
    ports:
        - "33060:3306" # 映射端口
    environment:
        MYSQL_ROOT_PASSWORD: "root" 
        MYSQL_USER: "root"
        MYSQL_PASSWORD: "root"
        MYSQL_DATABASE: "django"
       
  python-dome: # docker-compose编排名称,一般同微服务名称,注意不要与其他服务重名
    # image: "django:1.9.5" # docker镜像名及版本
    build: ./django
    container_name: django-demo # docker容器名
    # restart: always
    ports: # 映射端口
      - "8890:8890"
    volumes: # 挂载目录
      - ../:/app
    environment:  # 配置环境变量
      - TZ=Asia/Shanghai  # 设置时区
    command: bash -c "python /app/mysite/manage.py runserver 0.0.0.0:8890"  # 设置启动命令
    links:
        - db
    depends_on:
        - db   
  nginx: # docker-compose编排名称,一般同微服务名称,注意不要与其他服务重名
    # build: ./nginx
    image: "nginx:alpine"
    # restart: always
    ports: # 映射端口
      - "8891:80"
    volumes: # 挂载目录
      - ../static:/usr/share/nginx/html/static
      - ../mysite:/usr/share/nginx/html/admin
      - ./nginx:/etc/nginx/conf.d
    environment:  # 配置环境变量
      - TZ=Asia/Shanghai  # 设置时区
    links:
        - python-dome
    depends_on:
        - python-dome

在命令行进入/code/docker/django目录,执行 docker-compose build构建django镜像到本地,完成会返回success

docker_python-dome:latest就是镜像名称
构建完成后将自己的项目复制过来或创建新项目
新项目命令如下:

 # 进入容器
docker run -it -v /code:/app docker_python-dome:latest /bin/bash
# 进入容器后执行
django-admin startproject mysite &&  python ./mysite/manage.py migrate

退出容器,进入/code/docker 执行 docker-compose up -d

宿主机访问docker容器中nginx配置的虚拟域名

打开CMD执行命令ipconfig

hosts文件中配置图中的ip地址与域名映射。浏览器访问即可。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注