GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Docker-Leitfaden:Dockerisieren der Python-Django-Anwendung

Docker ist ein Open-Source-Projekt, das Entwicklern und Systemadministratoren eine offene Plattform bietet, um Anwendungen überall als leichtgewichtigen Container zu erstellen, zu verpacken und auszuführen. Docker automatisiert die Bereitstellung von Anwendungen in Softwarecontainern.

Django ist ein in Python geschriebenes Webanwendungs-Framework, das der MVC-Architektur (Model-View-Controller) folgt. Es ist kostenlos erhältlich und wird unter einer Open-Source-Lizenz veröffentlicht. Es ist schnell und darauf ausgelegt, Entwicklern zu helfen, ihre Anwendung so schnell wie möglich online zu stellen.

In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie ein Docker-Image für ein vorhandenes Django-Anwendungsprojekt in Ubuntu 16.04 erstellen. Wir werden lernen, wie man eine Python-Django-Anwendung andockt und die Anwendung dann mithilfe eines Docker-Compose-Skripts als Container in der Docker-Umgebung bereitstellt.

Um unsere Python-Django-Anwendung bereitzustellen, benötigen wir zusätzliche Docker-Images. Wir benötigen ein Nginx-Docker-Image für den Webserver und ein PostgreSQL-Image für die Datenbank.

Was werden wir tun?

  1. Installieren Sie Docker-ce
  2. Installieren Sie Docker-compose
  3. Projektumgebung konfigurieren
  4. Erstellen und ausführen
  5. Testen

Schritt 1 – Docker-ce installieren

In diesem Tutorial installieren wir die Docker-ce Community Edition aus dem Docker-Repository. Wir werden Docker-ce Community Edition und Docker-Compose installieren, die Version 3 der Compose-Datei unterstützen.

Installieren Sie vor der Installation von Docker-ce die erforderlichen Docker-Abhängigkeiten mit dem Befehl apt.

sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Fügen Sie nun den Docker-Schlüssel und das Repository hinzu, indem Sie die folgenden Befehle ausführen.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Aktualisieren Sie das Repository und installieren Sie docker-ce.

sudo apt update
sudo apt install -y docker-ce

Nachdem die Installation abgeschlossen ist, starten Sie den Docker-Dienst und aktivieren Sie ihn so, dass er jedes Mal beim Systemstart gestartet wird.

systemctl start docker
systemctl enable docker

Als Nächstes fügen wir einen neuen Benutzer namens „omar“ hinzu und fügen ihn der Docker-Gruppe hinzu.

useradd -m -s /bin/bash omar
usermod -a -G docker omar

Melden Sie sich als omar-Benutzer an und führen Sie den Docker-Befehl wie unten gezeigt aus.

su - omar
docker run hello-world

Stellen Sie sicher, dass Sie die Hallo-Welt-Nachricht von Docker erhalten.

Die Docker-ce-Installation ist abgeschlossen.

Schritt 2 – Docker-compose installieren

In diesem Tutorial verwenden wir die neueste Docker-Compose-Unterstützung für Version 3 der Compose-Datei. Wir werden Docker-Compose manuell installieren.

Laden Sie die neueste Version von docker-compose mit dem curl-Befehl in das Verzeichnis „/usr/local/bin“ herunter und machen Sie es mit chmod ausführbar.

Führen Sie die folgenden Befehle aus.

sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Überprüfen Sie nun die Docker-Compose-Version.

docker-compose version

Und stellen Sie sicher, dass Sie die neueste Version von docker-compose 1.21 erhalten.

Die neueste Docker-Compose-Version, die Version 3 der Compose-Datei unterstützt, wurde installiert.

Schritt 3 – Projektumgebung konfigurieren

In diesem Schritt konfigurieren wir die Python-Django-Projektumgebung. Wir erstellen ein neues Verzeichnis ‚guide01‘ und machen es zum Hauptverzeichnis für unsere Projektdateien, wie Dockerfile, Django-Projekt, Nginx-Konfigurationsdatei usw.

Melden Sie sich beim Benutzer „omar“ an.

su - omar

Erstellen Sie ein neues Verzeichnis „guide01“ und wechseln Sie in das Verzeichnis.

mkdir -p guide01
cd guide01/

Erstellen Sie nun im Verzeichnis „guide01“ die neuen Verzeichnisse „project“ und „config“.

mkdir project/ config/

Hinweis:

  • Verzeichnis 'Projekt':Alle unsere Python-Django-Projektdateien werden in diesem Verzeichnis abgelegt.
  • Verzeichnis 'config':Verzeichnis für die Projektkonfigurationsdateien, einschließlich Nginx-Konfigurationsdatei, Python-Pip-Anforderungsdatei usw.

Erstellen Sie eine neue requirements.txt-Datei

Erstellen Sie als Nächstes mit dem Befehl vim eine neue Datei „requirements.txt“ im Verzeichnis „config“.

vim config/requirements.txt

Fügen Sie die Konfiguration unten ein.

Django==2.0.4  
gunicorn==19.7.0 
psycopg2==2.7.4

Speichern und beenden.

Erstellen Sie die virtuelle Nginx-Hostdatei django.conf

Erstellen Sie im Konfigurationsverzeichnis das Konfigurationsverzeichnis „nginx“ und fügen Sie die Konfigurationsdatei des virtuellen Hosts django.conf hinzu.

mkdir -p config/nginx/
vim config/nginx/django.conf

Fügen Sie dort die folgende Konfiguration ein.

upstream web {
  ip_hash;
  server web:8000;
}

# portal
server {
  location / {
        proxy_pass http://web/;
    }
  listen 8000;
  server_name localhost;

  location /static {   
    autoindex on;   
    alias /src/static/;   
  }
}

Speichern und beenden.

Erstellen Sie das Dockerfile

Erstellen Sie ein neues „Dockerfile“ im Verzeichnis „guide01“.

Führen Sie den folgenden Befehl aus.

vim Dockerfile

Fügen Sie nun unten das Dockerfile-Skript ein.

FROM python:3.5-alpine
ENV PYTHONUNBUFFERED 1 

RUN apk update && \
    apk add --virtual build-deps gcc python-dev musl-dev && \
    apk add postgresql-dev bash

RUN mkdir /config 
ADD /config/requirements.txt /config/ 
RUN pip install -r /config/requirements.txt
RUN mkdir /src
WORKDIR /src

Speichern und beenden.

Hinweis:

Wir wollen die Docker-Images für unser Django-Projekt auf Basis von Alpine Linux, der kleinsten Größe von Linux, erstellen. Unser Django-Projekt wird Alpine Linux mit installiertem Python 3.5 ausführen und das Paket postgresql-dev für die Unterstützung der PostgreSQL-Datenbank hinzufügen. Und dann installieren wir alle Python-Pakete, die in der Datei „requirements.txt“ aufgeführt sind, mit dem Python-Pip-Befehl und erstellen ein neues „/src“ für unser Projekt.

Docker-Compose-Skript erstellen

Erstellen Sie die Datei „docker-compose.yml“ im Verzeichnis „guide01“ mit dem folgenden vim-Befehl.

vim docker-compose.yml

Fügen Sie dort die folgende Konfiguration ein.

version: '3'
services:
  db:
    image: postgres:10.3-alpine
    container_name: postgres01
  nginx:
    image: nginx:1.13-alpine
    container_name: nginx01
    ports:
      - "8000:8000"
    volumes:
      - ./project:/src
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - web
  web:
    build: .
    container_name: django01
    command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn hello_django.wsgi -b 0.0.0.0:8000"
    depends_on:
      - db
    volumes:
      - ./project:/src
    expose:
      - "8000"
    restart: always

Speichern und beenden.

Hinweis:

Mit diesem Docker-Compose-Dateiskript erstellen wir drei Dienste. Erstellen Sie den Datenbankdienst „db“ mit PostgreSQL Alpine Linux, erstellen Sie den „nginx“-Dienst erneut mit Nginx Alpine Linux und erstellen Sie unseren Python-Django-Container mit den benutzerdefinierten Docker-Images, die aus unserer Dockerfile generiert wurden.

Django-Projekt konfigurieren

Kopieren Sie Ihre Django-Projektdateien in das Verzeichnis „project“.

cd ~/django
cp -r * ~/guide01/project/

Wechseln Sie in das Verzeichnis „Projekt“ und bearbeiten Sie die Anwendungseinstellung „settings.py“.

cd ~/guide01/project/
vim hello_django/settings.py

Hinweis:

Wir werden eine einfache Django-Anwendung namens „hello_django“-App bereitstellen.

Fügen Sie in der Zeile „ALLOW_HOSTS“ den Dienstnamen „web“ hinzu.

ALLOW_HOSTS = ['web']

Ändern Sie nun die Datenbankeinstellungen. Wir werden die PostgreSQL-Datenbank verwenden, die als Dienst namens „db“ mit Standardbenutzer und -kennwort ausgeführt wird.

DATABASES = {  
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

Und für das Konfigurationsverzeichnis „STATIC_ROOT“ fügen Sie diese Zeile am Ende der Zeile der Datei hinzu.

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Speichern und beenden.

Jetzt können wir das Django-Projekt unter dem Docker-Container erstellen und ausführen.

Schritt 4 – Docker-Image erstellen und ausführen

In diesem Schritt möchten wir ein Docker-Image für unser Django-Projekt erstellen, indem wir die Konfiguration im Verzeichnis „guide01“ verwenden.

Wechseln Sie in das Verzeichnis „guide01“.

cd ~/guide01/

Erstellen Sie nun die Docker-Images mit dem Befehl docker-compose.

docker-compose build

Starten Sie alle Dienste innerhalb des Docker-Compose-Skripts.

docker-compose up -d

Warten Sie einige Minuten, bis Docker unser Python-Image erstellt hat, und laden Sie die nginx- und postgresql-Docker-Images herunter.

Und wenn es fertig ist, überprüfen Sie den laufenden Container und listen Sie Docker-Images auf dem System mit den folgenden Befehlen auf.

docker-compose ps
docker-compose images

Und jetzt erhalten Sie drei ausgeführte Container und eine Liste der Docker-Images auf dem System, wie unten gezeigt.

Unsere Python-Django-Anwendung wird jetzt im Docker-Container ausgeführt, und Docker-Images für unseren Dienst wurden erstellt.

Schritt 5 – Testen

Öffnen Sie Ihren Webbrowser und geben Sie die Serveradresse mit Port 8000 ein, meine ist: http://ovh01:8000/

Jetzt erhalten Sie die standardmäßige Django-Homepage.

Testen Sie als Nächstes die Admin-Seite, indem Sie den Pfad „/admin“ zur URL hinzufügen.

http://ovh01:8000/admin/

Und Sie sehen die Anmeldeseite des Django-Administrators.

Die Dockerisierung der Python-Django-Anwendung wurde erfolgreich abgeschlossen.


Docker
  1. PostgreSQL in Docker ausführen, eine schnelle und praktische Anleitung

  2. So führen Sie Nginx in einem Docker-Container aus:Eine Schritt-für-Schritt-Anleitung

  3. Installieren Sie Python 3.11 auf Ubuntu 20.04 - Schritt-für-Schritt-Anleitung?

  4. Vollständiger Anfängerleitfaden für die Docker-Protokollierung

  5. Eine Kurzanleitung zur Verwendung von Docker Compose

So stellen Sie eine Python Flask-API-Anwendung auf Docker bereit

Vollständige Anleitung zum Entfernen von Docker-Images

Anfängerleitfaden zur Docker-Neustartrichtlinie

So installieren Sie Django unter Ubuntu 22.04

Docker auf Ubuntu installieren – Eine Schritt-für-Schritt-Anleitung

Einsteigerleitfaden für die Docker-Welt