1. WordPress-BereitstellungHier nehmen wir die Bereitstellung von WordPress als Beispiel, um Docker Compose vorzustellen. Die Bereitstellung von WordPress erfordert die Images von WordPress und MySQL: 1. Bereiten Sie die Umgebung vor1. Ziehen Sie das WordPress-Bild [root@docker-node1 /]# Docker-Pull WordPress 2. Ziehen Sie das MySQL-Image [root@docker-node1 /]# docker pull mysql 3. Spiegelliste [root@docker-node1 /]# Docker-Image ls REPOSITORY TAG BILD ID ERSTELLT GRÖSSE wordpress latest 0947f14b932b vor 25 Stunden 540MB mysql latest 791b6e40940c vor 43 Stunden 465 MB (II) Ausführen des Images1. Führen Sie das MySQL-Image aus root@docker-node1 /]# docker run -d --name mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql b6e7a57a5fcec79f436d3f65240adf833340b4a9640e3b4f9282870078fb8e57 Im obigen Befehl gibt -v das Speichervolumen an, MYSQL_ROOT_PASSWORD legt das Datenbankkennwort fest und MYSQL_DATABASE gibt den Namen der erstellten Datenbank an. Weitere Einzelheiten finden Sie unter: https://hub.docker.com/_/mysql Zeigen Sie den gestarteten Container an: [root@docker-node1 /]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN b6e7a57a5fce mysql "docker-entrypoint.s…" vor 6 Minuten Up 6 Minuten 3306/tcp, 33060/tcp mysql 2. Starten Sie das WordPress-Bild [root@docker-node1 /]# docker run --name wordpress -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 -d wordpress 6cf0c0fc2ef332728a3ea2bf2dbee65299441b26751d5c64f0a66b329f2679f6 Im obigen Befehl ist WORDPRESS_DB_HOST die Datenbank, mit der eine Verbindung hergestellt werden soll, und die angegebene Datenbank ist der gerade erstellte MySQL-Container. Hier werden keine Umgebungsinformationen wie das Kennwort von WORDPRESS_DB_USER und WORDPRESS_DB_PASSWORD eingegeben, da der Standardbenutzername und das Standardkennwort des MySQL-Containers verwendet werden. Einzelheiten finden Sie unter: https://hub.docker.com/_/wordpress. Sehen Sie sich dann die Containerinformationen an: [root@docker-node1 /]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 6cf0c0fc2ef3 wordpress "docker-entrypoint.s…" vor 3 Minuten Up 3 Minuten 0.0.0.0:8080->80/tcp wordpress b6e7a57a5fce mysql "docker-entrypoint.s…" vor 20 Minuten Up 20 Minuten 3306/tcp, 33060/tcp mysql Jetzt sind beide Container aktiv und Sie können auf Port 8080 des Hosts zugreifen. Docker ComposeAus der obigen Bereitstellung können wir die folgenden Probleme erkennen:
Gibt es also eine der Stapelverarbeitung ähnliche Möglichkeit, bei der ein solch umständlicher Prozess nicht erforderlich ist? Hier kommt Docker Compose ins Spiel. 1. Einführung in Docker Compose1. Was ist Docker Compose? Docker Compose ist ein Werkzeug Dieses Tool kann Multi-Container-Anwendungen über YML-Dateien definieren Mit einem Befehl können Sie mehrere Container gemäß der Definition der YML-Datei erstellen und verwalten. 2. docker-compose.yml-Datei Ein sehr wichtiger Teil von Docker Compose ist die Datei docker-compose.yml, die drei sehr wichtige Konzepte enthält: Dienste, Netzwerke und Volumes. Dienstleistungen Ein Dienst ist ein Container. Dieser Container kann aus einem Image in Dockerhub oder aus einem Image stammen, das aus einer lokalen Docker-Datei erstellt wurde. Das Starten eines Dienstes ist ähnlich wie das Starten eines Docker-Laufs. Wenn wir Docker-Lauf verwenden, können wir die Netzwerk- und Volume-Parameter dafür angeben. In ähnlicher Weise können wir auch das Netzwerk und das Volume für den Dienst angeben. Zum Beispiel: Leistungen: db: Bild:postgres:9.4 Bände: -"db-data:/var/lib/postgresql/data" Netzwerke: -hintere Ebene Die obige YML-Datei definiert einen Dienst, der dem folgenden Befehl entspricht: docker run -d --network back-tier -v db-data:/var/lib/postgresql/data postgres:9.4 Netzwerke Netzwerke: hintere Ebene: Treiber:Brücke Die obige YML-Datei definiert ein Netzwerk, was dem folgenden Befehl entspricht: Docker-Netzwerk erstellen -d Bridge Back-Tier Bände Bände: DB-Daten: Die obige YML-Datei definiert ein Volume, das dem folgenden Befehl entspricht: Docker-Volume erstellt DB-Daten (II) Vorbereitung der Docker Compose-UmgebungDocker Cmpose ist ein Tool und muss daher installiert werden. Einzelheiten zur Installation finden Sie unter: https://docs.docker.com/compose/install/. 1. Laden Sie die ausführbare Datei herunter sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 2. Berechtigungen festlegen sudo chmod +x /usr/local/bin/docker-compose 3. Überprüfen Sie die Version [root@docker-node1 ~]# docker-compose --version Docker-Compose-Version 1.24.1, Build 4667896 4. Allgemeine Befehle in Docker-Compose [root@docker-node1 komponieren-wordpress]# docker-compose --help Definieren und führen Sie Multi-Container-Anwendungen mit Docker aus. Verwendung: docker-compose [-f <arg>…] [Optionen] [BEFEHL] [ARGS…] docker-compose -h|--Hilfe Optionen: -f, --file DATEI Gibt eine alternative Erstellungsdatei an (Standard: docker-compose.yml) -p, --project-name NAME Geben Sie einen alternativen Projektnamen an (Standard: Verzeichnisname) --verbose Weitere Ausgabe anzeigen --log-level LEVEL Protokollebene festlegen (DEBUG, INFO, WARNING, ERROR, CRITICAL) --no-ansi Keine ANSI-Steuerzeichen drucken -v, --version Version drucken und beenden -H, --host HOST Daemon-Socket zum Verbinden --tls TLS verwenden; impliziert durch --tlsverify --tlscacert CA_PATH Nur von dieser Zertifizierungsstelle signierte Zertifikate vertrauen --tlscert CLIENT_CERT_PATH Pfad zur TLS-Zertifikatsdatei --tlskey TLS_KEY_PATH Pfad zur TLS-Schlüsseldatei --tlsverify TLS verwenden und den Remote- --skip-hostname-check Vergleicht den Hostnamen des Daemons nicht mit dem Name, der im Client-Zertifikat angegeben ist --project-directory PATH Geben Sie ein alternatives Arbeitsverzeichnis an (Standard: der Pfad der Compose-Datei) --compatibility Wenn gesetzt, versucht Compose, Schlüssel zu konvertieren in v3-Dateien zu ihrem Nicht-Swarm-Äquivalent Befehle: build Dienste erstellen oder neu erstellen Bundle: Generieren Sie ein Docker-Bundle aus der Compose-Datei config Überprüfen und Anzeigen der Compose-Datei erstellenErstellen von Diensten down Stoppen und entfernen Sie Container, Netzwerke, Bilder und Volumes Ereignisse Empfangen Sie Echtzeitereignisse von Containern exec Einen Befehl in einem laufenden Container ausführen Hilfe Erhalten Sie Hilfe zu einem Befehl Bilder Liste der Bilder töten Töten Sie Container logs Ausgabe von Containern anzeigen pause Dienste pausieren Port Den öffentlichen Port für eine Portbindung drucken ps Container auflisten Pull Pull-Dienst Bilder push-service Bilder Neustart. Dienste neu starten. rm Gestoppte Container entfernen run Einen einmaligen Befehl ausführen Skalieren Festlegen der Anzahl von Containern für einen Dienst Start Dienste starten stop Dienste stoppen top Anzeige der laufenden Prozesse unpause Dienste pausieren nach oben Container erstellen und starten version Zeigt die Docker-Compose-Versionsinformationen an Docker-Compose-Up - Entwicklerhandbuch für Windows Wird verwendet, um den Dienst zu starten, einen Container zu erstellen und die YML-Datei auszuführen docker-komponieren -d Containerdienst zur Hintergrundausführung Docker-Compose PS Laufende Container anzeigen Docker-Compose-Stopp Beenden Sie den laufenden Containerdienst Docker-Compose nach unten Stoppen Sie den Containerdienst und entfernen Sie Container, Image, Netzwerk und Volume. Docker-Compose-Bilder Zeigen Sie die Bildliste des von Docker-Compose Up erstellten Containerdienstes an Docker-Compose Exec-Container (Namen) Bash Betreten eines Containers und Ausführen von Vorgängen innerhalb des Containers Docker Compose in Aktion1. WordPress Schreiben Sie die Datei docker-compose.yml Version: „3“ #docker-compose.yml Version Dienste: #Mehrere Containerdienste definieren WordPress: #Name des WordPress-Containers Bild: WordPress #Bildquelle Ports: #Portzuordnung – 8080:80 Umgebung: #Umgebungsvariablen WORDPRESS_DB_HOST: mysql #Die Datenbank, mit der eine Verbindung hergestellt werden soll, ist der Name des MySQL-Containers unten WORDPRESS_DB_PASSWORD: root #Datenbankkennwort Netzwerke: #Das verwendete Netzwerk ist my-bridge, das in den folgenden Netzwerken definiert ist -meine-Brücke mysql: #MySQL-ContainernameImage: mysql #MySQL-ImageBefehl: --default-authentication-plugin=mysql_native_password #Lösen Sie das Problem der Datenbank-PasswortverschlüsselungUmgebung: #UmgebungsvariableMYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: WordPress volumes: #Definieren Sie das Speichervolumen, das in den folgenden Volumes definiert ist - mysql-data:/var/lib/mysql Netzwerke: -meine-Brücke Bände: MySQL-Daten: Netzwerke: meine Brücke: Treiber: Brücke Starten Sie den Container in Diensten [root@docker-node1 komponieren-wordpress]# ls docker-compose.yml [root@docker-node1 compose-wordpress]# docker-compose up Starten Sie den Container mit docker-compose up. Dieser Befehl führt standardmäßig die Datei docker-compose.yml im aktuellen Verzeichnis aus. Sie können den vollständigen Befehl auch als docker-compose -f docker-compose.yml up schreiben. 2. Flask-Web Erstellen Sie drei Dateien: app.py docker-compose.yml Dockerfile [root@docker-node1 Compose-Flasche]# ls app.py docker-compose.yml Docker-Datei Schreiben Sie die Datei app.py aus Flasche importieren Flasche von Redis importieren Redis Betriebssystem importieren App = Flask(__name__) redis = Redis(Host=os.environ.get('REDIS_HOST'),Port=6379) @app.route('/') def hallo(): returniere 'Hallo Welt' wenn __name__ == "__main__": app.run(Host="0.0.0.0",Port=5000,Debug=True) Schreiben einer Docker-Datei VON python:2.7 KOPIEREN ./app/ ARBEITSVERZEICHNIS /app/ Führen Sie den Befehl „pip install flask redis“ aus. EXPOSE 5000 CMD ["python","app.py"] Schreiben Sie die Datei docker-compose.yml Version: "3" Leistungen: Redis: Bild: Redis Webseite: bauen: Kontext: . Dockerdatei: Dockerdatei Häfen: 8080:5000 Umfeld: REDIS_HOST: redis Starten des Containerdienstes [root@docker-node1 compose-flask]# docker-compose up Zugriffsdienste 4. Horizontale Erweiterung und Lastausgleich1. Maßstab Die Bereitstellung der Flask-Anwendung wird oben über Docker Compose abgeschlossen. Der aktuell ausgeführte Container ist: [root@docker-node1 Compose-Flasche]# Docker-Compose ps Name Befehl Status Ports --------------------------------------------------------------------------------------------------- compose-flask_redis_1 docker-entrypoint.sh redis ... Bis 6379/tcp compose-flask_web_1 python app.py Hoch 0.0.0.0:8080->5000/tcp Über den Befehl „docker-compose --help“ können Sie sehen, dass es einen Skalierungsparameter gibt: [root@docker-node1 Compose-Flask]# docker-compose --Hilfe Skalieren Festlegen der Anzahl von Containern für einen Dienst Dies bedeutet, dass mehrere Anwendungscontainer aktiviert werden können: [root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d Aber das geht offensichtlich schief, warum? Da die Portzuordnungen der drei Container identisch sind, werden die verbleibenden zwei Anwendungscontainer zwangsläufig Portbelegungsfehler melden. An diesem Punkt müssen Sie die Datei docker-compose.yml ändern, um die Portkonfiguration der Webanwendung zu entfernen: Version: "3" Leistungen: Redis: Bild: Redis Webseite: bauen: Kontext: . Dockerdatei: Dockerdatei Ports: #Dieses Element entfernen - 8080:5000 Umfeld: REDIS_HOST: redis Das ist es. [root@docker-node1 compose-flask]# docker-compose up --scale web=3 -d Compose-flask_web_1 wird neu erstellt … Neuerstellung von compose-flask_web_1 … fertig Neuerstellung von compose-flask_web_2 … fertig Neuerstellung von compose-flask_web_3 … fertig Sehen Sie sich den Container an: [root@docker-node1 Compose-Flask]# Docker PS CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN d0ae3307eb9e compose-flask_web "python app.py" vor 51 Sekunden Aktiv 46 Sekunden 5000/tcp compose-flask_web_1 67483b8decd3 compose-flask_web "python app.py" vor 52 Sekunden Aktiv 47 Sekunden 5000/tcp compose-flask_web_2 741766d49902 compose-flask_web "python app.py" vor 52 Sekunden Up 47 Sekunden 5000/tcp compose-flask_web_3 be3800004658 redis "docker-entrypoint.s…" vor 5 Stunden Up 6 Minuten 6379/tcp compose-flask_redis_1 Aber offensichtlich kann darauf nur innerhalb des Containers zugegriffen werden, da der Port nicht zugeordnet ist. Was sollen wir also als Nächstes tun? Als Nächstes können wir einen HAProxy-Container zum Empfangen von Anfragen verwenden und diese dann über Ports an verschiedene Webserver weiterleiten. Dadurch werden die folgenden Probleme gelöst:
2. Horizontale Expansion und Lastausgleich Dateistruktur [root@docker-node1 Compose-Flasche]# ls app.py docker-compose.yml Docker-Datei Schreiben Sie app.py aus Flasche importieren Flasche von Redis importieren Redis Betriebssystem importieren App = Flask(__name__) redis = Redis(Host=os.environ.get('REDIS_HOST'),Port=6379) @app.route('/') def hallo(): returniere 'Hallo Welt' wenn __name__ == "__main__": app.run(Host="0.0.0.0",Port=80,Debug=True) Schreiben einer Docker-Datei VON python:2.7 KOPIEREN ./app/ ARBEITSVERZEICHNIS /app/ Führen Sie den Befehl „pip install flask redis“ aus. AUSSETZEN 80 CMD ["python","app.py"] Schreiben Sie die Datei docker-compose.yml Version: "3" Leistungen: Redis: Bild: Redis Webseite: bauen: Kontext: . Dockerdatei: Dockerdatei Umfeld: REDIS_HOST: redis Pfund: Bild: Dockercloud/Haproxy Links: - Netz Häfen: -8080:80 Bände: – /var/run/docker.sock:/var/run/docker.sock laufen [root@docker-node1 Compose-Flask]# docker-compose up -d Erstellen des Netzwerks „compose-flask_default“ mit dem Standardtreiber Erstellen von compose-flask_web_1 … fertig Erstellen von compose-flask_redis_1 … fertig Erstellen von compose-flask_lb_1 … fertig Sie können sehen, dass drei Container gestartet werden: [root@docker-node1 Compose-Flasche]# Docker-Compose ps Name Befehl Status Ports -------------------------------------------------------------------------------------------------- compose-flask_lb_1 /sbin/tini --dockercloud- ... Bis 1936/tcp, 443/tcp, 0.0.0.0:8080->80/tcp compose-flask_redis_1 docker-entrypoint.sh redis ... Bis 6379/tcp compose-flask_web_1 python app.py Bis 5000/tcp Wir können sehen, dass es derzeit nur eine Webanwendung gibt und mehrere gestartet werden können, um Anforderungen zu verarbeiten: [root@docker-node1 compose-flask]# docker-compose up --scale web=5 -d compose-flask_redis_1 ist auf dem neuesten Stand Compose-flask_web_1 wird gestartet … fertig Erstellen von compose-flask_web_2 … fertig Erstellen von compose-flask_web_3 … fertig Erstellen von compose-flask_web_4 … fertig Erstellen von compose-flask_web_5 … fertig compose-flask_lb_1 ist aktuell Wie Sie sehen, werden fünf Container direkt für die Webanwendung gestartet, um die Anforderungen von HAProxy zu teilen. Dies ist das Ende dieses Artikels über die Implementierung der Docker Compose-Mehrcontainerbereitstellung. Weitere Informationen zur Docker Compose-Mehrcontainerbereitstellung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Details zur Vue-Vorlagenkompilierung
>>: Analyse der Prinzipien der MySQL Slow Query-bezogenen Parameter
Holen Sie sich das aktuelle Datum + die aktuelle ...
Vorwort: Beim Entwerfen einer Tabelle in MySQL em...
Lassen Sie uns zu Beginn darüber sprechen, was La...
offizielle Tomcat-Website Tomcat entspricht einem...
Das Befehlsformat für die MySQL-Anmeldung ist: my...
1. So überwachen Sie MySQL-Deadlocks in Produktio...
Inhaltsverzeichnis Optimieren von Sortierabfragen...
Inhaltsverzeichnis Vorwort 1. bat führt js aus 2....
Dinge zu beachten 1. Zunächst müssen Sie im MySQL...
In diesem Artikel wird der spezifische Code des J...
Dieser Artikel veranschaulicht anhand von Beispie...
Wenn Ihr aktueller Pfad beispielsweise /var/log i...
Es gibt viele Schleifenanweisungen in JavaScript,...
3 Möglichkeiten zum Implementieren des Tab-Wechse...
Inhaltsverzeichnis 1. Beispiel: Hiermit können Da...