[PYTHON] Betrachten Sie die Beschreibung von docker-compose.yml (Django + MySQL ③)

Über diesen Artikel

Dieser Artikel entspricht ** Teil 3 ** der Artikel zu Erfahren Sie, wie Sie Docker durch Erstellen der Umgebung von Django + MySQL verwenden.

  1. Erstellen einer virtuellen Python-Umgebung mit venv
  2. Beachten Sie die Beschreibung von Dockerfile
  3. ** Beachten Sie die Beschreibung von docker-compose.yml (dieser Artikel) **
  4. Bearbeiten Sie die Konfigurationsdatei und führen Sie Docker-Compose up aus
  5. Passen Sie den Zeitpunkt des Container-Starts zwischen abhängigen Diensten an

Einführung

In diesem Artikel **, damit Sie in Zukunft so viel wie möglich einen Docker-Container erstellen können ** und gleichzeitig den Aufwand für die Erstellung der Umgebung und der auszuführenden Befehle minimieren können **, ** Denken wir über die Beschreibung von docker-compose.yml ** nach.

Für den Docker-Container sehe ich darin eine Realisierung des ** Docker-Images **, das ich bisher gelernt habe, und des aktuellen Status der ** "kleinen Maschine für das Projekt", die verschoben wurde.

Für den Django-Container werden wir mit der Arbeit fortfahren, die auf der zuletzt erstellten Docker-Datei basiert, während wir für den MySQL-Container das offizielle Image so verwenden, wie es ist.

Dieses Mal wird ** docker-compose.yml auch in derselben Hierarchie wie Dockerfile ** erstellt.

Beschreibung

Die allgemeine Beschreibung von "docker-compose.yml" lautet wie folgt.

docker-compose.yml


version: "3"
services:
    web:
        container_name: djst_django
        build: .
        restart: always
        command: >
            bash -c "
                pip install -r requirements.txt &&
                python manage.py runserver 0.0.0.0:8000
            "
        working_dir: /code
        ports: 
            - 172.0.0.1:8000:8000
        volumes:
            - .:/code
        depends_on:
            - db
    db:
        container_name: djst_mysql
        image: mysql:5.7
        restart: always
        environment: 
            MYSQL_DATABASE: $DB_NAME
            MYSQL_USER: $DB_USER
            MYSQL_PASSWORD: $DB_PASSWORD
            MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
            MYSQL_TCP_PORT: 3306
            TZ: 'Asia/Tokyo'
        volumes: 
            - ./mysql/data:/var/lib/mysql/
            - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
        ports: 
            - 3306:3306

Denken Sie über die Bedeutung der Beschreibung nach

version: "3"

Die erste Zeile ist die Dateiformatversion von Docker-Compose. Wenn die Version, die durch Ausführen von "$ docker-compose version" angezeigt wird, "1.13.0" oder höher ist, "3", wenn sie "1.10.0" oder höher ist, "2", wenn keine dieser Versionen verfügbar ist, "1" "Es wird sein".

services:

Ab der zweiten Zeile beschreiben wir die von dieser Datei verwalteten Dienste.

Django Seite

web:

Zeile 3 beginnt mit dem Dienst, der die Django-Anwendung ausführt. Hier wird der Bildname (am Ende von) benannt.

container_name: djst_django

Zeile 4, ** der Name des generierten Containers **. Ich werde es hier nennen.

build: .

Geben Sie in der 5. Zeile in dieser docker-compose.yml ** an, wo das Bild basierend auf der Dockerfile ** generiert werden soll. Da es diesmal in derselben Ebene platziert wird, wird es als "." Beschrieben.

Die sechste Zeile wird später im Abschnitt MySQL behandelt.

command: >
    bash -c "
        pip install -r requirements.txt &&
        python manage.py runserver 0.0.0.0:8000
    "

In den Zeilen 7-12 wird der Befehl beschrieben, den Sie im Container ausführen möchten, wenn Sie später den Befehl "$ docker-compose up" ausführen. Mit $ bash -c" " wird der in " " beschriebene Befehl ausgeführt.

  1. ** Führen Sie pip install aus, um die im Host und im Container verwendeten Pakete automatisch zu synchronisieren **
  2. ** Starten Sie den Django-Server ohne Host-Einschränkungen (0.0.0.0) **

Sie werden durch "&&" getrennt, damit sie der Reihe nach ausgeführt werden.

Die Einschränkung von "Host" wird später in der Django-Konfigurationsdatei vorgenommen.

working_dir: /code

Geben Sie in Zeile 13 ** das Arbeitsverzeichnis ** an. Gibt das Code-Verzeichnis im Container an. Dieses Verzeichnis wird basierend auf der Beschreibung von "Dockerfile" erstellt, die in Letztes Mal beschrieben ist.

ports: 
    - 172.0.0.1:8000:8000

Die Zeilen 14-15, ** geben den zu verwendenden Port an **. Die linke Seite "172.0.0.1: 8000" ist die Beschreibung der Host-Computerseite "Host" und des Ports, und die rechte Seite ist die Beschreibung des Containerseiten-Ports, der zwischen ":" angeordnet ist. Wenn Sie von der Seite des Host-Computers aus eine Verbindung zu 127.0.0.1: 8000 herstellen, werden Sie mit der von der Containerseite automatisch zugewiesenen Nummer 8000 von Host verbunden. In Bezug auf den angegebenen Port stimmt er mit dem Port überein, der von "runserver" im obigen "Befehl" angegeben wurde.

volumes:
    - .:/code

Zeilen 16-17, ** Für die Datenmontage angeben **. Wie im vorherigen Abschnitt ist die linke Seite mit ** : der Hostpfad und die rechte Seite der Pfad auf der Containerseite **. Die Änderungen werden synchronisiert und die linke und rechte Seite behalten die gleiche Verwaltung bei. Dieser Artikel scheint Es gibt verschiedene andere Möglichkeiten, ihn zu beschreiben (offizielles Dokument) zu sein, und es scheint schwierig zu sein, ihn frei zu verwenden. ..

depends_on:
    - db

In den Zeilen 18-19, ** werden Dienstabhängigkeiten angegeben **. ** Es scheint, dass beim Starten von "Web" auch "DB" gestartet wird **. Problem kann in der Startreihenfolge auftreten, aber vorerst kann "MySQL" als Datenbank der "Django" -Anwendung verwendet werden.

MySQL-Seite

Als nächstes betrachten wir die Beschreibung des MySQL-Dienstes.

db:

Zeile 20 beginnt mit der Beschreibung der Dienste, die MySQL ausführt. Nach wie vor ist dies (am Ende) der Bildname.

container_name: djst_mysql

Die 21. Zeile benennt den Container.

image: mysql:5.7

Die 22. Zeile gibt an, ** welches Bild basierend auf ** erstellt werden soll. Im Gegensatz zu dem oben erwähnten "Web" -Element wird es wie folgt beschrieben, wenn Sie das offiziell vorbereitete Bild so verwenden möchten, wie es ist, ohne es mit der "Docker-Datei" anzupassen. Wenn Sie eine andere Docker-Datei in einem separaten Verzeichnis erstellen, können Sie diese natürlich angeben und verwenden.

restart: always

Zeile 23, ** Einstellungen für den Neustart beim Stoppen des Containers **. Hier ist es auf "immer" eingestellt, so dass es bis auf den manuellen Betrieb immer neu startet. Die Standardeinstellung ist "Nein", und es scheint, dass Sie zusätzlich zu "Immer" "Sofern nicht gestoppt" und "Bei Ausfall" auswählen können.

environment: 
    MYSQL_DATABASE: $DB_NAME
    MYSQL_USER: $DB_USER
    MYSQL_PASSWORD: $DB_PASSWORD
    MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
    MYSQL_TCP_PORT: 3306
    TZ: 'Asia/Tokyo'

Die Zeilen 24 bis 30 sind ** Festlegen von Umgebungsvariablen **. Diejenigen mit "$" sollten in der ".env" -Datei beschrieben werden, die später erstellt wird, falls Sie sie auf "GitHub" usw. veröffentlichen möchten. Dies sind die DB-Informationen, die von Django aus verbunden werden sollen.

MYSQL_TCP_PORT sollte mit der Option ports übereinstimmen, die wir später sehen werden. Hier habe ich die Standardnummer "3306" für MySQL angegeben. TZ ist eine regionale Umgebung.

volumes: 
    - ./mysql/data:/var/lib/mysql/
    - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf

Die Zeilen 31-33 sind ** Datenmontageeinstellungen **. Nach wie vor befindet sich der Host links von ** : und der Pfad innerhalb des Containers rechts. ** ** **

Die aufsteigende Linie lautet ** Mount-Einstellungen für Persistenz **. Die in der Datenbank gespeicherten Informationen werden bei Verwendung der Anwendung mit dem Verzeichnis . / Mysql / data auf dem Host synchronisiert. Die Quintessenz ist ** Einstellungen in die Einstellungsdatei einbinden **. Wenn Sie eine . / Mysql / my.cnf-Datei vorbereiten, die die Spracheinstellungen usw. beschreibt, wird dies in den MySQL-Einstellungen auf der Containerseite wiedergegeben.

Wenn Sie eine SQL-Datei usw. vorbereiten, indem Sie sie im Verzeichnis / docker-entrypoint.init.d im Container einhängen, können Sie anscheinend auch die Anfangsdaten in die Datenbank eingeben.

ports: 
    - 3306:3306

Schließlich ** Stellen Sie den zu verwendenden Port ** ein. Es ist in Ordnung, wenn es mit der zuvor beschriebenen Umgebungsvariablen MYSQL_TCP_PORT übereinstimmt.

Erstellen einer .env-Datei

Erstellen Sie eine ** .env-Datei **, um die Umgebungsvariablen zu beschreiben. Dies ist auch in der gleichen Hierarchie platziert.

.env


DB_NAME=********
DB_USER=********
DB_PASSWORD=********
DB_ROOT_PASSWORD=********

Die Beschreibung lautet ** Umgebungsvariablendefinition ** und entspricht der zuvor in docker-compose.yml beschriebenen Option environment. Bitte beschreiben Sie, wie Sie möchten, anstelle von "*********". Wenn Sie es auf "GitHub" usw. veröffentlichen möchten, ** entfernen Sie diese Datei aus der Verwaltung **.

Erstellen von MySQL-Konfigurationsdateien

Erstellen Sie ein MySQL-Mount-Verzeichnis . / Mysql und platzieren Sie die Konfigurationsdatei my.cnf darin.

mysql/my.cnf


[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

Geben Sie hier im Voraus die Variablen ein, die Sie von Anfang an ändern möchten.

Das als DB-Datenbereitstellungsziel angegebene . / Mysql / data / wird automatisch generiert, wenn $ docker-compose up ausgeführt wird. Wenn Sie dies auf "GitHub" usw. veröffentlichen möchten **, entfernen Sie es vorab vom Verwaltungsziel **.

Aktuelle Verzeichnisstruktur

django_starter
    ├── .venv
    │   └── (Abkürzung)
    ├── config
    │     ├── __init__.py
    │     ├── asgi.py
    │     ├── settings.py
    │     ├── urls.py
    │     └── wsgi.py
    ├── mysql                 <- New!
    │     └── my.cnf
    ├── .env                  <- New!
    ├── docker-compose.yml    <- New!
    ├── Dockerfile
    ├── manage.py
    └── requirements.txt

Am Ende

Sie haben jetzt eine "docker-compose.yml" erstellt, um eine "Django" + "MySQL" -Umgebung zu erstellen.

Dieses Mal habe ich verschiedene Dinge versucht, um die Bedeutung jeder Option zu verstehen, und je tiefer ich mein Wissen über "Docker" vertiefte, desto mehr "die Technologie, mit der ich umgehen möchte" wie "MySQL" und "Django", desto mehr. Ich hatte wieder einmal das Gefühl, dass ich verschiedene Dinge frei machen kann **, also wollte ich weiter lernen, auch diese.

Das nächste Mal werde ich überlegen, ** die Django-Konfigurationsdatei zu bearbeiten ** und den Befehl ** $ docker-compose up ** auszuführen. Klicken Sie hier für den nächsten Artikel ↓ "4. Konfigurieren Sie die Konfigurationsdatei und führen Sie Docker-Compose up aus"

Danke für Ihren Besuch.

Recommended Posts

Betrachten Sie die Beschreibung von docker-compose.yml (Django + MySQL ③)
Betrachten Sie die Beschreibung von Dockerfile (Django + MySQL②)
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Verstehen Sie den Komfort des Django Rest Framework
Skript zum Ändern der Beschreibung von Fasta
So überprüfen Sie die Version von Django
Bedeutung von {Versionsnummer} im MySQL-RPM-Paket
Ich habe versucht, die Einstellungen für verschiedene Datenbanken von Django (MySQL, PostgreSQL) zusammenzufassen.
Exklusive Veröffentlichung der Django App mit ngrok
Ich habe die Sitzungsaufbewahrungsdauer von Django überprüft
Erwägen Sie, die Genauigkeit der Erkennung von VAE-Anomalien zu verbessern
Die Geschichte der Anzeige von Mediendateien in Django
Django + MySQL-Einstellungen
Die Wand beim Ändern des Django-Dienstes von Python 2.7 auf Python 3-Serie
[Django] Ändern Sie die Standard-IP-Adresse des Befehls runserver
[Python] Lassen Sie uns die URL der Django-Administrator-Site ändern
Die Bedeutung des Selbst
Eindrücke, Django zu berühren
der Zen von Python
Die Geschichte von sys.path.append ()
[Django] Benennen Sie das Projekt um
Verwenden Sie MySQL mit Django
Rache der Typen: Rache der Typen
Bearbeiten Sie die Einstellungsdatei und führen Sie Docker-Compose Up aus (Django + MySQL ④).
Ich habe an der Übersetzungsaktivität des offiziellen Django-Dokuments teilgenommen
Django gibt den Inhalt der Datei als HTTP-Antwort zurück
Wartung der Django + MongoDB-Entwicklungsumgebung (mitten im Schreiben)
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Zusammenfassung der Stolperpunkte in Django zum ersten Mal
Bis zum Start des Django-Tutorials mit Pycharm unter Windows
[Django] Memo zum Erstellen einer Umgebung von Django + MySQL + Vue.js [Python]