当前位置: 首页 > 科技观察

5分钟将 Django 项目进行容器化管理

时间:2023-03-13 14:52:41 科技观察

5分钟容器化管理Django项目本文转载请联系Python中文社区公众号。本教程将向您展示如何在5分钟内对Django项目进行Dockerize。如果您已经使用Django一段时间,那么您之前很可能听说过Docker。以下是Docker的简要总结,以及您应该考虑将其用于您的项目的原因。对容器化的Django项目进行Docker化可能是一项艰巨的任务。一个复杂的Django项目可能有许多移动部分:Django服务器、数据库,可能还有Redis和Celery进程。Docker简介Docker是一个非常流行的容器管理工具。容器非常强大,因为每次启动容器时,您的环境都会以完全相同的方式设置。这样做的好处是您的代码可以在任何支持Docker的操作系统上运行。您不必在主机上配置系统依赖性,从而节省了时间。您的本地环境和生产环境可以完全相同,从而消除仅在生产中发生的错误。了解Docker本教程不深入介绍Docker的工作原理。相反,本教程将重点介绍如何专门为Django设置Docker。如果你想了解更多关于Docker的知识,我的建议是阅读官方指南。这是一个相对较短的教程,但涵盖了您需要了解的所有内容!https://docs.docker.com/language/python/Dockerize你的Django项目,无论它是一个现有项目还是你正在开始一个新项目,我们都将使用相同的资源将Docker实施到我们的项目中。我们将使用的资源是CookiecutterDjango。Cookiecutter是一个用于从cookiecutter(项目模板)引导项目的工具。它在创建新项目时节省了大量时间,因为它为您配置了大量样板代码。https://github.com/pydanny/cookiecutter-djangoCookiecutterDjango最好的部分之一是它包含Docker配置。我们将使用此配置来了解如何在Django项目中实现Docker。入门首先,安装Docker。我们将创建两个Django项目。第一个是使用django-admin命令创建的简单项目。第二个项目将使用CookiecutterDjango创建。创建第一个项目virtualenvsimpleenvsourcesimpleenv/bin/activatepipinstalldjangodjango-adminstartprojectsimpleproject在另一个文件夹中创建第二个项目,首先使用pipinstallcookiecutter安装Cookiecutter。这将在全球范围内安装Cookiecutter,以便您始终可以访问它。我们现在可以使用任何Cookiecutter模板来引导项目。在新终端中运行以下命令以使用CookiecutterDjango创建项目。virtualenvadvancedVenvsourceadvancedVenv/bin/activatecookiecuttergh:pydanny/cookiecutter-django命令cookiecuttergh:pydanny/cookiecutter-django从Cookiecutter命令行使用GitHub模板pydanny/cookiecutter-django创建一个项目。此命令将提示您回答有关要构建的项目的几个问题。您可以按Enter将每个答案保留为默认答案。当提示使用use_docker选项时,请确保按“y”以使用Docker配置项目。完成所有提示后,会生成一个Django项目。我们将专门查看为配置Docker而创建的文件。它们是:compose文件夹.dockerignore文件local.yml文件production.yml文件TLDR这就是使用Dockerize容器化Django项目所需的全部内容。只需将这些文件夹和文件复制到您的其他Django项目中,并调整它们以指向正确的文件。如果您想查看更高级的Docker配置,请生成启用了use_celery标志的CookiecutterDjango项目。Docker配置将包括Celery和Redis的设置。了解Docker配置compose文件夹包含两个文件夹,一个用于本地开发,一个用于生产。同样,local.yml文件用于本地开发,production.yml文件用于生产。compose/local文件夹与local.yml文件密切相关。compose/production文件夹与production.yml文件密切相关。Docker-Compose是需要掌握的最重要的工具。我们用它来运行多容器Docker应用程序。它是安装Docker时附带的命令行程序的一部分。使用Docker运行项目确保您的计算机上运行了Docker应用程序,否则以下命令将无法正常运行。我们使用Docker-Compose来构建我们项目的镜像。图像就像我们容器应用程序的蓝图。imageimage构建完成后,我们创建一个容器,它基本上是imageimage的一个运行实例。如果我们对项目的依赖项(例如Python依赖项)进行了任何更改,那么我们需要重新构建Image才能使其生效。通过运行以下命令构建DockerImage映像:docker-compose-flocal.ymlbuild请注意,此命令采用带有-f标志的参数。这告诉Docker使用local.yml文件作为配置文件。如果我们打开local.yml文件,将会有以下内容:version:'3'volumes:local_postgres_data:{}local_postgres_data_backups:{}services:django:build:context:.dockerfile:./compose/local/django/Dockerfileimage:my_awesome_project_local_djangocontainer_name:djangodepends_on:-postgresvolumes:-.:/app:zenv_file:-./.envs/.local/.django-./.envs/.local/.postgresports:-"8000:8000"command:/startpostgres:构建:context:.dockerfile:./compose/production/postgres/Dockerfileimage:my_awesome_project_production_postgrescontainer_name:postgresvolumes:-local_postgres_data:/var/lib/postgresql/data:Z-local_postgres_data_backups:/backups:zenv_file:-./.envs/。当地的/。postgresdocs:image:my_awesome_project_local_docscontainer_name:docsbuild:context:.dockerfile:./compose/local/docs/Dockerfileenv_file:-./.envs/.local/.djangovolumes:-./docs:/docs:z-./config:/app/config:z-./my_awesome_project:/app/my_awesome_project:zports:-"7000:7000"command:/start-docs这个文件是一个配置文件,列出了运行我们的多容器应用程序的Docker所有需要注意的服务部分。一共有三种服务;django、postgres和文档。在每个服务下都有一些配置选项。如果您想深入了解每个命令的详细信息,请再次返回Docker文档。如果我们查看django服务,我们有以下内容:django:build:context:.dockerfile:./compose/local/django/Dockerfile这会配置服务,以便它使用特定的DockerFile。使用的DockerFile来自compose文件夹内的本地Docker配置。希望这显示了所有Docker配置是如何连接在一起的。local.yml文件包含指向compose文件夹内特定DockerFiles的服务。除了DockerFiles之外,还使用了其他文件。例如,在compose/django/Dockerfile的末尾我们有以下内容:...COPY./compose/production/django/entrypoint/entrypointRUNsed-i's/\r$//g'/entrypointRUNchmod+x/entrypoint...ENTRYPOINT["/entrypoint"]这告诉Docker,当Docker-Compose使用这个DockerFile时,它??会调用入口点脚本,这个脚本可以在compose/production/django/entrypoint中找到。打开文件并查看内容。你可以看到它基本上记录了Postgres数据库连接成功的时间。再看一下django服务:django:build:command:/startdjango服务的一个重要部分是command属性。这告诉Docker这个容器的启动命令是启动脚本。我们可以在compose/local/django中找到这个文件。在这个文件中,有以下内容:#!/bin/bashset-oerrexitset-opipefailset-onounsetpythonmanage.pymigratepythonmanage.pyrunserver_plus0.0.0.0:8000这应该看起来很熟悉。我们有Django迁移和正在运行的服务器。这里需要注意的是runserver_plus命令来自DjangoExtensions。如果您没有安装该软件包,您可以将runserver_plus替换为runserver。注意不要删除0.0.0.0:8000,因为容器需要将端口映射到主机。现在我们了解了Docker的配置方式,最后一部分是通过运行以下命令启动多容器应用程序:docker-compose-flocal.ymlup这将运行local.yml文件中的所有服务。运行此命令后,您可以在浏览器中转到本地主机,您应该会看到默认登录页面。通过此设置,您可以运行Django服务器、Postgres数据库和文档。您需要为项目配置Docker文件的最后更改。需要注意的几点:环境变量DockerComposefile将环境变量文件加载到容器中。这些环境变量文件存储在CookiecutterDjango生成的.envs文件夹中。为了能够读取这些值,您需要安装一个处理环境变量的包。CookiecutterDjango的推荐包是Django-Environ。您可以使用以下命令安装此软件包:pipinstalldjango-environ数据库设置数据库凭据也作为环境变量包含在内,因此请确保您具有正确的数据库设置。DATABASES={"default":env.db("DATABASE_URL")}DATABASES["default"]["ATOMIC_REQUESTS"]=True允许的主机确保允许的主机包括localhost。ALLOWED_HOSTS=["localhost","0.0.0.0","127.0.0.1"]最终,Docker依赖于两个组件:Docker-Compose和DockerFiles。我们有local.yml用于本地开发。该文件指向compose/local文件夹,其中包含在本地运行Docker所需的一切。同样,我们有用于生产的production.yml,它使用compose/production文件夹。我强烈建议在您自己的项目中使用CookiecutterDjango。它不仅是专业开发的重要资源,而且可用于学习许多最佳实践,包括如何在Django项目中配置Docker。