GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Docker Compose Up vs. Start a Down vs. Stop:Rozdíly vysvětleny

Pokud s Docker Compose teprve začínáte a učíte se ji sledováním různých výukových programů, můžete se setkat s výrazy jako docker-compose up, docker-compose up -d, docker-compose stop, docker-compose down nebo dokonce docker -zastavení skládání.

Tyto výrazy stačí k tomu, aby začátečníky v dockeru zmátly, protože se zdá, že mnoho z těchto příkazů pro skládání dockeru se chová velmi podobně.

Ve skutečnosti může být zpočátku obzvláště obtížné okamžitě rozeznat rozdíl mezi docker-compose up a docker-compose start .

Není spuštění kontejneru pomocí Docker Compose stejné jako spuštění příkazu up? Ne přesně.

Dovolte mi, abych vám to vše podrobně vysvětlil.

Rozdíly mezi Docker Compose nahoru, nahoru -d, stop, start, dolů a dolů -v

Co tyto příkazy dělají:

Příkaz Docker Compose up nasazuje služby webových aplikací a vytváří nové nové kontejnery z obrazu dockeru spolu s nastavením sítí, svazků a každé konfigurace specifikované v souboru Docker Compose. Když zadáte -d , to znamená, že mu řeknete, aby jej spouštěl v odděleném režimu, takže běží na pozadí tím, že vám poskytne kontrolu nad terminálem (za chvíli bude probráno v několika příkladech níže).

Příkaz zastavení Docker Compose zastaví všechny služby spojené s konfigurací Docker Compose. NEODSTRAŇUJE žádné kontejnery ani související interní svazky nebo sítě.

Příkaz spuštění Docker Compose spustí všechny zastavené služby, jak byly specifikovány v zastavené konfiguraci založené na stejném souboru Docker Compose.

Příkaz Docker Compose down zastaví všechny služby spojené s konfigurací Docker Compose. Na rozdíl od stop také odstraní všechny kontejnery a interní sítě spojené se službami. Ale NE interně specifikované objemy. Chcete-li to provést také, musíte dodatečně zadat -v příznak za down příkaz.

Zní to podobně jako příkaz Docker run vs start, že?

Docker Run vs Start vs Create:Rozdíl je vysvětlen Pro začátečníka dockeru mohou být pojmy jako docker start, docker run a docker create matoucí. Tento článek vysvětluje rozdíl na příkladech. Příručka LinuxAbhishek Prakash

Dost teorie, pojďme se nyní podívat na praktické příklady.

Pochopení rozdílu pomocí praktického příkladu

Pokud chcete postupovat podle příkladů, ujistěte se, že již máte instalační program Docker a Docker Compose.

Řekněme, že používáte nastavení blogu Ghost založené na Docker Compose běžící na vašem linuxovém serveru.

Ve všech našich výukových programech s vlastním hostitelem většinou používám -d příznak, kdykoli nasadíme naše konfigurace na naše servery. Ale co když to nespecifikujete?

[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

Tak vidíš? Bez -d možnost, spustíte svou konfiguraci, ale stane se to v podrobném režimu, aniž byste se vrátili zpět na výzvu terminálu. Docela užitečné, ne? Když otevřete prohlížeč a vstoupíte na blog duchů, zjistíte, že je během několika okamžiků dostupný. Ale co když vypadnete z konzole pomocí Ctrl+Z? Proces zůstane spuštěný na pozadí a můžete to zkontrolovat pomocí příkazu docker ps :

[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

Ale co se stane s kontejnerem, pokud místo toho použijete Ctrl+C? Proces je okamžitě zabit.

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

Když použijete -d možnost, co dělá, je velmi podobné Ctrl+Z:Odpojí se od konzoly a pokračuje ve spuštění kontejneru na pozadí a také vytiskne nový název kontejneru (ghost_ghost_1 v tomto případě).

Nyní namísto použití docker-compose down , použijme docker-compose stop :

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

Pojďme nyní zkontrolovat naše běžící kontejnery. Očekává se, že by tam neměl být žádný:

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

Všimněte si, že jsem nepoužil docker ps . Místo toho jsem spustil docker-compose ps protože jsem vám chtěl ukázat jiný způsob, jak ověřit Exit 0 Stát. To znamená, že kontejner vystoupil/zastavil.

Pojďme to znovu zkontrolovat pomocí docker ps -a . -a flag také vyhledá zastavené kontejnery:

[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

Co je docker-compose start pak?

Docker Compose Start má smysl pouze v případě, že jste neodstranili žádný kontejner pomocí docker-compose down (což jsem ještě neudělal v tomto výukovém příkazovém řádku). V zásadě je zde rozdíl v tom, že spouští kontejnery, které byly zastaveny a nebyly odstraněny.

Nejprve tedy použijeme start místo up teď a uvidíte, co se stane:

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

Nyní se stane, že zastavený kontejner se znovu spustí:

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

Tady máš. Stav je nyní Up zpět z Exit 0 . Můžete také znovu zkontrolovat pomocí docker verze příkazu:

[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

Nyní spustíme stop příkaz znovu.

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

Nyní víte, v jakém stavu je kontejner. Můžete použít buď up nebo start příkaz k opětovnému spuštění. Všimněte si, že můžete spustit down v tomto stavu také bez opětovného spuštění služeb:

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

Nádoba je nyní odstraněna. Pokud by v souboru Docker Compose byly zadané interní sítě, byly by také odstraněny. Od net je externí, je přeskočeno z odstranění. Kdybyste zadali -v příznak navíc, byl by také odstraněn!

[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

Vždy buďte opatrní se svými daty!

Bonusový tip:Všimněte si, že protože používám externí svazek (vytvořený dříve pomocí „docker volume create volume-name“), použití „-v“ jej neodstraní. Je určen pouze pro svazky vytvořené na základě vašich specifikací Docker Compose. Ale naopak, „vyjmutí svazku dockeru“ by odstranilo externí svazek, i když je používán kontejnerem! Definitivní průvodce zálohováním a obnovením kontejnerů Docker Využijte cloud i místní systém k zálohování a obnově kontejnerů Docker. Příručka pro LinuxAvimanyu Bandyopadhyay

Také nemůžete použít start v tomto stádiu. Funguje pouze pro stop konfigurace ped:

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

V takovém případě musíte použít docker-compose up nebo docker-compose up -d ještě jednou.

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

Shrnutí

Doufám, že vám tento článek pomohl lépe porozumět up vs up -d vs start stejně jako stop vs down a down -v pro Docker Compose.

Rychlý průvodce používáním Docker ComposeDocker Compose je nativní nástroj Dockeru, díky kterému je správa aplikací s více kontejnery hračkou. Linux HandbookHunter Wittenborn

Tento obsáhlý vysvětlující průvodce by vám měl od nynějška výrazně usnadnit každodenní správu dockerů a mnohem méně zatěžovat. V závislosti na scénáři ke scénáři, zejména v produkčních systémech, se který konkrétní příkaz, který zvolíte, abyste situaci vyřešili, bude samozřejmě lišit v tom, jak jej implementujete.

Pokud máte nějaké myšlenky, dotazy nebo návrhy, které byste mohli sdílet, zanechte prosím níže komentář.


Docker
  1. Jak nainstalovat Docker a Docker Compose na Debian 11

  2. Docker Run vs Start vs Create:Rozdíl je vysvětlen

  3. Jak spustit a zastavit OSWatcher

  1. Vysvětlení rozdílů mezi textovými editory Vi a Vim

  2. Co je nového v Docker Compose v2?

  3. Jak nainstalovat a používat Docker Compose na CentOS

  1. Jak vypsat / spustit / zastavit kontejnery Docker

  2. Jak nainstalovat a používat Docker Compose na Ubuntu 18.04

  3. Jak nainstalovat a používat Docker Compose na CentOS 7