搭建之前的准备工作:
Docker镜像
Python3.5
Mysql:5.7
nginx:alpine

框架及拓展
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

dj1

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

dj2

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

dj3
dj4

最后修改:2020 年 08 月 13 日 10 : 59 AM
如果觉得我的文章对你有用,请随意赞赏