📜  Docker化一个简单的Django应用(1)

📅  最后修改于: 2023-12-03 15:14:46.816000             🧑  作者: Mango

Docker化一个简单的Django应用

介绍

在本篇文章中,我们将使用 Docker 将一个 Django 应用程序容器化。Docker 是一种流行的虚拟化技术,可以使用它来创建独立的,轻量级的容器,每个容器中运行一个应用程序。使用 Docker 可以更轻松地管理应用程序的运行环境和部署,同时还可以实现隔离和可移植性。

在本文中,我们将首先介绍 Django 应用程序的设置过程,然后将其容器化。我们将使用 Docker Compose 来管理多个容器,并将其编排在一起。最后,我们将演示如何使用 Docker Compose 运行应用程序并访问它。

Django 应用程序的设置

我们将采用一个简单的 Django 应用程序,它包括一个用于展示 “Hello, World!” 的视图。

首先,我们需要在本地安装 Django。可以用以下命令在终端中安装 Django:

pip install django

然后,创建一个新的 Django 项目和一个应用程序:

django-admin startproject django_hello_world
cd django_hello_world
python manage.py startapp hello

接下来,我们将在 hello 应用程序中创建一个视图。在 hello/views.py 文件中添加以下代码:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, World!")

然后,在根 urls.py 文件中添加 URL 模式,让我们可以访问该视图:

from django.urls import include, path
from django.contrib import admin

urlpatterns = [
    path('hello/', include('hello.urls')),
    path('admin/', admin.site.urls),
]

接下来,我们需要为应用程序创建一个 urls.py 文件,并将其到指向 index 视图:

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

最后,我们需要运行迁移,以在数据库中创建必要的表:

python manage.py migrate

现在我们已经完成了 Django 应用程序的设置,并且我们可以使用以下命令在本地启动它:

python manage.py runserver

在浏览器中访问 http://localhost:8000/hello,你将看到 Hello, World! 的消息。

使用 Docker Compose 容器化 Django 应用程序

现在我们已经创建了 Django 应用程序并在本地启动它,接下来我们将使用 Docker Compose 将其容器化。

我们需要创建一个名为 Dockerfile 的文件,以便在 Docker 中运行我们的应用程序。在项目根目录中创建一个新文件 Dockerfile,并添加以下内容:

FROM python:3.8-slim-buster

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        gcc \
        libc-dev \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt /tmp/requirements.txt
RUN pip install --requirement /tmp/requirements.txt

WORKDIR /app
COPY . /app

CMD python manage.py runserver 0.0.0.0:8000

该 Dockerfile 使用 Python 3.8 作为基础镜像。它还安装 gcclibc-dev 进行一些必要的编译。它安装了一个名为 requirements.txt 的依赖包,并将应用程序的源代码复制到镜像中。最后,它设置了一个 CMD 命令,以在容器运行时启动应用程序。

在项目的根目录中创建一个 docker-compose.yml 文件,并添加以下内容:

version: "3.9"
services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      POSTGRES_USER: django
      POSTGRES_PASSWORD: django
      POSTGRES_DB: django

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://django:django@db:5432/django
    env_file:
      - .env

volumes:
  postgres_data:

该 Docker Compose 文件定义了两个服务:dbwebdb 服务使用 PostgreSQL 镜像,定义了一个名为 postgres_data 的卷,用于在容器之间共享数据。web 服务构建 Dockerfile 中定义的镜像,并在容器启动时运行一个命令。它将应用程序的代码卷挂载到容器中。它定义了一个端口映射用于从主机访问应用程序,并将环境变量设置为连接到 PostgreSQL 数据库。

现在我们已经定义了 docker-compose.yml,我们可以使用以下命令在容器中构建和运行应用程序:

docker-compose up

如果一切顺利,你可以在浏览器中访问 http://localhost:8000/hello 来查看应用程序运行的结果。

结论

在本篇文章中,我们演示了如何使用 Docker Compose 将一个简单的 Django 应用程序容器化。我们首先介绍了 Django 应用程序的设置过程,然后创建了一个 Dockerfile 来定义在容器中运行应用程序的步骤。最后我们使用 Docker Compose 对多个容器进行编排,并成功地在容器中运行了我们的应用程序。

现在你理解了如何使用 Docker 和 Docker Compose 来容器化一个简单的 Django 应用程序,你已经可以将这些知识应用在你自己的项目中了。