在Docker调试Django项目
Docker可以很好地管理我们的环境,同时还可以保持宿主机的环境是十分干净的。因为之前一直都是使用的Django进行Web开发,这几天突发奇想,想着先使用Docker打包Django应用,之后在Dccker容器中调试我们的项目。
环境准备
首先需要一个能正常运行的Django项目,这里以一个原始的Django项目模板为例。它正常运行起来像是这样。
接下来我们需要来编写Dockerfile来打包我们的Django应用。
环境搭建过程
使用Dockerfile构建Docker镜像
在构建镜像之前,需要将当前项目的依赖输出到一个文件中,在当前项目根目录下使用如下命令将依赖库文件导入到 requirements.txt
中:
pip freeze > requirements.txt
在项目的根目录
创建一个名为Dockerfile的文件,并写入以下内容:
# 初始镜像
FROM python:3.7.4
# 更新并安装依赖
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# 设定在容器中的工作目录
WORKDIR /usr/src/app
# 安装python依赖
COPY requirements.txt ./
RUN pip install -r requirements.txt
# 复制当前项目到容器中
COPY . .
# 暴露的端口
EXPOSE 8000
# 执行启动脚本
# RUN chmod a+x ./bin/ && sh ./bin/start.sh
# 启动容器
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
之后可以通过命令的方式来构建并运行容器:
# 构建Docker容器
docker build -t docker-django-app .
# 以后台的方式运行Docker容器
docker run -d -p 8001:8000 --name docker-django-app-test docker-django-app
参数解释:
-p 8000:8000
表示将主机的8001端口映射到容器的8000端口上--name docker-django-app-test
表示当前运行的容器的名字叫docker-django-app-test
构建Docker镜像:
运行Docker镜像:
使用docker ps -a
命令查看当前的docker镜像运行情况:
此时在浏览器中输入:http://127.0.0.1:8001
即可访问Django应用。
还可以通过Pycharm提供的运行选项来打包Docker镜像,具体操作如下:
- 配置Docker构建和运行选项。注意在下图中的对应位置勾选上
Run build image
,这样在打包容器完成后会同时运行容器。
- 打包并运行Docker镜像。
- 查看Docker镜像的运行情况
- 在浏览器中输入
http://127.0.0.1:8002
来查看Django应用的运行情况。
配置项目的Python解释器为Docker镜像中的解释器
在配置完成后,Pycharm会进入到镜像中加载这个镜像中的python包,速度可能有点慢,请耐心等待!
测试在Docker中调试Django
之后在浏览器在浏览器中输入 http://127.0.0.1:8003
就可以看到启动页面了。
同时我们对代码的修改也能实时地反映出来,即:Django的服务器会自动监听文件的更改进行重启。
为了说明可以正常在Docker中调试Django进程,编写了以下测试函数进行测试(在urls.py
):中写入以下内容:
from django.http import HttpResponse
def test_debug(request):
a = 2 + 3
return HttpResponse("a = " + a)
urlpatterns = [
path('', test_debug),
path('admin/', admin.site.urls),
]
现在再访问 http://127.0.0.1:8003
即可看到如下图所示的调试界面。
至此,整个在Docker中调试Django应用的环境已经搭建完毕了!!!撒花🎉🎉🎉