使用Docker和Django搭建简洁的开发环境

总结

本篇文章旨在介绍使用Docker来构建Django开发环境,而无需在本地机器上安装Python和Django。
有两种基于容器的环境构建方法,一种是只使用Dockerfile的方法,另一种是使用Docker Compose的方法。本文将仅涉及前者。

请参阅以下文章以获取有关后者的信息。
⇒构建简单的Docker Compose+Django开发环境

请注意,出于简单快速的目的,我们将使用Django标准的SQLite3数据库构建环境。如果您希望使用MariaDB或者PostgreSQL,请参考Docker官方文档中的相关内容。

前提是只需要一个选项。

我们假设你已经在安装了Docker Desktop的Windows或Mac上,或者在安装了Docker Engine的Linux上。

在Mac的终端上执行了文章中的命令,如果安装了Docker Desktop,应该也可以在Windows的命令提示符上执行相同的命令。

关于公式形象的概念

在Docker Hub上存在着Django的官方存储库,但正如其在顶部所标注的那样,它已被明确声明为不推荐使用并已经废弃了三年多的时间。

我尝试使用这个Docker镜像,但在项目创建阶段遇到了困难,所以甚至不能用于学习目的。我认为最好直接放弃,将其视为不存在的东西。

仅使用Dockerfile创建单个容器。

创建工作目录

使用Dockerfile创建一个使用单个Docker容器的Django开发环境。

在本地机器上创建一个任意的工作目录,并在其中创建名为 Dockerfile、requirements.txt 的文件,以及一个任意名称的目录(在这里我们称其为 src)。

Dockerfile
requirements.txt
src/

2. 编辑Dockerfile和requirements.txt文件

我会将Dockerfile的内容按照以下方式进行编辑。

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

我将按照下面的方式编辑requirements.txt的内容。

django
pyyaml

简单解释上述内容,首先是以Python的Docker镜像(基于Linux的Debian)为基础,创建一个名为code的目录在根目录下,然后使用pip命令安装requirements.txt中所列的包。

建议在安装Python3时一并安装pyyaml模块。如果缺少yaml模块,可能会导致在Django的dumpdata/loaddata过程中出现错误。

目录名称可以是除code之外的任何名称。

3. 创建Docker镜像

在存在Dockerfile和requirements.txt的目录下执行docker build命令。

$ docker build -t django_s .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
django_s            latest              0d5d29c3eef9        4 seconds ago       922MB

-t选项是用于指定镜像名称和标签的选项。
镜像名称可以是任意的,这里我们选择了django_s。
请确保不要忘记最后的句点(.)。

执行docker build命令后,通过docker images命令确认图像已成功创建。

4. 创建和启动容器

运行docker run命令,使用前一步创建的Docker镜像创建并启动容器。

$ docker run -itd -p 8000:8000 -v /Users/dev_user/django_test/src:/code --name django_s_test django_s
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
1ea546d25f3e        django_s            "python3"           11 seconds ago      Up 10 seconds       0.0.0.0:8000->8000/tcp   django_s_test

– IT选项是一个介于标准输入输出之间的选项,如果没有它,容器将在启动后立即关闭。

-d选项是背景执行的选项。
如果没有这个选项,命令执行时不会返回提示符,而是进入Python的交互模式等待输入。

-p选项是端口转发选项。
将本地机器的8000端口连接到容器的8000端口。

-v选项是将本地机器的目录挂载到容器内的选项。
在这里,我们将在1-1项中创建的src目录挂载到容器的/code目录。
如果在容器的/code目录中进行了更新,则将反映到src目录中,如果在本地机器的src目录中进行了更新,则将反映到/code目录中。
请根据自己本地机器的路径相应地修改目录路径。

–name选项用于指定容器的名称。
可以使用任何名称,这里我们选择了django_s_test。

执行docker run命令后,使用docker ps命令确认容器已成功启动并正在运行。

django_s_test_dashboard.png

创建Django项目

从这里开始,主要是关于Django的操作,而不是Docker。

首先,进入src目录,通过docker exec命令调用容器内的django-admin startproject命令来创建Django项目。
在这里,我们将项目名称设置为django_prj,但当然可以根据需要更改项目名称。

$ cd /Users/dev_user/django_test/src
$ docker exec django_s_test django-admin startproject django_prj .

在Docker容器中,可以使用docker exec [容器名称]来执行Docker容器内的任意命令。
由于django-admin命令是在安装Django后才可使用的命令,如果找不到该命令,则很可能是docker build失败。
在这种情况下,应检查Dockerfile中的pip install -r requirements.txt部分以及requirements.txt文件中的django拼写是否正确。

如果Django项目成功创建,那么源码目录下会生成项目的框架文件。

db.sqlite3
django_prj/
manage.py

6. 启动Django的开发服务器

Django拥有开发服务器功能,可以在不使用Apache或Nginx等Web服务器的情况下进行独立的运行确认。

与创建项目时的操作类似,通过docker exec命令在容器内执行python manage.py runserver命令。

要中断,按下Ctrl+C键。

$ docker exec django_s_test python manage.py runserver 0.0.0.0:8000
...(省略)...
Django version 3.1, using settings 'django_test.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

django_s_test_rocket.png

当网页显示了火箭的图片时,说明Django项目正常运行。
辛苦了:D┼┤

接下来,您可以阅读Django官方文档或市售参考书籍等,若有命令指定的情况,则在命令之前添加docker exec [容器名称],以便对Docker容器上的Django进行各种操作。

对此的感受

在Docker中,我找到了很多关于构建Django开发环境的信息,但是没有任何文章详细说明为什么不使用Docker Hub上提供的官方镜像,并且也没有在一篇文章中同时提及使用Docker和Docker Compose这两种方法。为了之后方便自己查看,所以我写了这篇文章。

以下是关于使用Docker Compose构建开发环境的文章。
⇒简易的Docker Compose+Django开发环境配置。

请尝试以下中文释义:
– 参考资料
– 引用
– 借鉴

    • Djangoの開発環境をDockerで作ってみた – Qiita

 

    とほほのDocker入門
广告
将在 10 秒后关闭
bannerAds