Detaillierte Erläuterung zur Verwendung von Docker zum Bereitstellen der Django + MySQL8-Entwicklungsumgebung

Detaillierte Erläuterung zur Verwendung von Docker zum Bereitstellen der Django + MySQL8-Entwicklungsumgebung

Ich habe das System vor einiger Zeit neu installiert, aber kein Backup erstellt, sodass alle Entwicklungsumgebungen auf meinem Computer weg waren.

Der Gedanke an die Installation der Python-Umgebung und der Datenbank kann Kopfschmerzen bereiten und während des Installationsvorgangs können zahlreiche Fehler auftreten.

Ich lerne gerade Docker. Löst das nicht einfach meine aktuellen Probleme? Darüber hinaus müssen Sie sich nicht nur dieses Mal, sondern auch in Zukunft keine Gedanken über die Neuinstallation des Systems machen. Solange Sie die Dockerfile- und Docker-Compose-Dateien haben, können Sie es problemlos mit einem Befehl ausführen, egal in welcher Umgebung Sie sich befinden.

Bisher wurden Python-Entwicklungsumgebungen mit virtualenv oder Pipenv bereitgestellt. Nachdem ich dieses Mal Docker verwendet habe, fand ich, dass Docker praktischer ist. Lassen Sie es mich unten ausführlich vorstellen.

Docker-Datei

VON python:3.6.8

ENV PYTHONUNBUFFERED 1

RUN mkdir -p /code
KOPIEREN ./requirements.txt /code

ARBEITSVERZEICHNIS /code

Führen Sie den Befehl sed -i "s/archive.ubuntu./mirrors.aliyun./g" /etc/apt/sources.list aus.
Führen Sie den Befehl sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list aus.

Führen Sie apt-get clean && apt-get -y update && \ aus.
 apt-get -y installiere libsasl2-dev python-dev libldap2-dev libssl-dev libsnmp-dev
Führen Sie pip3 install --index-url https://mirrors.aliyun.com/pypi/simple/ --no-cache-dir -r requirements.txt aus.

KOPIEREN ./* /code/

Verwenden Sie Dockerfile, um das Image zu erstellen, die Python-Version ist 3.6.8, und kopieren Sie den Quellcode in das Verzeichnis /code im Container.

Docker-Compose

Version: '3'

Leistungen:
 Webseite:
 bauen:
  Kontext: .
  Dockerdatei: Dockerdatei
 Bild: Web
 Containername: Web
 Hostname: Web
 Neustart: immer
 Befehl: python /code/manage.py runserver 0.0.0.0:8000
 Bände:
  - .:/Web
 Häfen:
  - "8000:8000"
 hängt ab von:
  -mysql 

 MySQL:
 Bild: MySQL
 Containername: MySQL
 Hostname: MySQL
 Neustart: immer
 Befehl: --default-authentication-plugin=mysql_native_password --mysqlx=0
 Häfen:
  -3306:3306
 Bände:
  - ./db:/var/lib/mysql
 Umfeld:
  -MYSQL_HOST=lokaler Host 
  -MYSQL_PORT=3306 
  -MYSQL_DATABASE=Entwickler
  -MYSQL_USER=Entwickler
  -MYSQL_PASSWORD=123456
  -MYSQL_ROOT_PASSWORD=123456

Verwenden Sie Docker-Compose, um die Container zu orchestrieren und insgesamt zwei Dienste zu starten. Der Webdienst ist der Django-Hintergrunddienst und MySQL ist der Datenbankdienst.

Dabei sind drei Punkte zu beachten:

  • Der Webdienst verwendet den Befehl depends_on, um anzugeben, dass er vom MySQL-Dienst abhängig ist.
  • Der MySQL-Dienst muss den Befehl --default-authentication-plugin=mysql_native_password hinzufügen. Denn ab MySQL 8.0 verwendet die Standardverschlüsselungsregel caching_sha2_password, was unser Client nicht unterstützt. Zuvor wurde mysql_native_password verwendet.
  • Verwenden Sie Volumes, um Daten dauerhaft zu speichern. Andernfalls gehen die Daten nach dem Löschen des Containers verloren.

Anforderungen

Django==2.2.11
mysqlclient==1.4.6

Starten Sie das von Django benötigte Pip-Paket. Die Django-Version muss mindestens 2.0 sein, sonst wird ein Fehler gemeldet.

Django-Einstellungen
DATENBANKEN = {
 'Standard': {
  'ENGINE': 'django.db.backends.mysql',
  'NAME': 'Entwickler',
  'BENUTZER': 'dev',
  'PASSWORT': '123456',
  'HOST': 'mysql',
  'HAFEN': '3306'
 }
}

Konfigurieren Sie Datenbankinformationen in der Django-Einstellungsdatei. Der Inhalt muss mit dem in Docker-Compose übereinstimmen.

Zu beachten ist, dass HOST als Dienstname in Docker-Compose konfiguriert werden muss, in meinem Fall ist es MySQL. Wenn Sie es auf andere Werte konfigurieren, beispielsweise localhost oder 127.0.0.1, wird ein Fehler gemeldet.

Da Docker beim Start ein lokales Netzwerk einrichtet, kann es MySQL in den Container des entsprechenden Dienstes auflösen, und der entsprechende Dienst befindet sich nicht auf dem lokalen Host.

Laufen

Verwenden Sie den folgenden Befehl, um einen Spiegel zu erstellen.

$ docker-compose -f ./docker-compose.yml erstellen

Sie können den vorherigen Schritt auch überspringen und den Dienst mit dem folgenden Befehl direkt starten. Wenn kein Image vorhanden ist, wird zuerst ein Image erstellt und dann der Dienst gestartet.

$ docker-compose -f ./docker-compose.yml nach oben

Fehlerbehebung

Während des Bereitstellungsprozesses können die folgenden Fehler auftreten, die grundsätzlich durch Konfigurationsfehler verursacht werden. Wenn dies passiert, überprüfen Sie die Konfiguration sorgfältig. Solange sie mit der im Artikel angegebenen übereinstimmt, gibt es kein Problem.

  • „Plugin caching_sha2_password konnte nicht geladen werden: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: Gemeinsam genutzte Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis“
  • django.core.exceptions.ImproperlyConfigured: Fehler beim Laden des MySQLdb-Moduls.
  • django.db.utils.OperationalError: (2002, „Keine Verbindung zum MySQL-Server auf ‚db‘ möglich (115)“)
  • django.db.utils.OperationalError: (2002, "Keine Verbindung zum lokalen MySQL-Server über Socket '/var/run/mysqld/mysqld.sock' möglich (2)")
  • django.db.utils.OperationalError: (2002, "Keine Verbindung zum MySQL-Server auf '127.0.0.1' möglich (115)")
  • django.db.utils.OperationalError: (2002, "Keine Verbindung zum lokalen MySQL-Server über Socket '/var/run/mysqld/mysqld.sock' möglich (2)")

Ich bin auch auf ein schwierigeres Problem gestoßen:

[Warnung] root@localhost wird mit einem leeren Passwort erstellt! Bitte denken Sie darüber nach, die Option --initialize-insecure auszuschalten.

Ich dachte, mein Passwort sei falsch eingestellt und habe lange nachgeforscht, konnte aber kein Problem finden. Später habe ich online eine Erklärung gefunden und beschlossen, es einfach zu ignorieren.

Dies ist lediglich eine Warnung, die während der Initialisierung der Datenbankdatei (mysqld --initialize-insecure) ausgegeben wird. Der Root-Benutzer mit Passwort wird später erstellt, während die Datenbank nur auf dem Unix-Socket lauscht.

Referenzdokumente:

http://fusionblender.net/django-and-mysql-8-using-docker/
https://github.com/docker-library/mysql/issues/307…
https://www.jianshu.com/p/4eafa4f87fd5

Dies ist das Ende dieses Artikels zur Verwendung von Docker zum Bereitstellen der Django+MySQL8-Entwicklungsumgebung. Weitere relevante Inhalte zur Docker-Bereitstellung von Django+MySQL8 finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Implementierung eines Docker-Compose-Bereitstellungsprojekts basierend auf MySQL8
  • Beispiel für die Bereitstellung von MySQL 8.0 mit Docker
  • So installieren Sie MySQL 8.0 in Docker
  • Upgrade der Docker-Version von MySQL 5.7 auf MySQL 8.0.13, Datenmigration
  • So installieren Sie MySQL8 in Docker
  • Docker-Bereitstellung MySQL8-Cluster (ein Master und zwei Slaves) Implementierungsschritte

<<:  Beispiel zur Erläuterung der Größe einer MySQL-Statistiktabelle

>>:  Wo werden MySQL-Daten gespeichert?

Artikel empfehlen

Detailliertes Beispiel einer MySQL-Austauschpartition

Detailliertes Beispiel einer MySQL-Austauschparti...

So bedienen Sie JSON-Felder in MySQL

MySQL 5.7.8 führte das JSON-Feld ein. Dieser Feld...

Detaillierte Schritte zur Installation von MinIO auf Docker

Inhaltsverzeichnis 1. Überprüfen Sie, ob die Dock...

Zusammenfassung der 10 am häufigsten gestellten Fragen in Linux-Interviews

Vorwort Wenn Sie sich auf die Stelle eines Betrie...

Fähigkeiten zur Seiten-Refaktorierung – Javascript, CSS

Über JS, CSS CSS: Stylesheet oben Vermeiden Sie C...

Analyse des Problems des Datenverlusts durch erzwungene Aktualisierung von Vuex

vuex-persistenter Zustand Kernprinzip: Alle Vuex-...

Detaillierte Schritte zum Erstellen einer React-Anwendung mit einer Rails-API

Inhaltsverzeichnis Backend: Rails API-Teil Front-...

Entdecken Sie die Wahrheit hinter dem Neuladevorgang in Nginx

Der heutige Artikel stellt hauptsächlich den Neul...

Das Vue-Projekt implementiert einen grafischen Überprüfungscode

In diesem Artikelbeispiel wird der spezifische Co...

So erzielen Sie mit Vue3 beispielsweise einen Lupeneffekt

Inhaltsverzeichnis Vorwort 1. Die Bedeutung der K...

HTML realisiert Echtzeit-Überwachungsfunktion der Hikvision-Kamera

Das Unternehmen hat vor Kurzem einige CCFA-Aktivi...

So implementieren Sie Property Hijacking mit JavaScript defineProperty

Inhaltsverzeichnis Vorwort Deskriptoren Detaillie...

5 MySQL-GUI-Tools, die Ihnen bei der Datenbankverwaltung empfohlen werden

Es gibt viele Datenbankverwaltungstools für MySQL...