Dieser Artikel entspricht ** Teil 3 ** der Artikel zu Erfahren Sie, wie Sie Docker durch Erstellen der Umgebung von Django + MySQL verwenden.
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.
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
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.
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.
pip install
aus, um die im Host und im Container verwendeten Pakete automatisch zu synchronisieren **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.
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 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 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 **.
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
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