如何在Docker容器上运行Django应用程序(开发和生产环境) |
您所在的位置:网站首页 › dev开发环境 › 如何在Docker容器上运行Django应用程序(开发和生产环境) |
文章摘要
开发使用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.4httpd:指定为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 |