背景
最近用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