如何在Docker容器上运行Django应用程序(开发和生产环境)

您所在的位置:网站首页 dev开发环境 如何在Docker容器上运行Django应用程序(开发和生产环境)

如何在Docker容器上运行Django应用程序(开发和生产环境)

2023-03-23 15:00| 来源: 网络整理| 查看: 265

文章摘要

开发使用Django创建的Web应用程序?有几种在生产环境中运行它的方法。 最近,Kubernetes变得流行起来,并且在许多情况下将应用程序进行容器化。

本文介绍了如何在开发生产环境中使用Django应用程序创建Docker容器。

先决条件?环境

本文使用的环境是CentOS7,Docker,Django2系列。

只要Docker工作,Docker容器就可以工作,因此即使OS是Windows,也没有问题。

为开发环境

创建Docker容器

Docker文件使用

用于开发环境的Docker文件如下。

该Docker文件基于debian:10,并从源代码安装Python。 还有一个官方的Python Docker映像,因此可以使用它,但是需要像下面这样配置进行研究。

123456789101112131415161718192021222324252627282930313233343536373839404142FROM debian:10 # Install Python3.7.7 WORKDIR /work ADD ./Python-3.7.7.tar.xz . WORKDIR Python-3.7.7 RUN apt-get update && apt-get install -y \     gcc \     libbz2-dev \     libssl-dev \     libffi-dev \     libsqlite3-dev \     make \     tk-dev \     zlib1g-dev \     apache2-dev \     python3-dev \  && apt-get clean \  && rm -rf /var/lib/apt/lists/* RUN ./configure --enable-shared && \     make && \     make install && \     make distclean && \     ./configure && \     make && \     make altbininstall # Install with pip COPY ./requirements.txt . RUN pip3 install --upgrade pip setuptools RUN pip3 install --upgrade wheel RUN pip3 install -r requirements.txt # Deploy App WORKDIR / ADD ./deployfiles.tar.xz . WORKDIR /myapp CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"] Docker文件描述 1FROM debian:10

首先,在编写Docker文件时,指定用作基础的内容。在这里debian:10被指定。

来自

12345# Install Python3.7.7 WORKDIR /work ADD ./Python-3.7.7.tar.xz . WORKDIR Python-3.7.7

接下来是Python的安装。

WORKDIR是移动OS当前目录的语法。如果使用WORKDIR / work,将直接在根目录(/)下创建一个名为work的目录(如果没有指定目录,则将创建该目录),该目录将为当前目录。

ADD是ADD主机OS上的路径您可以将指定主机OS上的文件复制并扩展到Docker容器上的路径,方法是将其设置为Docker容器上的路径。 与COPY不同,ADD可以解压缩压缩文件。因此,应使用ADD将tar和xz之类的文件复制到Docker容器中。

12345678910111213RUN apt-get update && apt-get install -y \     gcc \     libbz2-dev \     libssl-dev \     libffi-dev \     libsqlite3-dev \     make \     tk-dev \     zlib1g-dev \     apache2-dev \     python3-dev \  && apt-get clean \  && rm -rf /var/lib/apt/lists/*

RUN可以在Docker容器上执行命令。我正在使用apt-get安装安装Python所需的依赖包。

apt-get clean,rm -rf / var / lib / apt / lists / *正在运行,以删除不必要的缓存和文件。通过删除此选项,可以使创建的Docker映像的大小保持较小。

1234567RUN ./configure --enable-shared && \     make && \     make install && \     make distclean && \     ./configure && \     make && \     make altbininstall

,。/ configure之后,进行安装。大约有4条额外的行,但是我添加了它们来处理错误。

*我认为这是一个组合问题,但是当我运行它时,我必须这样做。也许没有必要。

123456# Install with pip COPY ./requirements.txt . RUN pip3 install --upgrade pip setuptools RUN pip3 install --upgrade wheel RUN pip3 install -r requirements.txt

安装Python之后,安装Python软件包。在这里,使用pip命令安装requirements.txt中列出的软件包。

COPY与ADD类似,您可以通过将主机OS上的文件复制到COPY主机OS Docker容器上的路径,将主机OS上的文件复制到Docker容器上的路径。这实际上只是一个副本。

之后,使用RUN升级pip并根据requirements.txt安装Python软件包。

1234567# Deploy App WORKDIR / ADD ./deployfiles.tar.xz . WORKDIR /myapp CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"]

最后,将您的应用程序添加到Docker容器中。

deployfiles.tar.xz是一个名为myapp的压缩目录,该目录直接位于myapp下。

CMD是将命令设置为在Docker容器启动时执行的语法。这可以像Python列表格式一样描述,每个元素都用一个单字节空间连接。换句话说,命令如下所示:

123CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"] ↓ python3 manage.py runserver 0.0.0.0:80 构建Docker映像

运行以下命令以构建Docker映像。

1docker build -t test/myapp .

-t选项用于标记Docker映像。标记使其更易于管理。

命令的末尾输入Docker文件路径。在此,指定当前目录(。)。

默认情况下,从指定路径搜索名为Dockerfile的文件,因此上面创建的文件名设置为Dockerfile。

码头工人建造

要检查创建的图像,请执行以下命令。

1docker image ls 启动Docker容器

要从Docker映像启动Docker容器,请执行以下命令。

1docker run --name myapp -d -p 80:80 -v /work/db.sqlite3:/myapp/db.sqlite3 test/myapp:latest

--name选项为Docker容器命名。如果您想停止,启动或删除此Docker容器,这在以后很有用。该名称将是唯一的,因此,如果指定名称,则只需指定名称即可停止,启动或删除它。如果没有名称,请指定容器ID。

-d选项在后台运行容器。如果不添加它,则Docker容器的标准输出将显示在控制台上。您可以使用Ctrl c退出。在大多数情况下,我认为它将在后台运行,因此我将其添加。

-p选项将主机OS端口与Docker容器端口相关联。主机操作系统端口:Docker容器的端口。这次,我们使用Docker容器的端口80公开Django进程,因此指定80。

-v选项将主机OS卷(Docker卷或主机OS上的文件路径)与Docker容器的文件路径相关联。容器退出时不保存任何数据。因此,您要保留的数据必须存储在外部。建议使用Docker卷,但是由于开发环境的原因,数据保存在主机上OS的文件路径中。在这里,db.sqlite3从主机操作系统链接到Docker容器。

test / myapp是原始Docker映像的规范。最新的是版本名称,如果在构建Docker映像时未指定任何内容,则为最新的名称。您可以通过参考docker image ls输出的TAG列进行检查。

泊坞窗运行

执行以下命令以检查其是否已正常启动。

1docker ps

如果

STATUS列为UP,则表明它已正常启动。

如果未输出任何内容,请添加-a以检查已停止的进程。如果要检查Docker容器的日志,请执行以下命令。

1docker logs [コンテナ名またはコンテナID]

检查错误并采取纠正措施。

连接到Django应用程序

访问运行Docker的主机OS上IP地址的公共端口号。

为生产环境

创建Docker容器

Docker文件使用

用于生产环境的Docker文件如下。

与开发环境不同,您不能使用python3 manage.py runserver启动进程。在Apache等上运行更稳定。

我使用httpd:2.4作为此处的基础。 Apache Web服务器的官方Docker映像。

为了在Apache上运行Django,您需要在Apache中包含一个名为mod_wsgi的模块。因此,将安装Python和mod_wsgi。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354FROM httpd:2.4 # Install Python3.7.7 WORKDIR /work ADD ./Python-3.7.7.tar.xz . WORKDIR Python-3.7.7 RUN apt-get update && apt-get install -y \     gcc \     libbz2-dev \     libssl-dev \     libffi-dev \     libsqlite3-dev \     make \     tk-dev \     zlib1g-dev \     apache2-dev \     python3-dev \  && apt-get clean \  && rm -rf /var/lib/apt/lists/* RUN ./configure --enable-shared && \     make && \     make install && \     make distclean && \     ./configure && \     make && \     make altbininstall # Install with pip COPY ./requirements.txt . RUN pip3 install --upgrade pip setuptools RUN pip3 install --upgrade wheel RUN pip3 install -r requirements.txt # install ModWsgi WORKDIR /work ADD ./mod_wsgi-4.7.1.tar.gz . WORKDIR mod_wsgi-4.7.1 RUN ./configure \     --with-apxs=/usr/local/apache2/bin/apxs \     --with-python=/usr/local/bin/python3.7 && \     make && \     make install # Set Apache WORKDIR /usr/local/apache2/conf COPY ./httpd.conf . COPY ./server.crt . COPY ./server.key . COPY ./wsgi.conf ./extra COPY ./httpd-ssl.conf ./extra Docker文件描述 1FROM httpd:2.4

httpd:指定为2.4。

12345678910111213141516171819202122232425# Install Python3.7.7 WORKDIR /work ADD ./Python-3.7.7.tar.xz . WORKDIR Python-3.7.7 RUN apt-get update && apt-get install -y \     gcc \     libbz2-dev \     libssl-dev \     libffi-dev \     libsqlite3-dev \     make \     tk-dev \     zlib1g-dev \     apache2-dev \     python3-dev \  && apt-get clean \  && rm -rf /var/lib/apt/lists/* RUN ./configure --enable-shared && \     make && \     make install && \     make distclean && \     ./configure && \     make && \     make altbininstall

像在开发环境中一样安装Python。

123456# Install with pip COPY ./requirements.txt . RUN pip3 install --upgrade pip setuptools RUN pip3 install --upgrade wheel RUN pip3 install -r requirements.txt

如在开发环境中那样,使用pip根据requirements.txt安装Python软件包。

12345678910# install ModWsgi WORKDIR /work ADD ./mod_wsgi-4.7.1.tar.gz . WORKDIR mod_wsgi-4.7.1 RUN ./configure \     --with-apxs=/usr/local/apache2/bin/apxs \     --with-python=/usr/local/bin/python3.7 && \     make && \     make install

安装mod_wsgi以使Django与Apache一起使用。

12345678# Set Apache WORKDIR /usr/local/apache2/conf COPY ./httpd.conf . COPY ./server.crt . COPY ./server.key . COPY ./wsgi.conf ./extra COPY ./httpd-ssl.conf ./extra

最后,复制各种Apache配置文件和与证书相关的文件。

构建Docker映像

与开发环境相同。

创建Docker卷

执行以下命令以创建Docker卷。

1docker volume create --name volume-name

将使用

--name指定的名称创建一个Docker卷。该卷与Docker容器相关联。

Docker卷的寿命不同于Docker容器的寿命。即使Docker容器不见了,Docker卷也将继续存在,因此您可以持久保存数据。

启动Docker容器

要从Docker映像启动Docker容器,请执行以下命令。

1docker run --name myapp -d -p 443:443 -v volume-name:/myapp test/myapp

只有

-v选项与开发环境不同。在此,指定了Docker卷而不是主机OS上的文件路径。名为volume-name的Docker卷与Docker容器上的/ myapp相关联。这会将/ myapp上的数据保存到您的Docker卷中。

连接到Django应用程序

与开发环境相同。

使用的源文件

Python

mod wsgi



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3