Docker-Praxis: Python-Anwendungscontainerisierung

Docker-Praxis: Python-Anwendungscontainerisierung

1. Einleitung

Container nutzen einen Sandbox-Mechanismus, um sich gegenseitig zu isolieren. Der Vorteil besteht darin, dass die im Container bereitgestellten Anwendungen sich nicht gegenseitig beeinflussen und unabhängig voneinander ausgeführt werden, was für mehr Sicherheit sorgt. Dieser Artikel stellt hauptsächlich das Ausführen von Python-Anwendungen (Django) in Docker-Containern, das Schreiben von Docker-Dateien zur Automatisierung der Image-Erstellung und das Docker-Artefakt Compose vor.

2. Schreiben Sie die Dockerfile-Datei

Das von der offiziellen Website heruntergeladene Python-Image ist relativ optimiert und webanwendungsbezogene Abhängigkeiten müssen weiterhin selbst installiert werden. Durch das Schreiben einer Docker-Datei können Sie den Prozess der Image-Erstellung automatisieren. Nachfolgend sind einige Beispiele aufgeführt:

VON python:3.6.4

RUN mkdir /code \
&&apt-get update \
&&apt-get -y installiere freetds-dev \
&&apt-get -y installiere unixodbc-dev
App/Code kopieren 
KOPIEREN Sie requirements.txt /code
Führen Sie den Befehl „pip install -r /code/requirements.txt -i https://pypi.douban.com/simple“ aus.
ARBEITSVERZEICHNIS /code

CMD ["/bin/bash","run.sh"]

FROM: Ein sehr wichtiger Befehl im Dockerfile, der verwendet wird, um ein Basis-Image für den Build-Prozess anzugeben. Beispielsweise wird oben python3.6.4 als Basisimage angegeben, und alle nachfolgenden Vorgänge werden basierend auf diesem Image angepasst. Wenn es nicht vorhanden ist, wird es von der offiziellen Website heruntergeladen. FROM muss der erste Befehl in einer Docker-Datei sein.

RUN: Der Kernteil des Dockerfile-Ausführungsbefehls, der die Parameter während des Image-Erstellungsprozesses ausführt.

KOPIEREN: Dateien kopieren. COPY <Quellpfad> <Zielpfad>

WORKDIR: Arbeitsverzeichnis. Wenn es nicht existiert, wird es automatisch für Sie erstellt.

CMD: Container-Startbefehl. Docker ist keine virtuelle Maschine, aber ein Container ist ein Prozess. Da es sich um einen Prozess handelt, müssen Sie beim Starten des Containers das auszuführende Programm und die Parameter angeben. Mit der CMD-Anweisung wird der Startbefehl des Standard-Containerhauptprozesses angegeben. Wenn „Docker Run“ einen Befehlsparameter angibt, funktioniert der Befehl hier nicht. Beispiel: „docker run -it -name redis docker.io/redis /bin/bash“. Beim Starten des Containers wird der Befehl im Docker-File nicht ausgeführt, weil „docker run“ bereits den Befehlsparameter „/bin/bash“ angegeben hat.

3. Erstellen Sie ein Image

Docker Build [OPTIONEN] Kontextpfad | URL

  • [OPTIONEN]: Normalerweise enthält der Befehl -t, womit der Name des Bildes angegeben wird. -f gibt den Kontextpfad der Dockdatei an.
  • Kontextpfad|URL: Kontextpfad. Wenn nur ein Punkt „.“ vorhanden ist, stellt dies das aktuelle Verzeichnis dar.

Der Befehl „docker bulid -t webtest.“ erstellt ein Image mit dem Namen „webtest“ und gibt nach Abschluss des Builds die Image-ID 1dfa2905efac zurück.

[root@CentOS webtest]# ls
App Dockerfile Anforderungen.txt run.sh
[root@CentOS-Webtest]# Docker Build -t Webtest. 
...
...
...
Zwischenbehälter ausbauen 9c510e88e659
Schritt 6/6: CMD /bin/bash run.sh
---> Wird ausgeführt in 0bd29255c648
---> 1dfa2905efac
Zwischenbehälter entfernen 0bd29255c648
Erfolgreich erstellt 1dfa2905efac
  • App: Django-Projekt
  • Docker-Datei
  • requirements.txt ist die Python-Bibliothek, die zum Ausführen des Projekts erforderlich ist
    • Django
    • Django 2
    • pyDes
    • PyMySQL
    • Redis
    • Anfragen
    • pymssql
    • Abonnieren
    • Paramiko
    • psutil

run.sh ist das Shell-Skript, das beim Ausführen des Containers aufgerufen werden muss

python /code/app/manage.py runserver 0.0.0.0:8000

Starten Sie den Container und führen Sie das gerade erstellte Image aus.

docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtest

[root@CentOS-Webtest]# docker run -it -p 6500:8000 -v /home/code/webtest:/code --name web --restart always --privileged=true webtest
Systemprüfungen werden durchgeführt ...

Bei der Systemprüfung wurden keine Probleme festgestellt (0 stummgeschaltet).

Sie haben 15 nicht angewendete Migrationen. Ihr Projekt funktioniert möglicherweise erst richtig, wenn Sie die Migrationen für die App(s) anwenden: Admin, Authentifizierung, Inhaltstypen, Sitzungen.
Führen Sie „python manage.py migrate“ aus, um sie anzuwenden.

09. August 2018 - 09:56:51
Django Version 2.1, mit den Einstellungen „ShiHangTool.settings“
Entwicklungsserver wird unter http://0.0.0.0:8000/ gestartet.
Beenden Sie den Server mit STRG+C.

-p: Ordnen Sie den Port 8000 des Containers dem Port 6500 des Hosts zu.

-v: Das Hostverzeichnis /home/code/webtest wird dem Containerverzeichnis /code zugeordnet.

--name: Nennen Sie den Container „Web“, „Webtest“ ist das Image, das wir gerade erstellt haben

--restart: always Der Container wird immer neu gestartet, wenn er beendet wird

--privileged=true: Zum Ausführen von Dateien im Container erforderliche Berechtigungen

Geben Sie ip:6500/Home/OrderSettle-K8S/ ein.

Erfolgreich ausgeführt!

5. Verfassen

Finden Sie die oben genannten Vorgänge zu kompliziert? Es wäre toll, wenn sie automatisch durchgeführt werden könnten. Keine Sorge, compose kann Ihnen helfen

1. Einleitung:

Compose ist ein offizielles Open-Source-Projekt von Docker, das zur schnellen Orchestrierung von Docker-Clustern verwendet wird. Compose definiert und führt einen oder mehrere Container über eine docker-compose.yml-Datei aus. Es handelt sich um eine verbesserte Version von Abb.

2. Installation:

Compose ist in Python geschrieben und ruft die von Docker bereitgestellte API auf, um den Container zu verwalten. kann also über das Python-Verwaltungstool pip installiert werden

pip installieren docker-compose

3. Schreiben Sie die Datei docker-compose.yml

Dies ist das Hauptvorlagenformat von docker-compose.yml

Version: '3'
Leistungen:
  web1:
    bauen: .
    Bild: web1
    Häfen:
      - "7500:8000"
    Bände: 
      - /home/code/webtest:/code
    privilegiert: wahr
    Neustart: immer

4. Führen Sie das Compose-Projekt aus

Legen Sie Dockerfile, requirements.txt, docker-compose.yml und den App-Ordner in dasselbe Verzeichnis und führen Sie den Befehl docker-compose up aus.

[root@CentOS-Webtest]# Docker-Compose Up
Netzwerk „webtest_default“ mit dem Standardtreiber erstellen
Erstellen von web1
Schritt 1/6: VON python3.6.4-dev
 --->ca46b1ed99ab
Schritt 2/6: App /Code KOPIEREN
 ---> f59b9540f8ab
Zwischenbehälter entfernen e987c66b51f5
Schritt 3/6: KOPIEREN Sie requirements.txt /code
 ---> 2095b64882ac
Zwischenbehälter ausbauen e3099b386727
...
...
...

Nach Abschluss des Laufs überprüft Docker PS den gerade gestarteten Container Web1 und stellt fest, dass dieser bereits ausgeführt wird.

[root@CentOS ~]# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
eeab6b5a993b web1 "/bin/bash run.sh" Vor etwa einer Minute Aktiv seit 59 Sekunden 0.0.0.0:7500->8000/tcp webtest_web1_1
5fb51ce5a51c Webtest "/bin/bash run.sh" vor 23 Stunden Aktiv Ungefähr eine Stunde 0.0.0.0:6500->8000/tcp Web

5. Zusammenfassung

Compose konfiguriert die beiden Schritte zum Erstellen eines Images und Ausführen eines Containers in einer YML-Datei, um eine automatisierte Bereitstellung zu erreichen.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Bereitstellung von Django-Docker-Containern Lokale Bereitstellung von Django-Docker
  • Zusammenfassung der Anwendungspraxis für Docker-Container des Node.js-Dienstes
  • .NETCore Docker implementiert Containerisierung und privates Image-Repository-Management
  • Containerisierungstransformation für Docker-Großprojekte
  • Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)
  • Detaillierte Erläuterung der Docker-Container-Spring-Boot-Anwendung
  • Detaillierte Erläuterung der Verwendung von ELK zum Erstellen eines Docker-Containeranwendungsprotokollcenters
  • Analyse des Prozesses zum Bereitstellen von Python-Anwendungen in Docker-Containern

<<:  So verwenden Sie Nginx zur Verwaltung einer domänenübergreifenden Vue-Entwicklungsumgebung

>>:  Lösung für das Fehlen der my.ini-Datei in MySQL 5.7

Artikel empfehlen

Tiefgreifendes Verständnis der Rolle von Vuex

Inhaltsverzeichnis Überblick So teilen Sie Daten ...

Fehler MySQL-Tabelle 'performance_schema...Lösung

Die Testumgebung ist mit MariaDB 5.7 eingerichtet...

Detaillierte Erklärung des VUE-Reaktionsprinzips

Inhaltsverzeichnis 1. Grundlage des Responsive-Pr...

Analyse von Beispielen für MySQL-Benutzerverwaltungsvorgänge

Dieser Artikel beschreibt die MySQL-Benutzerverwa...

Installation und Verwendung der Ubuntu 18.04 Serverversion (Bild und Text)

1 Schritte zur Systeminstallation Betriebssystemv...

Ein zeitaufwändiger Fehlerbehebungsprozess für einen Docker-Fehler

Inhaltsverzeichnis Herkunft Umweltinformationen F...

Objektorientierte JavaScript-Implementierung eines Lupengehäuses

In diesem Artikel wird der spezifische Code der o...

Detaillierte Erklärung der Komponentenkommunikation in React

Inhaltsverzeichnis Übergeordnete Komponente kommu...

Spezifische Verwendung von CSS-Inhaltsattributen

Das Inhaltsattribut wird im Allgemeinen in den Ps...