Sie fragen sich, was Docker Compose ist?

Docker ist das beliebteste Containerisierungswerkzeug in der DevOps-Welt. Aber was ist Docker Compose?

Docker Compose wird verwendet, um Anwendungen mit mehreren Containern über eine YAML-Datei auszuführen.

Es kann mehrere Fälle geben, in denen die Docker-Anwendung mehrere Container für verschiedene Technologie-Stacks ausführen muss. Das Erstellen, Ausführen und Verbinden separater Dockerdateien für jeden Container kann eine schwierige Aufgabe sein; hier hilft Ihnen docker-compose.

Mit einer einzigen und unkomplizierten Datei docker-compose.yml können Sie alle Container mit einem einzigen Befehl erstellen, verbinden und starten. Dies ist sehr nützlich für Unternehmensanwendungen in der Produktion, bei denen mehrere Anwendungen in Containern laufen. Es spart viel Zeit, da Sie 100 Anwendungen in Docker-Containern ausführen können.

Installation von Docker Compose

Docker sollte bereits auf Ihrem System installiert sein, bevor Sie compose installieren.

Führen Sie den folgenden Befehl aus, um docker-compose zu installieren.

geekflare@geekflare:/home/geekflare$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[sudo] Passwort für geekflare:

% Total % Received % Xferd Durchschnittliche Geschwindigkeit Zeit Zeit Zeit Aktuell

Dload Upload Total Verbraucht Linke Geschwindigkeit

100 617 0 617 0 0 1209 0 --:--:-- --:--:-- --:--:-- 1209

100 11.1M 100 11.1M 0 0 348k 0 0:00:32 0:00:32 --:--:-- 476k

Führen Sie den folgenden Befehl aus, um die Dateiberechtigungen zu setzen.

geekflare@geekflare:/home/geekflare$ sudo chmod x /usr/local/bin/docker-compose

Überprüfen Sie, ob es korrekt installiert wurde. Es sollte die Version von docker-compose zurückgeben.

geekflare@geekflare:/home/geekflare$ docker-compose --version

docker-compose Version 1.23.1, Build b02f1306

Im Folgenden finden Sie eine Liste der Befehle, die Sie mit docker-compose verwenden können.

geekflare@geekflare:/home/geekflare$ docker-compose

Definieren und betreiben Sie Multi-Container-Anwendungen mit Docker.

Verwendung:

docker-compose [-f <arg>...] [Optionen] [COMMAND] [ARGS...]

docker-compose -h|--help

Optionen:

-f, --file FILE Angabe einer alternativen Kompositionsdatei

(Standard: docker-compose.yml)

-p, --project-name NAME Legen Sie einen alternativen Projektnamen fest

(Voreinstellung: Verzeichnisname)

--verbose Mehr Ausgabe anzeigen

--log-level LEVEL Legt die Protokollstufe fest (DEBUG, INFO, WARNING, ERROR, CRITICAL)

--no-ansi Keine ANSI-Steuerzeichen ausgeben

-v, --version Version ausgeben und beenden

-H, --host HOST Daemon-Socket, zu dem eine Verbindung aufgebaut werden soll


--tls TLS verwenden; impliziert durch -tlsverify

--tlscacert CA_PATH Nur von dieser CA signierten Zertifikaten vertrauen

--tlscert CLIENT_CERT_PATH Pfad zur TLS-Zertifikatsdatei

--tlskey TLS_KEY_PATH Pfad zur TLS-Schlüsseldatei

--tlsverify TLS verwenden und die Gegenstelle verifizieren

--skip-hostname-check Überprüft den Hostnamen des Daemons nicht mit der

im Client-Zertifikat angegebenen Namen

--project-directory PATH Geben Sie ein alternatives Arbeitsverzeichnis an

(Standard: der Pfad der Compose-Datei)

--compatibility Wenn diese Option gesetzt ist, wird Compose versuchen, das Deployment zu konvertieren

schlüssel in v3-Dateien in ihr Nicht-Swarm-Äquivalent umzuwandeln

Befehle:

build Dienste aufbauen oder neu aufbauen

bundle Erzeugen Sie ein Docker-Bundle aus der Compose-Datei

config Validieren und Anzeigen der Compose-Datei

create Dienste erstellen

down Container, Netzwerke, Images und Volumes stoppen und entfernen

ereignisse Empfangen von Echtzeit-Ereignissen von Containern

exec Ausführen eines Befehls in einem laufenden Container

help Hilfe zu einem Befehl abrufen

bilder Bilder auflisten

kill Container löschen

logs Ausgabe von Containern anzeigen

pause Dienste anhalten

port Den öffentlichen Port für eine Portbindung ausgeben

ps Container auflisten

pull Dienst-Images abrufen

push Bilder von Diensten pushen

restart Dienste neu starten

rm Gestoppte Container entfernen

run Einen einmaligen Befehl ausführen

scale Anzahl der Container für einen Dienst festlegen

start Dienste starten

stop Dienste stoppen

top Anzeige der laufenden Prozesse

unpause Dienste aufheben

up Container erstellen und starten

version Zeigt die Docker-Compose Versionsinformationen an

Docker-Compose-Datei

Hier ist ein Beispiel für eine Docker-Compose-Datei, die den ganzen Zauber ausführt.

version: '3'

dienste:

web:

bauen: .

ports:

- "5000:5000"

redis:

bild: "redis:alpine"

Die erste Zeile in dieser Datei gibt die verwendete Version an. Diese Zahl hängt von der auf Ihrem System installierten Docker-Engine ab. Ich habe Docker 18.09.6 installiert, was zu Version 3 von docker-compose gehört. Weitere Details zu den Versionen finden Sie hier – https://docs.docker.com/compose/compose-file/compose-versioning/

In dieser Docker-Datei laufen zwei Dienste/Anwendungen, Web und Redis. Der Webdienst wird über eine Dockerdatei erstellt und läuft auf dem Standard-Port des Flask-Webservers – 5000. Der Redis-Dienst wird ausgeführt, indem das Redis-Image aus der Docker-Hub-Registry gezogen wird.

Um die Datei docker-compose.yml auszuführen, müssen Sie einen sehr einfachen Befehl ausführen: docker-compose up

Docker Compose Arbeitsablauf

Nachfolgend finden Sie die drei Schritte zur Verwendung von docker-compose.

  1. Erstellen Sie für jeden Dienst ein Dockerfile
  2. Erstellen Sie eine Datei docker-compose.yml, um alle Dockerdateien zu verbinden
  3. Führen Sie den Befehl docker-compose up aus, um das System zu starten

Lassen Sie mich am Beispiel der Beispielsdatei docker-compose, die wir vorhin gesehen haben, zeigen, wie die Projektstruktur erstellt wird.

meine-app

|-----web

|---------Dockerfile

|-----redis

|docker-compose.yml

my-app ist mein Hauptprojektverzeichnis. In diesem Verzeichnis befinden sich die Verzeichnisse der Web- und Redis-Dienste und die YAML-Datei von docker-compose. Die Dockerdatei des Webdienstes befindet sich in einem Web-Verzeichnis. Da der Redis-Dienst direkt vom Docker-Hub bezogen wird, ist im Redis-Verzeichnis keine Dockerdatei erforderlich. So sieht der Arbeitsablauf von docker-compose aus.

Containerisierung einer MEAN Stack-Anwendung mit Docker Compose

Nun, da Sie die grundlegenden Konzepte verstanden haben. Lassen Sie mich Ihnen anhand einer Demo zeigen, wie Sie eine MEAN-Stack-Anwendung mit docker-compose containerisieren.

MEAN steht für MongoDB, Express, Angular und Node.js. Anwendungen, die diese Dienste zusammen verwenden, werden auch als MEAN/Full-Stack-Anwendung bezeichnet.

Für diese Demo werden wir drei Docker-Container ausführen:

  • Container 1 – Angular
  • Container 2 – NodeJS und ExpressJS
  • Container 3 – MongoDB

Laden Sie die vollständige Anwendung hier herunter: http://bit.ly/2St7r3A (nicht für die Produktion getestet)

So wird meine Datei docker-compose.yml aussehen, um diese drei Container auszuführen:

version: '3'

dienste:

angular:

bauen: angular-client

ports:

- "4200:4200"

volumen:

- ./angular-client/:/var/www/app

express:

bauen: express-server

ports:

- "3000:3000"

volumen:

- ./express-server/:/var/www/app

links:

- datenbank

datenbank:

bild: Mongo

ports:

- "27017:27017"
  • Die erste Zeile gibt die verwendete Version von docker-compose an
  • Wir führen drei Dienste aus – Angular, Express und Datenbank
  • Der Angular-Dienst wird mit einer Dockerdatei erstellt. Er wird auf Port 4200 ausgeführt, und das Anwendungsvolumen ist /var/www/app
  • Der Express-Dienst wird mit Hilfe einer Dockerdatei erstellt. Der Express-Server läuft auf Port 3000, und das Volume ist /var/www/app
  • Der Datenbankdienst zieht das MongoDB-Image von dockerhub und startet es an Post 27017

Entpacken Sie das Projekt im Home-Verzeichnis und wechseln Sie in das Angular-Client-Verzeichnis.

geekflare@geekflare:~$ cd mean

geekflare@geekflare:~/mean$ cd angular-client 

Führen Sie den folgenden Befehl aus, wenn Sie den Node Package Manager (npm) nicht auf Ihrem System installiert haben (wenn er installiert ist, ignorieren Sie ihn).

geekflare@geekflare:~/mean/angular-client$ sudo apt install npm

[sudo] Passwort für geekflare:

Paketlisten lesen... Erledigt

Abhängigkeitsliste erstellen

Lesen von Statusinformationen... Erledigt

Die folgenden zusätzlichen Pakete werden installiert:

gyp javascript-common libc-ares2 libhttp-parser2.8 libjs-async libjs-inherits libjs-is-typedarray

libjs-jquery libjs-node-uuid libjs-underscore libssl1.0-dev libuv1 libuv1-dev node-abbrev node-ajv

node-ansi node-ansi-farbentabelle node-ansi-regex node-ansi-styles node-ansistyles node-aproba node-archy

node-sind-wir-doch-da node-async node-aws-sign2 node-balanced-match node-block-stream node-bluebird

node-boom node-brace-expansion node-builtin-modules node-camelcase node-caseless node-chalk node-cliui

node-clone node-co node-color-convert node-color-name node-combined-stream node-concat-map

node-config-chain node-console-control-strings node-cookie-jar node-copy-concurrently node-core-util-is

node-yallist node-yargs node-yargs-parser nodejs nodejs-dev nodejs-doc

Empfohlene Pakete:

apache2 | lighttpd | httpd node-aws-sign node-oauth-sign node-http-signature debhelper

Die folgenden NEUEN Pakete werden installiert:

gyp javascript-common libc-ares2 libhttp-parser2.8 libjs-async libjs-inherits libjs-is-typedarray

libjs-jquery libjs-node-uuid libjs-underscore libssl1.0-dev libuv1 libuv1-dev node-abbrev node-ajv

node-ansi node-ansi-farbentabelle node-ansi-regex node-ansi-styles node-ansistyles node-aproba node-archy

node-sind-wir-doch-da node-async node-aws-sign2 node-balanced-match node-block-stream node-bluebird

0 upgegradet, 212 neu installiert, 0 zu entfernen und 233 nicht upgegradet.

Sie benötigen 10,5 MB an Archiven.

Nach diesem Vorgang werden 53,6 MB zusätzlicher Speicherplatz benötigt.

Möchten Sie fortfahren? [Y/n] Y

Get:1 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 gyp all 0.1 20180428git4d467626-1 [237 kB]

Hole:2 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 javascript-common alle 11 [6.066 B]

Get:3 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 libhttp-parser2.8 amd64 2.8.1-1 [20.8 kB]

Get:4 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libjs-async alle 0.8.0-3 [25.4 kB]

Get:5 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libjs-is-typedarray all 1.0.0-2 [2,934 B]

Hole:6 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 libjs-jquery alle 3.2.1-1 [152 kB]

Hole:7 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libjs-node-uuid alle 1.4.7-5 [11.5 kB]

Hole:8 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 libjs-underscore alle 1.8.3~dfsg-1 [59.9 kB]

Get:9 http://us.archive.ubuntu.com/ubuntu cosmic-updates/main amd64 libssl1.0-dev amd64 1.0.2n-1ubuntu6.2 [1.366 kB]

Abgerufen 10.5 MB in 1min 34s (112 kB/s)

Extrahieren von Vorlagen aus Paketen: 100%

Auswählen des zuvor nicht ausgewählten Pakets gyp.

(Lesen der Datenbank ... 180130 Dateien und Verzeichnisse sind derzeit installiert.)

Vorbereiten des Entpackens von .../000-gyp_0.1 20180428git4d467626-1_all.deb ...

Entpacken von gyp (0.1 20180428git4d467626-1) ...

Auswählen des zuvor nicht ausgewählten Pakets javascript-common.

Vorbereiten zum Entpacken von .../001-javascript-common_11_all.deb ...

Entpacken von javascript-common (11) ...

Auswählen des zuvor nicht ausgewählten Pakets libhttp-parser2.8:amd64.

Vorbereiten des Entpackens von .../002-libhttp-parser2.8_2.8.1-1_amd64.deb ...

Einrichten von node-fstream-ignore (0.0.6-2) ...

Einrichten von node-gyp (3.6.2-2) ...

Einrichten von node-yargs (10.0.3-2) ...

Einrichten von npm (5.8.0 ds-2) ...

Verarbeiten von Triggern für libc-bin (2.28-0ubuntu1) ...

Wechseln Sie in das Verzeichnis angular-client und führen Sie npm install aus.

geekflare@geekflare:~/mean/angular-client$ npm install

> uws@0.14.5 install /home/geekflare/mean/angular-client/node_modules/uws

> node-gyp rebuild > build_log.txt 2>&1 || exit 0

> node-sass@4.7.2 install /home/geekflare/mean/angular-client/node_modules/node-sass

> node-scripts/install.js

Herunterladen der Binärdatei von https://github.com/sass/node-sass/releases/download/v4.7.2/linux-x64-57_binding.node

Herunterladen abgeschlossen ] - :

Binärdatei gespeichert in /home/geekflare/mean/angular-client/node_modules/node-sass/vendor/linux-x64-57/binding.node

Binärdatei nach /home/geekflare/.npm/node-sass/4.7.2/linux-x64-57_binding.node speichern

> uglifyjs-webpack-plugin@0.4.6 postinstall /home/geekflare/mean/angular-client/node_modules/webpack/node_modules/uglifyjs-webpack-plugin

> node lib/post_install.js

> node-sass@4.7.2 postinstall /home/geekflare/mean/angular-client/node_modules/node-sass

> node skripte/build.js

Binärdatei gefunden unter /home/geekflare/mean/angular-client/node_modules/node-sass/vendor/linux-x64-57/binding.node

Binärdatei testen

Binärdatei ist in Ordnung

hat 1457 Pakete von 1250 Mitwirkenden in 80.009s hinzugefügt

Wechseln Sie nun in das Verzeichnis express und führen Sie npm install aus.

geekflare@geekflare:~/mean/angular-client$ cd ...

geekflare@geekflare:~/mean$ cd express-server/

geekflare@geekflare:~/mean/express-server$ npm install

Nun, da alles eingestellt ist, ist es an der Zeit, die Datei docker-compose.yml auszuführen, die alle Docker-Container starten und die MEAN-Stack-Anwendung ausführen wird.

geekflare@geekflare:~/mean/express-server$ cd ...

geekflare@geekflare:~/mean$ docker-compose up

Erstellen des Netzwerks "mean_default" mit dem Standardtreiber

Angular bauen

Schritt 1/8 : FROM node:8

8: Aus der Bibliothek/node ziehen

a4d8138d0f6b: Abruf abgeschlossen

dbdc36973392: Abruf abgeschlossen

f59d6d019dd5: Abruf beendet

aaef3e026258: Abruf abgeschlossen

6e454d3b6c28: Abruf beendet

c717a7c205aa: Pull komplett

37add8e5ac11: Abruf abgeschlossen

0314ab675d31: Abruf abgeschlossen

012886364728: Abruf abgeschlossen

Digest: sha256:310db2abcff097ef44af205d81833282a6d5471002a1b59d7b7459a74152c856

Status: Neueres Image für node:8 heruntergeladen

--->
 8e45c884a32e

Schritt 2/8 : RUN mkdir -p /var/www/app

--->
 Läuft in c70a0cab7994

Entfernen des Zwischencontainers c70a0cab7994

--->
 001c5e840b24

Schritt 3/8 : WORKDIR /var/www/app

--->
 Läuft in 622ebdc41b2f

Entfernen des Zwischencontainers 622ebdc41b2f

--->
 baa2e2347259

Schritt 4/8 : COPY package.json /var/www/app

--->
 5b97543befab

Schritt 5/8 : RUN npm install

--->
 Läuft in 73e3d8b7a701

> uws@9.14.0 install /var/www/app/node_modules/uws

> node-gyp rebuild > build_log.txt 2>&1 || exit 0

> node-sass@4.12.0 install /var/www/app/node_modules/node-sass

> node-scripts/install.js

Herunterladen der Binärdatei von https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-57_binding.node

Vollständig herunterladen

Binärdatei gespeichert in /var/www/app/node_modules/node-sass/vendor/linux-x64-57/binding.node

Binärdatei nach /root/.npm/node-sass/4.12.0/linux-x64-57_binding.node zwischengespeichert

> core-js@2.6.9 postinstall /var/www/app/node_modules/core-js

> node skripte/postinstall || echo "ignorieren"

Das Projekt braucht Ihre Hilfe! Bitte unterstützen Sie core-js auf Open Collective oder Patreon:

> https://opencollective.com/core-js

> https://www.patreon.com/zloirock

> uglifyjs-webpack-plugin@0.4.6 postinstall /var/www/app/node_modules/webpack/node_modules/uglifyjs-webpack-plugin

> node lib/post_install.js

> node-sass@4.12.0 postinstall /var/www/app/node_modules/node-sass

> node skripte/build.js

Binärdatei gefunden unter /var/www/app/node_modules/node-sass/vendor/linux-x64-57/binding.node

Binärdatei testen

Binärdatei ist in Ordnung

1606 Pakete von 1329 Mitwirkenden hinzugefügt und 15092 Pakete in 112.427s überprüft

Entfernen des Zwischencontainers 73e3d8b7a701

--->
 55790d2fae93

Schritt 6/8 : COPY . /var/www/app

--->
 61537aa487f4

Schritt 7/8 : EXPOSE 4200

--->
 Läuft in 632eedc35a45

Entfernen des Zwischencontainers 632eedc35a45

--->
 51e75b0e2ebe

Schritt 8/8 : CMD ["npm", "start"]

--->
 Läuft in 36bbb12a0d38

Entfernen des Zwischencontainers 36bbb12a0d38

--->
 9f8d61db600c

Erfolgreich gebaut 9f8d61db600c

Erfolgreich getaggt mean_angular:latest

Datenbank abrufen (mongo:)...

aktuellste: Abruf aus library/mongo

35b42117c431: Abruf abgeschlossen

ad9c569a8d98: Pull abgeschlossen

293b44f45162: Pull komplett

0c175077525d: Pull komplett

4e73525b52ba: Pull abgeschlossen

a22695a3f5e9: Abruf abgeschlossen

c5175bcf2977: Pull komplett

3e320da07793: Pull abgeschlossen

01c6db6b2b5a: Abruf abgeschlossen

3bd6e9d03e78: Abruf abgeschlossen

e03dcf51513f: Pull komplett

c1956a9e136a: Pull komplett

4c35cf22b1d5: Abruf abgeschlossen

Gebäude-Express

Schritt 1/9 : FROM Knoten:8

--->
 8e45c884a32e

Schritt 2/9 : RUN mkdir -p /var/www/app

--->
 Cache verwenden

--->
 001c5e840b24

Schritt 3/9 : WORKDIR /var/www/app

--->
 Cache verwenden

--->
 baa2e2347259

Schritt 4/9 : COPY package.json /var/www/app

--->
 0232ad53c679

Schritt 5/9 : Starten Sie npm install

--->
 Läuft in c309bf6f218e

fügte 128 Pakete von 151 Mitwirkenden hinzu und überprüfte 233 Pakete in 9.055s

Entfernen des Zwischencontainers c309bf6f218e

--->
 49e652884562

Schritt 6/9 : RUN npm install -g nodemon

--->
 Läuft in 0ed5d7f3642b

/usr/local/bin/nodemon -> /usr/local/lib/node_modules/nodemon/bin/nodemon.js

> nodemon@1.19.1 postinstall /usr/local/lib/node_modules/nodemon

> node bin/postinstall || exit 0

Sie lieben nodemon? Sie können das Projekt jetzt über das Open Collective unterstützen:

> https://opencollective.com/nodemon/donate

  nodemon@1.19.1

221 Pakete von 128 Mitwirkenden in 18.856s hinzugefügt

Entfernen des Zwischencontainers 0ed5d7f3642b

--->
 32c55606f35e

Schritt 7/9 : COPY . /var/www/app

--->
 a618b38a2812

Schritt 8/9 : EXPOSE 3000

--->
 Läuft in bea389ab3ef1

Entfernen des Zwischencontainers bea389ab3ef1

--->
 684bbfb31371

Schritt 9/9 : CMD ["npm", "start"]

--->
 Wird ausgeführt in 9aa1b72e4a4e

Entfernen des Zwischencontainers 9aa1b72e4a4e

--->
 35dcb3df9806

Erfolgreich gebaut 35dcb3df9806

Erfolgreich getaggt mean_express:latest

Erstellen von mean_angular_1_de44b3f5b988 ... erledigt

Erstellen von mean_database_1_708f8f9c3c33 ... erledigt

Mean_express_1_b57a483a72ee erstellen ... erledigt

Anhängen an mean_angular_1_f257e2233ef1, mean_database_1_ccc5c677e00b, mean_express_1_574f07b045fc

angular_1_f257e2233ef1 |

angular_1_f257e2233ef1 | > my-app@0.0.0 start /var/www/app

angular_1_f257e2233ef1 | > ng serve -H 0.0.0.0

angular_1_f257e2233ef1 |

database_1_ccc5c677e00b | 2019-07-20T22:33:25.933 0000 I CONTROL [main] Automatisches Deaktivieren von TLS 1.0, um TLS 1.0 zu erzwingen, geben Sie --sslDisabledProtocols 'none' an

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] MongoDB startet : pid=1 port=27017 dbpath=/data/db 64-bit host=f74b56905249

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] db version v4.0.10

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] OpenSSL Version: OpenSSL 1.0.2g 1 Mar 2016

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] Zuweiser: tcmalloc

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] Module: keine

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] build environment:

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] distmod: ubuntu1604

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] distarch: x86_64

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] target_arch: x86_64

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] Optionen: { net: { bindIpAll: true } }

express_1_574f07b045fc |

express_1_574f07b045fc | > express-server@0.0.0 start /var/www/app

express_1_574f07b045fc | > nodemon ./bin/www

express_1_574f07b045fc |

express_1_574f07b045fc | [nodemon] 1.19.1

express_1_574f07b045fc | [nodemon] um jederzeit neu zu starten, geben Sie `rs` ein

express_1_574f07b045fc | [nodemon] beobachten: *.*

express_1_574f07b045fc | [nodemon] startet `node ./bin/www`

database_1_ccc5c677e00b | 2019-07-20T22:33:33.543 0000 I NETWORK [listener] Verbindung akzeptiert von 172.19.0.4:38958 #1 (1 Verbindung jetzt offen)

database_1_ccc5c677e00b | 2019-07-20T22:33:33.560 0000 I NETWORK [conn1] erhielt Client-Metadaten von 172.19.0.4:38958 conn1: { driver: { name: "nodejs", version: "3.0.1" }, os: { type: "Linux", Name: "linux", Architektur: "x64", Version: "4.18.0-25-generic" }, Plattform: "Node.js v8.16.0, LE, mongodb-core: 3.0.1" }

express_1_574f07b045fc | mongodb: verbunden

angular_1_f257e2233ef1 | ** NG Live Development Server hört auf 0.0.0.0:4200, öffnen Sie Ihren Browser auf http://localhost:4200/ **

angular_1_f257e2233ef1 | Datum: 2019-07-21T11:21:03.868Z - Hash: 639d9a968476ed482b5c - Zeit: 336ms

angular_1_f257e2233ef1 | 4 unveränderte Chunks

angular_1_f257e2233ef1 | chunk {main} main.bundle.js (main) 19.8 kB [initial] [gerendert]

angular_1_f257e2233ef1 |

angular_1_f257e2233ef1 | webpack: Erfolgreich kompiliert.

angular_1_f257e2233ef1 | webpack: Kompiliert...

angular_1_f257e2233ef1 | Datum: 2019-07-21T11:25:15.661Z - Hash: e5a2b1c1afe0deb396c3 - Zeit: 251ms

angular_1_f257e2233ef1 | 4 unveränderte Chunks

angular_1_f257e2233ef1 | chunk {main} main.bundle.js (main) 19.8 kB [initial] [gerendert]

angular_1_f257e2233ef1 |

angular_1_f257e2233ef1 | webpack: Erfolgreich kompiliert.

Gehen Sie zu Ihrem Browser und überprüfen Sie https://localhost:4200. Ihre Anwendung wird nun ausgeführt.

angular - docker compose

Rufen Sie https://localhost:3000 auf, um zu überprüfen, ob ein Express-Server läuft.

express - docker compose

Sie können auch den Befehl docker images ausführen, um zu sehen, welche Images in docker vorhanden sind.

geekflare@geekflare:~/mean$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

mean_express latest 35dcb3df9806 vor 14 Stunden 923MB

mean_angular aktuell 9f8d61db600c vor 14 Stunden 1.29GB

node 8 8e45c884a32e vor 9 Tagen 895MB

mongo latest 785c65f61380 vor 2 Wochen 412MB

Führen Sie den folgenden Befehl aus, um die in Docker ausgeführten Container zu sehen.

geekflare@geekflare:~/mean$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

681c9c34bee2 mean_express "docker-entrypoint.s..." vor 14 Stunden Up 14 Stunden 0.0.0.0:3000->3000/tcp mean_express_1_574f07b045fc

f74b56905249 mongo "docker-entrypoint.s..." vor 14 Stunden Up 14 Stunden 0.0.0.0:27017->27017/tcp mean_database_1_ccc5c677e00b

260ef1e52dab mean_angular "docker-entrypoint.s..." vor 14 Stunden Up 14 Stunden 0.0.0.0:4200->4200/tcp mean_angular_1_f257e2233ef1

Jetzt sind also alle drei Docker-Container in Betrieb.

Docker-compose hat die Ausführung aller Container problemlos übernommen. Dies war ein einfaches Beispiel für den Betrieb von drei Containern; Sie können sich vorstellen, wie nützlich es sein wird, wenn die Anwendungen auf 100 Containern gestartet werden müssen. Probieren Sie es einfach aus, um zu sehen, wie es funktioniert.

More on Docker