[PYTHON] So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)

Artikelübersicht

Es gibt verschiedene Möglichkeiten, eine mit ** Django ** erstellte WEB-Anwendung in einer ** Entwicklungs- / Produktionsumgebung ** auszuführen. In letzter Zeit ist ** Kubernetes ** populär geworden und es gibt viele Fälle, in denen Anwendungen containerisiert werden.

Dieser Artikel beschreibt, wie ein ** Docker-Container ** mit einer ** Django-Anwendung ** in einer ** Entwicklungs- / Produktionsumgebung ** erstellt wird.

Voraussetzungen / Umgebung

Die in diesem Artikel verwendete Umgebung ist ** CentOS7 **, ** Docker **, ** Django2-Serie **.

Solange ** Docker ** funktioniert, ** funktioniert der Docker-Container **, sodass auch unter Windows kein Problem besteht.

Erstellen Sie einen Docker-Container für die Entwicklungsumgebung

Zu verwendende Docker-Datei

Die für die Entwicklungsumgebung verwendete Docker-Datei lautet wie folgt.

Diese Docker-Datei basiert auf ** debian: 10 ** und hat ** Python ** aus dem Quellcode installiert. Es gibt auch ein ** offizielles Python ** Docker-Image, daher ist es in Ordnung, es zu verwenden, aber es ist für Studienzwecke so konfiguriert.

FROM 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"]

Beschreibung der Docker-Datei

FROM debian:10

Geben Sie beim Schreiben einer ** Docker ** -Datei zunächst an, was als ** Basis ** verwendet werden soll. Hier wird ** debian: 10 ** angegeben.

FROM

# Install Python3.7.7

WORKDIR /work
ADD ./Python-3.7.7.tar.xz .
WORKDIR Python-3.7.7

Als nächstes folgt die Installation von ** Python **.

** [WORKDIR] 7 ** ist eine Syntax, die das aktuelle Verzeichnis des Betriebssystems verschiebt. Wenn ** WORKDIR / work ** angegeben ist, wird ein Verzeichnis mit dem Namen ** work ** direkt unter dem ** Stammverzeichnis (/) ** erstellt (** es wird erstellt, wenn kein angegebenes Verzeichnis ** vorhanden ist), und das ist das aktuelle. Es wird ein Verzeichnis sein.

** ADD ** kann ** in den Pfad im Docker-Container kopiert / erweitert ** werden, indem ** ADD auf dem Host-Betriebssystem auf den Pfad im Docker-Container ** gesetzt wird. Ich kann es schaffen ** Im Gegensatz zu [ADD is COPY] 5 ** können Sie ** eine komprimierte Datei dekomprimieren **. Daher sollten Dateien wie ** tar ** und ** xz ** mit ** ADD ** in den ** Docker-Container ** kopiert werden.

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] 3 ** kann Befehle im Docker-Container ausführen. Ich verwende apt-get, um die abhängigen Pakete zu installieren, die für die Installation von ** Python ** benötigt werden.

** apt-get clean **, ** rm -rf / var / lib / apt / lists / \ *** werden ausgeführt, um unnötige Caches und Dateien zu entfernen. Wenn Sie dies entfernen, können Sie die ** Kapazität des erstellten ** Docker-Images ** klein ** halten.

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

Der Rest ist **. / Configure **, ** make **, ** make install **. Es gibt ungefähr 4 zusätzliche Zeilen, aber diese werden hinzugefügt, um Fehler zu behandeln.

*** Ich denke, es ist ein Kombinationsproblem **, aber als ich es ausgeführt habe, musste ich dies tun. Vielleicht ist es unnötig.

# Install with pip

COPY ./requirements.txt .
RUN pip3 install --upgrade pip setuptools
RUN pip3 install --upgrade wheel
RUN pip3 install -r requirements.txt

Installieren Sie nach der Installation von ** Python ** das Paket ** Python **. Verwenden Sie hier den Befehl ** pip **, um die in ** require.txt ** aufgeführten Pakete zu installieren.

** [COPY ähnelt ADD] 5 **, ** COPY Path auf dem Host-Betriebssystem Pfad auf dem Docker-Container ** Kopieren Sie Dateien auf dem Host-Betriebssystem in den Pfad auf dem Docker-Container Ich kann es schaffen Dies ist buchstäblich nur eine Kopie.

Aktualisieren Sie danach ** pip ** mit ** [RUN] 3 ** und installieren Sie das ** Python ** -Paket basierend auf ** require.txt **.

# Deploy App

WORKDIR /
ADD ./deployfiles.tar.xz .
WORKDIR /myapp

CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"]

Fügen Sie abschließend Ihre Anwendung ** zum Docker-Container ** hinzu.

** deployfiles.tar.xz ** ist ein komprimiertes Verzeichnis mit dem Namen ** myapp **, mit ** manage.py ** direkt unter ** myapp **.

** [CMD] 4 ** ist die Syntax zum Festlegen des Befehls, der ausgeführt werden soll, wenn der ** Docker-Container ** gestartet wird. Dies kann wie ein ** Python ** -Listenformat beschrieben werden, und jedes Element wird mit einem Leerzeichen halber Breite verbunden. Mit anderen Worten lautet der Befehl wie folgt.

CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"]
↓
python3 manage.py runserver 0.0.0.0:80

Erstellen Sie ein Docker-Image

Führen Sie den folgenden Befehl aus, um das ** Docker-Image ** zu erstellen.

docker build -t test/myapp .

Die Option ** -t ** wird verwendet, um das ** Docker-Image ** zu markieren. Das Markieren erleichtert die Verwaltung.

Geben Sie am Ende des Befehls den Pfad der ** Docker-Datei ** ein. Hier wird ** aktuelles Verzeichnis (.) ** angegeben.

Standardmäßig wird die Datei mit dem Namen ** Dockerfile ** über den angegebenen Pfad durchsucht, daher sollte der oben erstellte Dateiname ** Dockerfile ** sein.

docker build

Führen Sie den folgenden Befehl aus, um das erstellte Bild zu überprüfen.

docker image ls

Starten Sie den Docker-Container

Führen Sie den folgenden Befehl aus, um den ** Docker-Container ** über das ** Docker-Image ** zu starten.

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

Die Option ** --name ** benennt den ** Docker-Container **. Dies ist später nützlich, wenn Sie diesen ** Docker-Container ** stoppen, starten oder löschen möchten. Der Name ist eindeutig. Wenn Sie ihm also einen Namen geben, können Sie ihn stoppen, starten oder löschen, indem Sie einfach den Namen angeben. Wenn kein Name vorhanden ist, geben Sie die Container-ID an.

Die Option ** -d ** führt den Container im ** Hintergrund ** aus. Wenn dies nicht angehängt ist, wird die Standardausgabe von ** Docker Container ** auf der Konsole angezeigt. Sie können mit ** Strg + c ** beenden. Ich denke, dass es in den meisten Fällen im Hintergrund läuft, also werde ich es hinzufügen.

Die Option ** - p ** ordnet den ** Host-Betriebssystem-Port ** dem ** Docker-Container-Port ** zu. ** Host-Betriebssystem-Port: Docker-Container-Port **. Geben Sie diesmal 80 an, da der ** Django ** -Prozess über ** Port 80 ** des Docker-Containers veröffentlicht wird.

Die Option ** -v ** ordnet das ** Host-Betriebssystem-Volume (Docker-Volume oder Dateipfad auf dem Host-Betriebssystem) ** dem ** Docker-Container-Dateipfad ** zu. Der Container enthält beim Beenden keine Daten. Daher müssen die Daten, die Sie behalten möchten, extern gespeichert werden. ** Empfohlen wird Docker-Volume **, jedoch aufgrund der Entwicklungsumgebung ** Daten im Betriebssystemdateipfad ** auf dem Host speichern. Hier ist ** db.sqlite3 ** vom ** Host-Betriebssystem ** mit dem ** Docker-Container ** verknüpft.

** test / myapp ** ist die Spezifikation des zugrunde liegenden ** Docker-Images **. ** neueste ** ist der Versionsname und wird ** neueste ** sein, wenn beim Erstellen des ** Docker-Images ** nichts angegeben wird. Sie können dies überprüfen, indem Sie sich auf die Spalte ** TAG ** beziehen, die von ** docker image ls ** ausgegeben wird.

docker run

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob es normal gestartet wurde.

docker ps

Wenn die Spalte ** STATUS ** ** UP ** ist, wurde sie normal gestartet.

Wenn nichts ausgegeben wird, fügen Sie ** -a ** hinzu, um den gestoppten Prozess zu überprüfen. Wenn Sie das Protokoll von ** Docker-Container ** überprüfen möchten, führen Sie den folgenden Befehl aus.

docker logs [Containername oder Container-ID]

Überprüfen Sie den Fehler und ergreifen Sie Korrekturmaßnahmen.

Stellen Sie eine Verbindung zur Django-Anwendung her

Greifen Sie auf die öffentliche Portnummer der IP-Adresse des ** Host-Betriebssystems ** zu, auf dem ** Docker ** ausgeführt wird.

Erstellen eines Docker-Containers für die Produktionsumgebung

Zu verwendende Docker-Datei

Die für die Produktionsumgebung verwendete ** Docker-Datei ** lautet wie folgt.

Im Gegensatz zur Entwicklungsumgebung können Sie mit ** python3 manage.py runserver ** keinen Prozess starten. Es ist stabiler, auf ** Apache ** usw. zu laufen.

Hier verwenden wir ** httpd: 2.4 ** als Basis. [** Offizielles Docker-Image ** von Apache Web Server **] 1.

Um ** Django ** auf ** Apache ** auszuführen, müssen Sie ein Modul namens ** [mod_wsgi] 2 ** in ** Apache ** einfügen. Daher werden ** Python ** und ** [mod_wsgi] 2 ** installiert.

FROM 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

Beschreibung der Docker-Datei

FROM httpd:2.4

** [httpd: 2.4] 1 ** wird als Basis angegeben.

# 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

Installieren Sie ** Python ** wie in der Entwicklungsumgebung.

# Install with pip

COPY ./requirements.txt .
RUN pip3 install --upgrade pip setuptools
RUN pip3 install --upgrade wheel
RUN pip3 install -r requirements.txt

Installieren Sie das ** Python ** -Paket basierend auf ** require.txt ** mit ** pip ** wie in der Entwicklungsumgebung.

# 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 

Installiere ** [mod_wsgi] 2 **, damit ** Django ** an ** Apache ** funktioniert.

# 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

Kopieren Sie abschließend die ** Apache ** verschiedenen ** Konfigurationsdateien ** und ** zertifikatsbezogenen ** Dateien.

Erstellen Sie ein Docker-Image

Ähnlich wie in der Entwicklungsumgebung.

Erstellen eines Docker-Volumes

Führen Sie den folgenden Befehl aus, um ** [Docker Volume] 10 ** zu erstellen.

docker volume create --name volume-name

** [Docker Volume] 10 ** wird mit dem durch ** - name ** angegebenen Namen erstellt. Dieses Volume ist mit ** Docker-Container ** verknüpft.

** [Docker Volume] 10 ** hat eine andere Lebensdauer als ** Docker Container **. Selbst wenn der ** Docker-Container ** verschwindet, bleibt ** [Docker-Volume] 10 ** bestehen, sodass Daten beibehalten werden können.

Starten Sie den Docker-Container

Führen Sie den folgenden Befehl aus, um den ** Docker-Container ** über das ** Docker-Image ** zu starten.

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

Nur die Option ** -v ** unterscheidet sich von der Entwicklungsumgebung. Hier wird ** [Docker-Volume] 10 ** anstelle von ** Dateipfad ** auf dem Host-Betriebssystem angegeben. Ein ** [Docker-Volume] 10 ** mit dem Namen ** Volume-Name ** ist ** / myapp ** im ** Docker-Container ** zugeordnet. Dadurch werden die Daten auf ** / myapp ** unter ** [Docker Volume] 10 ** gespeichert.

Stellen Sie eine Verbindung zur Django-Anwendung her

Ähnlich wie in der Entwicklungsumgebung.

Quelldatei verwendet

Python

mod wsgi

Recommended Posts

So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
So erstellen Sie eine Django (Python) -Umgebung auf Docker
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
So führen Sie Django unter IIS auf einem Windows-Server aus
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Führen Sie Matplotlib auf einem Docker-Container aus
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Führen Sie matplotlib in einem Windows Docker-Container aus
Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
So machen Sie den Containernamen in Docker als Subdomain zugänglich
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
[Hinweis] So erstellen Sie eine Mac-Entwicklungsumgebung
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
Starten Sie Django auf einem Docker-Container mit Docker-Compose Up
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
So erstellen Sie eine schöne Python-Umgebung auf einem neuen Mac und installieren Jupter Notebook
So stellen Sie pyenv unter Amazon Linux und Ubuntu ein, um eine Python 3.6.0-Umgebung zu erstellen
Ein Hinweis zur einfachen Vorbereitung einer Linux-Übungsumgebung
So führen Sie ein geschultes Transformatormodell lokal auf CloudTPU aus
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
So erstellen Sie eine neue virtuelle Python-Umgebung unter Ubuntu
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Verliere nicht gegen Ruby! Wie man Python (Django) auf Heroku ausführt
Erstellen Sie eine VS Code + Docker-Entwicklungsumgebung mit Linux VM
Hinweise zum Laden einer virtuellen Umgebung mit PyCharm
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
So richten Sie WSL2 unter Windows 10 ein und erstellen eine Lernumgebung für Linux-Befehle
Stellen Sie die Django-Anwendung mit Docker bereit
Wie man Matplotlib auf Heroku ausführt
Hinweise zum Erstellen einer LAMP-Umgebung mit Vagrant und VirtulBox
So führen Sie Jupyter und Spark auf einem Mac mit minimalen Einstellungen aus
So erstellen Sie eine Python-Umgebung mit Virtualenv unter Ubuntu 18.04 LTS
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
So stellen Sie eine Webanwendung in der Alibaba Cloud als Freiberufler bereit
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
Startete eine Webanwendung auf AWS mit Django und wechselte Jobs
Erstellen einer Umgebung zum Ausführen von ChainerMN auf einer AWS-GPU-Instanz
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Build Docker / Django / Nginx / MariaDB-Umgebung ~
So teilen und speichern Sie einen DataFrame
Debuggen eines Python-Programms durch Remoteverbindung mit einem Docker-Container in einer WSL2-Umgebung mit VS-Code
Django-Entwicklung mit virtualenv Prozeduren von der Erstellung der virtuellen Umgebung bis zur Erstellung eines neuen Projekts / einer neuen Anwendung und der anfänglichen Einstellung
Führen Sie Python-Dateien in einem Docker-Container auf einem Remote-Raspbian über PyCharm aus
So erstellen Sie eine NVIDIA Docker-Umgebung
So führen Sie einen Prozessthread nur auf einem bestimmten CPU-Kern aus
Erstellen Sie eine Django-App auf Docker und stellen Sie sie in AWS Fargate bereit
Verwendung von Tensorflow unter Docker-Umgebung
Führen Sie eine Python-Webanwendung mit Docker aus
So testen Sie auf einer von Django authentifizierten Seite
Hinweise zum Ausführen von Cython unter OSX
Erstellen Sie Linux in einer Windows-Umgebung. Schritte zum Installieren und Migrieren von Laradock
So führen Sie Maya Python-Skripte aus
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Erstellen Sie ein Django-Projekt und eine Django-Anwendung in einer virtuellen Python-Umgebung und starten Sie den Server
So installieren Sie Fast.ai auf einer Alibaba Cloud-GPU und führen es auf einem Jupyter-Notebook aus