GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Docker Compose Up vs. Start und Down vs. Stop:Erklärung der Unterschiede

Wenn Sie neu bei Docker Compose sind und es anhand verschiedener Tutorials lernen, stoßen Sie möglicherweise auf Begriffe wie docker-compose up, docker-compose up -d, docker-compose stop, docker-compose down oder sogar docker -compose stop.

Diese Begriffe reichen aus, um einen Docker-Anfänger zu verwirren, da sich viele dieser Docker-Compose-Befehle sehr ähnlich zu verhalten scheinen.

Tatsächlich kann es anfangs besonders schwierig sein, den Unterschied zwischen docker-compose up sofort zu erkennen und docker-compose start .

Ist das Starten eines Containers über Docker Compose nicht dasselbe wie das Ausführen des up-Befehls? Nicht ganz.

Lassen Sie mich Ihnen alles im Detail erklären.

Unterschiede zwischen Docker Compose up, up -d, stop, start, down und down -v

Was diese Befehle bewirken:

Docker Compose up-Befehl stellt Web-App-Dienste bereit und erstellt frische neue Container aus dem Docker-Image, zusammen mit der Einrichtung von Netzwerken, Volumes und jeder Konfiguration, die in der Docker-Compose-Datei angegeben ist. Wenn Sie -d angeben , bedeutet dies, dass Sie ihm sagen, dass es im getrennten Modus ausgeführt werden soll, damit es im Hintergrund läuft, indem Sie Ihnen die Kontrolle über das Terminal geben (wird gleich anhand einiger Beispiele unten besprochen).

Stoppbefehl für Docker Compose stoppt alle Dienste, die einer Docker Compose-Konfiguration zugeordnet sind. Es werden KEINE Container oder zugehörigen internen Volumes oder Netzwerke entfernt.

Startbefehl für Docker Compose startet alle angehaltenen Dienste, wie sie in einer angehaltenen Konfiguration basierend auf derselben Docker Compose-Datei angegeben wurden.

Docker Compose down-Befehl stoppt alle Dienste, die einer Docker Compose-Konfiguration zugeordnet sind. Im Gegensatz zu stop entfernt es auch alle Container und internen Netzwerke, die mit den Diensten verbunden sind. Aber NICHT intern angegebene Volumes. Auch dafür müssen Sie zusätzlich das -v angeben Flag nach dem down Befehl.

Das klingt ähnlich wie der Docker-Befehl run vs start, richtig?

Docker Run vs. Start vs. Create:Unterschied erklärtFür einen Docker-Anfänger könnten Begriffe wie Docker-Start, Docker-Run und Docker-Erstellung verwirrend sein. Dieser Artikel erklärt den Unterschied anhand von Beispielen. Linux-HandbuchAbhishek Prakash

Genug Theorie, schauen wir uns jetzt einige praktische Beispiele an.

Den Unterschied anhand eines praktischen Beispiels verstehen

Wenn Sie den Beispielen folgen möchten, vergewissern Sie sich, dass Sie bereits Docker und das Docker Compose-Installationsprogramm haben.

Angenommen, Sie verwenden ein auf Docker Compose basierendes Ghost-Blog-Setup, das auf Ihrem Linux-Server ausgeführt wird.

In all unseren Self-Host-Tutorials tendiere ich meistens dazu, das -d zu verwenden -Flag, wenn wir unsere Konfigurationen auf unseren Servern bereitstellen. Aber was ist, wenn Sie es nicht angeben?

[email protected]:~/ghost$ docker-compose up
Pulling ghost (ghost:4.20.3)...
4.20.3: Pulling from library/ghost
b380bbd43752: Pull complete
8d36a6ce056a: Pull complete
f75fe68b8e22: Pull complete
44f6d143e12f: Pull complete
0ebe8063dedd: Pull complete
f984e0e37c5a: Pull complete
ce2320facea8: Pull complete
898c3dbc1716: Pull complete
45c37559f24a: Pull complete
Digest: sha256:b332684117bfa05329298712ad0ffcfc4a83ce6314332e073978f46be3c05e81
Status: Downloaded newer image for ghost:4.20.3
Creating ghost_ghost_1 ... done
Attaching to ghost_ghost_1
ghost_1  | [2021-10-26 07:02:05] INFO Ghost is running in production...
ghost_1  | [2021-10-26 07:02:05] INFO Your site is now available on https://ghost.domain.com/
ghost_1  | [2021-10-26 07:02:05] INFO Ctrl+C to shut down
ghost_1  | [2021-10-26 07:02:05] INFO Ghost server started in 0.369s
ghost_1  | [2021-10-26 07:02:06] WARN Database state requires initialisation.
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: posts
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: posts_meta
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: users
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: oauth
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: posts_authors
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: roles
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: roles_users
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: permissions
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: permissions_users
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: permissions_roles
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: settings
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: tags
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: posts_tags
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: invites
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: brute
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: sessions
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: integrations
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: webhooks
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: api_keys
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: mobiledoc_revisions
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: products
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: offers
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: benefits
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: products_benefits
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_products
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_payment_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_login_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_email_change_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_status_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_product_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_paid_subscription_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: labels
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_labels
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_stripe_customers
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_stripe_customers_subscriptions
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: offer_redemptions
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: members_subscribe_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: stripe_products
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: stripe_prices
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: actions
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: emails
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: email_batches
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: email_recipients
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: tokens
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: snippets
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: temp_member_analytic_events
ghost_1  | [2021-10-26 07:02:06] INFO Creating table: custom_theme_settings
ghost_1  | [2021-10-26 07:02:06] INFO Model: Product
ghost_1  | [2021-10-26 07:02:06] INFO Model: Tag
ghost_1  | [2021-10-26 07:02:06] INFO Model: Role
ghost_1  | [2021-10-26 07:02:06] INFO Model: Permission
ghost_1  | [2021-10-26 07:02:07] INFO Model: User
ghost_1  | [2021-10-26 07:02:07] INFO Model: Post
ghost_1  | [2021-10-26 07:02:08] INFO Model: Integration
ghost_1  | [2021-10-26 07:02:08] INFO Relation: Role to Permission
ghost_1  | [2021-10-26 07:02:08] INFO Relation: Post to Tag
ghost_1  | [2021-10-26 07:02:08] INFO Relation: User to Role
ghost_1  | [2021-10-26 07:02:08] INFO Database is in a ready state.
ghost_1  | [2021-10-26 07:02:08] INFO Ghost database ready in 3.309s
ghost_1  | [2021-10-26 07:02:09] INFO Ghost booted in 4.457s
ghost_1  | [2021-10-26 07:02:09] INFO Adding offloaded job to the queue
ghost_1  | [2021-10-26 07:02:09] INFO Scheduling job update-check at 49 27 22 * * *. Next run on: Tue Oct 26 2021 22:27:49 GMT+0000 (Coordinated Universal Time)
ghost_1  | [2021-10-26 07:02:51] INFO "GET /favicon.ico" 200 7ms
ghost_1  | [2021-10-26 07:02:51] INFO "GET /" 200 605ms
ghost_1  | [2021-10-26 07:02:51] INFO "GET /assets/built/screen.css?v=dde6c321bb" 200 5ms
ghost_1  | [2021-10-26 07:02:51] INFO "GET /assets/built/casper.js?v=dde6c321bb" 200 3ms
ghost_1  | [2021-10-26 07:02:52] INFO "GET /members/api/member/" 204 1ms
ghost_1  | [2021-10-26 07:02:52] INFO "GET /members/api/site/" 200 14ms
ghost_1  | [2021-10-26 07:02:52] INFO "GET /favicon.ico" 200 2ms

Nun siehst du? Ohne das -d Option starten Sie Ihre Konfiguration, aber es geschieht in einem ausführlichen Modus, ohne zur Terminal-Eingabeaufforderung zurückzukehren. Irgendwie hilfreich, oder? Wenn Sie den Browser öffnen und auf das Ghost-Blog zugreifen, finden Sie es innerhalb weniger Augenblicke zugänglich. Aber was ist, wenn Sie die Konsole mit Strg + Z verlassen? Dadurch wird der Prozess im Hintergrund ausgeführt, und Sie können dies mit dem docker ps-Befehl überprüfen :

[email protected]:~/ghost$ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS          PORTS                                                                      NAMES
563a45d049cf   ghost:4.20.3                             "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes    2368/tcp                                                                   ghost_ghost_1

Aber was passiert mit dem Container, wenn Sie stattdessen Strg+C verwenden? Der Prozess wird sofort beendet.

[email protected]:~/ghost$ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS          PORTS                                                                      NAMES

Wenn Sie das -d verwenden Option, was es tut, ist sehr ähnlich zu Strg+Z:Es trennt sich von der Konsole und führt den Container im Hintergrund weiter aus und gibt auch den neuen Containernamen aus (ghost_ghost_1 in diesem Fall).

Anstatt jetzt docker-compose down zu verwenden verwenden wir docker-compose stop :

[email protected]:~/ghost$ docker-compose stop
[email protected]:~/ghost$

Lassen Sie uns nun unsere laufenden Container überprüfen. Erwartungsgemäß sollte es keine geben:

[email protected]:~/ghost$ docker-compose ps
    Name                   Command               State    Ports
---------------------------------------------------------------
ghost_ghost_1   docker-entrypoint.sh node  ...   Exit 0 

Beachten Sie, dass ich docker ps nicht verwendet habe . Stattdessen habe ich docker-compose ps ausgeführt weil ich Ihnen eine andere Möglichkeit zeigen wollte, den Exit 0 zu verifizieren Zustand. Das bedeutet, dass der Container beendet/angehalten wurde.

Lassen Sie uns dies noch einmal mit docker ps -a überprüfen . Das -a flag sucht auch nach angehaltenen Containern:

[email protected]:~/ghost$ docker ps -a
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS                     PORTS                                                                      NAMES
44d09e778a91   ghost:4.20.3                             "docker-entrypoint.s…"   8 minutes ago   Exited (0) 7 minutes ago                                                                              ghost_ghost_1

Was ist docker-compose start dann?

Docker Compose Start ist nur dann sinnvoll, wenn Sie keinen Container mit docker-compose down entfernt haben (das habe ich in dieser Tutorial-Befehlszeile noch nicht getan). Der Unterschied besteht also im Grunde darin, dass Container gestartet werden, die angehalten und nicht entfernt wurden.

Lassen Sie uns also zuerst start verwenden statt up jetzt und sehen was passiert:

[email protected]:~/ghost$ docker-compose start
Starting ghost ... done
[email protected]:~/ghost$ 

Was jetzt passiert, ist, dass der angehaltene Container erneut gestartet wird:

[email protected]:~/ghost$ docker-compose ps
    Name                   Command               State    Ports  
-----------------------------------------------------------------
ghost_ghost_1   docker-entrypoint.sh node  ...   Up      2368/tcp

Los geht's. Der Staat ist jetzt Up zurück von Exit 0 . Sie können dies auch mit dem docker erneut überprüfen Version des Befehls:

[email protected]:~/ghost$ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED          STATUS              PORTS                                                                      NAMES
44d09e778a91   ghost:4.20.3                             "docker-entrypoint.s…"   22 minutes ago   Up About a minute   2368/tcp                                                                   ghost_ghost_1

Lassen Sie uns nun den stop ausführen Befehl erneut.

[email protected]:~/ghost$ docker-compose stop
Stopping ghost_ghost_1 ... done

Sie wissen jetzt, wie der Zustand des Containers ist. Sie können entweder den up verwenden oder start Befehl, um es wieder zum Laufen zu bringen. Beachten Sie, dass Sie down ausführen können auch in diesem Zustand, ohne die Dienste neu zu starten:

[email protected]:~/ghost$ docker-compose down
Removing ghost_ghost_1 ... done
Network net is external, skipping

Der Behälter wird jetzt entfernt. Wenn in der Docker Compose-Datei interne Netzwerke angegeben waren, wurden diese ebenfalls entfernt. Seit net extern ist, wird es beim Entfernen übersprungen. Hatten Sie den -v angegeben zusätzlich markieren, wäre es auch entfernt worden!

[email protected]:~/ghost$ docker-compose down -v
Stopping ghost_ghost_1 ... done
Removing ghost_ghost_1 ... done
Network net is external, skipping
Volume ghost is external, skipping

Sei immer doppelt vorsichtig mit deinen Daten!

Bonus-Tipp:Beachten Sie, dass die Verwendung von „-v“ es nicht entfernt, da ich ein externes Volume verwende (das zuvor über „docker volume create volume-name“ erstellt wurde). Es ist nur für Volumes gedacht, die anhand Ihrer Docker Compose-Spezifikationen erstellt wurden. Aber im Gegenteil, „Docker Volume Prune“ würde ein externes Volume entfernen, selbst wenn es von einem Container verwendet wird! Definitive Guide on Backup and Restore of Docker Containers Nutzen Sie sowohl die Cloud als auch Ihr lokales System, um Ihre Docker-Container zu sichern und wiederherzustellen. Linux-HandbuchAvimanyu Bandyopadhyay

Außerdem können Sie start nicht verwenden in diesem Stadium. Es funktioniert nur für stop ped-Konfigurationen:

[email protected]:~/ghost$ docker-compose start
Starting ghost ... failed
ERROR: No containers to start

In einem solchen Fall müssen Sie docker-compose up verwenden oder docker-compose up -d noch einmal.

[email protected]:~/ghost$ docker-compose up -d
Creating ghost_ghost_1 ... done
[email protected]:~/ghost$

Zusammenfassung

Ich hoffe, dieser Artikel hat Ihnen ein besseres Verständnis von up vermittelt vs up -d vs start sowie stop vs down und down -v für Docker Compose.

Eine Kurzanleitung zur Verwendung von Docker ComposeDocker Compose ist ein Docker-natives Tool, das die Verwaltung von Multi-Container-Anwendungen zum Kinderspiel macht. Linux-HandbuchHunter Wittenborn

Dieser umfangreiche Erklärleitfaden sollte Ihr tägliches Docker-Management von nun an viel einfacher und weniger überwältigend machen. Je nach Szenario, insbesondere in Produktivsystemen, welchen Befehl Sie wählen, um eine Situation zu klären, wird sich natürlich in der Art und Weise unterscheiden, wie Sie ihn implementieren.

Wenn Sie Gedanken, Fragen oder Vorschläge zum Teilen haben, hinterlassen Sie bitte unten einen Kommentar.


Docker
  1. So installieren Sie Docker und Docker Compose unter Debian 11

  2. Unterschiede zwischen Vi- und Vim-Texteditoren erklärt

  3. Was ist neu in Docker Compose v2?

  4. Docker Run vs. Start vs. Create:Unterschied erklärt

  5. So installieren und verwenden Sie Docker Compose unter CentOS

Was ist Docker Compose und wie wird es verwendet?

So installieren Sie Docker und Docker Compose unter Linux

So stoppen Sie Docker-Container

.NET Core und Docker

.NET und Docker

Docker-Container auflisten / starten / stoppen / löschen