GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Docker Compose Up vs Start e Down vs Stop:Spiegazione delle differenze

Se non conosci Docker Compose e lo impari seguendo vari tutorial, potresti imbatterti in termini come docker-compose up, docker-compose up -d, docker-compose stop, docker-compose down o persino docker -componi stop.

Questi termini sono sufficienti per confondere un principiante della finestra mobile perché molti di questi comandi di composizione della finestra mobile sembrano comportarsi in modo molto simile.

In effetti, all'inizio può essere particolarmente difficile distinguere subito la differenza tra docker-compose up e docker-compose start .

Avviare un container tramite Docker Compose non equivale a eseguire il comando up? Non esattamente.

Lascia che ti spieghi tutto in dettaglio.

Differenze tra Docker Componi su, su -d, stop, inizio, giù e giù -v

A cosa servono questi comandi:

Comando Docker Componi distribuisce servizi di app Web e crea nuovi contenitori dall'immagine Docker insieme alla configurazione di reti, volumi e ogni configurazione specificata nel file Docker Compose. Quando specifichi -d , significa che gli dici di eseguirlo in modalità distaccata in modo che venga eseguito in background dandoti il ​​controllo del terminale (discusso tra poco tramite alcuni esempi di seguito).

Comando di arresto per la composizione di Docker interrompe tutti i servizi associati a una configurazione Docker Compose. NON rimuove alcun contenitore o volume interno o rete associati.

Comando di avvio di Docker Componi avvierà tutti i servizi interrotti specificati su una configurazione interrotta basata sullo stesso file Docker Compose.

Comando Docker Componi interrompe tutti i servizi associati a una configurazione Docker Compose. A differenza di stop, rimuove anche eventuali contenitori e reti interne associate ai servizi. Ma NON volumi specificati internamente. Per fare anche questo, devi specificare in aggiunta il -v flag dopo il down comando.

Sembra simile al comando Docker run vs start, giusto?

Docker Run vs Start vs Create:Differenza spiegata Per un principiante di Docker, termini come Docker Start, Docker Run e Docker Create potrebbero creare confusione. Questo articolo spiega la differenza con esempi. Manuale LinuxAbhishek Prakash

Basta teoria, diamo un'occhiata ad alcuni esempi pratici ora.

Capire la differenza con un esempio pratico

Se vuoi seguire gli esempi, assicurati di avere già il programma di installazione Docker e Docker Compose.

Diciamo che stai usando una configurazione del blog Ghost basata su Docker Compose in esecuzione sul tuo server Linux.

In tutti i nostri tutorial sull'hosting automatico, tendo principalmente a usare -d flag ogni volta che distribuiamo le nostre configurazioni sui nostri server. Ma cosa succede se non lo specifichi?

[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

Come vedi? Senza il -d opzione, avvii la tua configurazione, ma si verifica in una modalità dettagliata senza tornare al prompt del terminale. Un po' d'aiuto, vero? Quando apri il browser e accedi al blog fantasma, lo troverai accessibile in pochi istanti. Ma cosa succede se esci dalla console con Ctrl+Z? Manterrà il processo in esecuzione in background e potrai verificarlo utilizzando il comando 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

Ma cosa succede al contenitore se invece hai usato Ctrl+C? Il processo viene immediatamente interrotto.

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

Quando usi -d opzione, quello che fa è molto simile a Ctrl+Z:si stacca dalla console e continua a eseguire il contenitore in background e stampa anche il nuovo nome del contenitore (ghost_ghost_1 in questo caso).

Ora, invece di usare docker-compose down , usiamo docker-compose stop :

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

Ora controlliamo i nostri contenitori in esecuzione. Previsto, non dovrebbe essercene nessuno:

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

Nota che non ho usato docker ps . Invece, ho eseguito docker-compose ps perché volevo mostrarti un altro modo per verificare l'Exit 0 stato. Ciò significa che il contenitore è uscito/arrestato.

Ricontrolliamo questo con docker ps -a . Il -a flag cercherà anche i contenitori fermi:

[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

Che cos'è docker-compose start allora?

Docker Compose Start ha senso solo quando non hai rimosso alcun contenitore con docker-compose down (che non ho ancora fatto in questa riga di comando del tutorial). Quindi, in pratica, la differenza qui è che avvia i contenitori che sono stati fermati e non rimossi.

Quindi, per prima cosa, usiamo start invece di up ora e guarda cosa succede:

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

Quello che succede ora è che il contenitore interrotto viene riavviato:

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

Ecco qua. Lo stato ora è Up torna da Exit 0 . Puoi anche ricontrollare con la docker versione del comando:

[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

Ora eseguiamo stop comando di nuovo.

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

Ora sai qual è lo stato del contenitore. Puoi usare sia il up o start comando per farlo funzionare di nuovo. Nota che puoi eseguire il down anche in questo stato senza riavviare i servizi:

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

Il contenitore è stato rimosso ora. Se c'erano reti interne specificate all'interno del file Docker Compose, sarebbero state rimosse anche loro. Da net è esterno, viene ignorato dalla rimozione. Avevi specificato il -v flag in aggiunta, sarebbe stato anche rimosso!

[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

Mantieni sempre la doppia cautela con i tuoi dati!

Suggerimento bonus:tieni presente che poiché sto utilizzando un volume esterno (creato in precedenza tramite "volume docker crea nome volume"), l'utilizzo di "-v" non lo rimuove. È pensato solo per i volumi creati dalle specifiche Docker Compose. Ma al contrario, "sfoltimento volume Docker" rimuove un volume esterno anche se viene utilizzato da un container! Guida definitiva al backup e al ripristino dei container Docker Sfrutta sia il cloud che il sistema locale per eseguire il backup e il ripristino dei container Docker. Manuale LinuxAvimanyu Bandyopadhyay

Inoltre, non puoi usare start in questa fase. Funziona solo per stop configurazioni ped:

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

In tal caso, devi utilizzare docker-compose up o docker-compose up -d ancora una volta.

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

Riepilogo

Spero che questo articolo ti abbia dato una migliore comprensione di up vs up -d vs start così come stop vs down e down -v per Docker Componi.

Una guida rapida all'uso di Docker ComposeDocker Compose è uno strumento nativo di Docker che semplifica la gestione delle applicazioni multi-container. Linux HandbookHunter Wittenborn

Questa ampia guida esplicativa dovrebbe rendere la gestione quotidiana del Docker molto più semplice e molto meno opprimente d'ora in poi. A seconda dello scenario in scenario, specialmente nei sistemi di produzione, quale comando particolare scegli per risolvere una situazione, ovviamente, differirà nel modo in cui lo implementerai.

Se hai pensieri, domande o suggerimenti da condividere, lascia un commento qui sotto.


Docker
  1. Come installare Docker e Docker Compose su Debian 11

  2. Cosa c'è di nuovo in Docker Compose v2?

  3. Docker Run vs Start vs Create:spiegazione della differenza

  4. Come installare e utilizzare Docker Compose su CentOS

  5. Come avviare e arrestare OSWatcher

Che cos'è Docker Compose e come lo usi?

Come installare Docker e Docker Compose su Linux

Come fermare i container Docker

.NET Core e Docker

.NET e Docker

Come elencare/avviare/arrestare/eliminare i contenitori docker