白粥

技术乐园

0%

基于docker部署django项目

背景

最近用django做了个小工具,部署的时候,想着尽量简单易操作,所以就做个docker镜像吧。

涉及到的工具版本如下:

  • vs code 1.50.0
  • Python 3.8.3
  • Django 3.0.5

项目结构

创建项目

具体操作可以参考官方中文文档

创建根目录:

mkdir things-docker-wrapper

进入 根目录 下,创建项目

django-admin startproject things

进入 things 项目文件夹,创建应用

python manage.py startapp things_app

到此为止,项目结构如下:

|--things-docker-wrapper
|--things
|--things
|--things_app

集成Docker

添加依赖文件

项目根目录下 新建文件 requirements.txt

Django==3.0.5

添加自定义环境变量文件

根目录 下,新建文件 .env:

DEBUG=1
SECRET_KEY=7+e=7_w30=re3#dp+!=dih(+ro&177777777!6(b66k@i(@mk#1
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
EMAIL_HOST_PASSWORD=1234567

我们可以将一些敏感信息在这里进行配置,然后修改 things > things > settings.py 文件中,相关字段的获取方式:

DEBUG = int(os.environ.get("DEBUG", default=0))
SECRET_KEY = os.environ.get("SECRET_KEY")
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ")
EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD")

添加Dockerfile文件

项目根目录 下,新建 Dockerfile 文件:

# pull official base image
FROM python:3.8.3-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 设置时区
ENV TZ Asia/Shanghai
RUN apk add -U --no-cache tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone

# 换源
RUN pip install -U pip
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
RUN pip config set install.trusted-host mirrors.aliyun.com

# install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY . .

添加docker-compose支持

根目录 下,新建 docker-compose.xml文件:

version: '3.7'

services:
web:
build: ./things
command: python manage.py runserver 0.0.0.0:8000 --noreload
volumes:
- ./things/:/usr/src/app/
ports:
- 58000:8000
restart: always
env_file:
- ./.env

项目结构

到此为止,项目结构如下:

|--things-docker-wrapper
|--things
|--things
|--things_app
|--Dockerfile
|--requirements.txt
|--.env
|--docker-compose.yml

构建与启动

根目录 下,执行命令

# 构建镜像
docker-compose build

# 启动
docker-compose up