背景 最近用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 :
添加自定义环境变量文件 在 根目录 下,新建文件 .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 文件:
FROM python:3.8 .3 -alpineWORKDIR /usr/src/app ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 ENV TZ Asia/ShanghaiRUN 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 COPY ./requirements.txt . RUN pip install -r requirements.txt 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