如何在Linux上对Django应用程序进行Docker化

时间:2020-02-23 14:31:32  来源:igfitidea点击:

在本教程中,将介绍仍处于开发阶段时如何为Django项目设置Docker环境。尽管我使用的是Ubuntu 18.04,但无论我们使用的Linux发行版是什么,其步骤都相同,除了Docker和docker-compose安装。

安装Docker引擎

我们需要在服务器/桌面上安装Docker运行时引擎。我们的Docker安装教程应该会很有帮助。

如何在CentOS/Debian/Ubuntu上安装Docker

环境设定

我为此项目设置了一个名为django-docker-dev-app的GitHub存储库。随意进行分叉或者克隆/下载。

首先,创建文件夹以保存项目。我的文件夹工作区称为django-docker-dev-app。将CD放入文件夹,然后在IDE中将其打开。

Docker文件

在容器化环境中,所有应用程序都位于容器中。容器本身由几个图像组成。我们可以创建自己的镜像或者使用Docker Hub中的其他镜像。 Dockerfile是Docker读取的Docker文本文档,用于自动创建/构建镜像。我们的Dockerfile将列出我们项目所需的所有依赖项。

创建一个名为Dockerfile的文件。

$nano Dockerfile

在文件中执行以下内容:

#base image
FROM python:3.7-alpine

#maintainer
LABEL Author="CodeGenes"

# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONBUFFERED 1

#copy requirements file to image 
COPY ./requirements.txt /requirements.txt

#let pip install required packages
RUN pip install -r requirements.txt

#directory to store app source code
RUN mkdir /app

#switch to /app directory so that everything runs from here
WORKDIR /app

#copy the app code to image working directory
COPY ./app /app

#create user to run the app(it is not recommended to use root)
#we create user called user with -D -> meaning no need for home directory
RUN adduser -D user

#switch from root to user to run our app
USER user

创建requirements.txt文件并添加项目需求。

Django>=2.1.3,<2.2.0
djangorestframework>=3.9.0,<3.10.0

创建将保存源代码的应用文件夹。现在我们准备建立我们的形象!

$mkdir app

在项目中打开一个终端,然后执行以下命令来构建我们的镜像:

$docker build .

最后告诉Docker在同一目录中检查Dockerfile,如果我们将文件放在其他位置,我们将把该路径写入该文件。然后,Docker将从Docker Hub调用必需的镜像以创建镜像。

使用Docker Compose

来自Docker文档; Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,我们可以使用YAML文件来配置应用程序服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

在Linux上安装Docker Compose

因为我们的项目将来会需要很多服务,所以最好为其创建一个多容器环境。例如,当我们切换到微服务架构时,可能需要一个容器来承载前端,另一个容器来承载数据库,另一个容器来承载后端。我们将创建一个docker-compose文件,该文件将定义项目需要的各种服务和容器。

创建一个名为docker-compose.yml的文件

version: "3"
services:
  ddda:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"

注意YAML文件格式!!!我们有一项名为ddda的服务(Django Docker Dev App)。

我们现在准备建立我们的服务:

$docker-compose build

成功构建后,我们将看到:成功标记djangodockerdevapp_ddda:latest

这意味着我们的镜像称为djangodockerdevapp_ddda:latest,我们的服务称为ddda

现在请注意,我们尚未创建Django项目!如果我们成功遵循了上述步骤,那么恭喜我们,我们已经为项目设置了Docker环境!接下来,通过执行以下操作开始开发:

创建Django项目:

$docker-compose run ddda sh -c “django-admin.py startproject app .”

要运行容器:

$docker-compose up

然后访问http://localhost:8000 /

进行迁移

$docker-compose exec ddda python manage.py migrate

从现在开始,我们将像上述命令一样运行Django命令,并在服务名称ddda之后添加命令。