Teil 1: Docker
Teil 2: Einführung in Docker-Compose
Es wird die Beschreibung über sein.Teil 1 Dies ist eine Fortsetzung des Artikels.
Siehe Github Repository.
Im ersten Teil haben wir eine Docker-Datei erstellt, um den Webserver und den App-Server in jedem Container zu starten. Um die Kosten für das Starten dieser Container (in Bezug auf Startbefehle) zu reduzieren, starten Sie zwei Container mit einem Befehl "Docker-Compose". Die wichtigsten Änderungen sind wie folgt.
In diesem Fall muss Folgendes als Beziehung zwischen Containern und Beziehung zwischen Container-Hosts angegeben werden.
--App Server
docker-compose.yml
version: "3.7" #Geben Sie die Version der Erstellungsdatei an
services: #Fügen Sie eine Beschreibung für jeden Container unter dieser Ebene hinzu
###########App Server Einstellungen von hier###########
app-server: #Kann Dienstname, Hostname sein
container_name: app-server #Der Name des Containers
build: #Blöcke erforderlich, wenn Sie mit einer von Ihnen selbst erstellten Docker-Datei erstellen
context: ../../ #Geben Sie den Pfad für die Docker-Erstellung an, den relativen Pfad, von dem aus sich die yml-Datei befindet
dockerfile: deployment/dockerfiles/app-server/Dockerfile #Dockerfile zu verwenden. Wird aus dem Kontextpfad angegeben
networks: #Einstellungen für das Netzwerk, zu dem dieser Dienst gehört
my_host_network: #Siehe unten meine_host_Gehören zum Netzwerk
aliases:
- uwsgi-server # my_host_Es ist möglich, diesen Namen im Netzwerk zu unterscheiden
expose:
- 9876 #Versetzen Sie diesen Port in den Status LISTEN
restart: always #Richtlinie zum Neustart des Dienstes
###########Bis zu diesem Punkt App Server Einstellungen###########
###########Webserver-Einstellungen von hier###########
web-server:
container_name: web-server
build:
context: ../../
dockerfile: deployment/dockerfiles/web-server/Dockerfile
networks:
my_host_network:
aliases:
- nginx-server
ports:
- 9090:9123 #Portweiterleitung von 9090 auf dem Host-PC an 9123 auf dem Container
depends_on: #Geben Sie die Abhängigkeit an. Netz-App vor dem Start des Servers-Startet den Server
- app-server
restart: always
###########Webserver-Einstellungen bisher###########
###########Netzwerkeinstellungen von hier###########
networks:
my_host_network: #Aliasname bei Verwendung in den oberen Servereinstellungen
name: my-nginx-network #Netzwerkname
driver: bridge #Fahrertyp, Brücke oder Überlagerung
Für das Netzwerk wird "Bridge" verwendet, da mehrere Container auf einem Host-PC bereitgestellt werden. Verwenden Sie "Overlay", wenn Sie mehrere Hosts haben.
Bis jetzt wurden beide Server (direkt) auf dem Host-PC ausgeführt, daher habe ich "localhost" als Reverse-Proxy-Ziel angegeben. In diesem Schritt muss das Verbindungsziel zum App-Server-Container geändert werden.
nginx.conf
http {
server {
# 「uwsgi-Server "ist Docker-compose.mein set mit yml_host_Netzwerk-Aliasname des App-Servers im Netzwerk
location / {
proxy_pass http://uwsgi-server:9876;
# before: proxy_pass http://127.0.0.1:9876;
}
location /health {
proxy_pass http://uwsgi-server:9876/health;
# before: proxy_pass http://127.0.0.1:9876/health;
}
}
}
Terminal
docker-compose -f deployment/docker-compose/docker-compose.yml up
# -Geben Sie die Einstellungsdatei mit der Option f an
Mit up
wird das Image gemäß den Einstellungen der yml-Datei erstellt und der Container erstellt.
Bild von build
+ start
.
Es kann auch im Hintergrund ausgeführt werden, indem die Option -d
hinzugefügt wird.
Strg + C
, wenn im Vordergrund ausgeführt wird
Wenn Sie es im Hintergrund ausführen, können Sie den Container mit "Docker-Compose -f Deployment / Docker-Compose / Docker-Compose.yml Stop" stoppen.
Terminal
docker-compose -f deployment/docker-compose/docker-compose.yml down
Durch Hinzufügen der Option "--rmi all" werden auch alle Originalbilder gelöscht.
About docker-compose
Grob gesagt sind zwei Punkte wie folgt.
Angenommen, Sie müssen für 1 10 Container starten. Die zehnmalige Eingabe von "Docker Run {Container}" ist ein angemessener Preis, nicht wahr? Sie können vergessen, eine zu starten. Es wird mit einem Befehl von "Docker-Compose Up" abgeschlossen, so dass der Start nicht ausgelassen wird, und vor allem ist es einfach. (Wenn Sie sich nur hier konzentrieren, können Sie eine Shell schreiben)
In Bezug auf 2 nehmen wir diesen Schritt als Beispiel. Es war nicht möglich, jeden Container in "Dockerfile" zu beschreiben, und im Fall von "Docker Run" gab es einige Startbedingungen, die als Startoptionen angegeben werden mussten.
Durch die Verwendung von "Docker-Compose" können die oben genannten Einstellungen in einer yml-Datei definiert werden, sodass die Konstruktionsschwierigkeiten einschließlich der Beziehung zwischen Containern und Container-Hosts verringert werden können. .. Insbesondere ist der Nutzwert in den folgenden Fällen hoch.
Es ist meine persönliche Meinung, aber ich denke, die meisten von ihnen werden nicht oder lokal verwendet. Wenn Sie einen Container erstellen und die Beziehungen zwischen den Containern definieren können, ist dies nicht das Ende der Produktion. Um den Service in einer Produktions- (und Staging-) Umgebung bereitzustellen, müssen wir zusätzlich zu den bisherigen Schritten Katakana-Begriffe wie "Skalierbarkeit, Lastausgleich, Netzwerk, Laufzeit" usw. berücksichtigen. Es gibt einige Bereiche, die mit "Docker-Compose" gelöst werden können, aber es scheint schwierig, alles zu tun. Die für die Orchestrierung verwendete wird weiterhin "kubernetes" sein. Wenn die Bereitstellung eines "Kubernetes" -Clusters in einer lokalen Umgebung hinsichtlich der Spezifikationen streng ist oder einfach das Verhalten einer Anwendung überprüft wird, kann "Docker-Compose" einfacher verwendet werden.
Recommended Posts