GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Docker Compose Up vs Start and Down vs Stop :différences expliquées

Si vous débutez avec Docker Compose et que vous l'apprenez en suivant divers didacticiels, vous rencontrerez peut-être des termes tels que docker-compose up, docker-compose up -d, docker-compose stop, docker-compose down ou même docker -composer stop.

Ces termes suffisent à confondre un débutant en docker car bon nombre de ces commandes docker-compose semblent se comporter de manière très similaire.

En fait, il peut être particulièrement difficile au début de faire tout de suite la différence entre docker-compose up et docker-compose start .

Le démarrage d'un conteneur via Docker Compose n'est-il pas identique à l'exécution de la commande up ? Pas exactement.

Laissez-moi vous expliquer tout cela en détail.

Différences entre Docker Compose up, up -d, stop, start, down et down -v

Que font ces commandes :

Commande Docker Composer déploie des services d'application Web et crée de nouveaux conteneurs à partir de l'image Docker, ainsi que la configuration de réseaux, de volumes et de chaque configuration spécifiée dans le fichier Docker Compose. Lorsque vous spécifiez -d , cela signifie que vous lui dites de l'exécuter en mode détaché afin qu'il s'exécute en arrière-plan en vous donnant le contrôle du terminal (discuté dans un instant via quelques exemples ci-dessous).

Commande d'arrêt Docker Compose arrête tous les services associés à une configuration Docker Compose. Il ne supprime PAS les conteneurs ni les volumes ou réseaux internes associés.

Commande de démarrage de Docker Compose démarrera tous les services arrêtés comme spécifié sur une configuration arrêtée basée sur le même fichier Docker Compose.

Commande Docker Composer vers le bas arrête tous les services associés à une configuration Docker Compose. Contrairement à stop, il supprime également tous les conteneurs et réseaux internes associés aux services. Mais PAS les volumes spécifiés en interne. Pour ce faire également, vous devez également spécifier le -v drapeau après le down commande.

Cela ressemble à la commande Docker run vs start, n'est-ce pas ?

Docker Run vs Start vs Create :Différence expliquée Cet article explique la différence avec des exemples. Manuel LinuxAbhishek Prakash

Assez de théorie, regardons maintenant quelques exemples pratiques.

Comprendre la différence avec un exemple pratique

Si vous souhaitez suivre les exemples, assurez-vous que vous disposez déjà du programme d'installation Docker et Docker Compose.

Supposons que vous utilisez une configuration de blog Ghost basée sur Docker Compose et exécutée sur votre serveur Linux.

Dans tous nos tutoriels auto-hébergés, j'ai surtout tendance à utiliser le -d flag chaque fois que nous déployons nos configurations sur nos serveurs. Mais que se passe-t-il si vous ne le spécifiez pas ?

[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

Donc tu vois? Sans le -d option, vous lancez votre configuration, mais cela se produit en mode verbeux sans revenir à l'invite du terminal. Un peu utile, n'est-ce pas ? Lorsque vous ouvrez le navigateur et accédez au blog fantôme, vous le trouverez accessible en quelques instants. Mais que se passe-t-il si vous quittez la console avec Ctrl+Z ? Il maintiendra le processus en cours d'exécution en arrière-plan, et vous pouvez le vérifier à l'aide de la commande 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

Mais qu'advient-il du conteneur si vous avez utilisé Ctrl+C à la place ? Le processus est immédiatement tué.

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

Lorsque vous utilisez le -d , ce qu'il fait est très similaire à Ctrl+Z :il se détache de la console et continue à exécuter le conteneur en arrière-plan et imprime également le nouveau nom du conteneur (ghost_ghost_1 dans ce cas).

Maintenant, au lieu d'utiliser docker-compose down , utilisons docker-compose stop :

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

Vérifions maintenant nos conteneurs en cours d'exécution. Comme prévu, il ne devrait pas y en avoir :

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

Notez que je n'ai pas utilisé docker ps . Au lieu de cela, j'ai exécuté docker-compose ps car je voulais vous montrer une autre façon de vérifier la Exit 0 Etat. Cela signifie que le conteneur est sorti/arrêté.

Vérifions cela avec docker ps -a . Le -a flag recherchera également les conteneurs arrêtés :

[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

Qu'est-ce que docker-compose start alors ?

Docker Compose Start n'a de sens que lorsque vous n'avez supprimé aucun conteneur avec docker-compose down (ce que je n'ai pas encore fait dans ce tutoriel en ligne de commande). Donc, fondamentalement, la différence ici est qu'il démarre les conteneurs qui ont été arrêtés et non supprimés.

Donc, d'abord, utilisons start au lieu de up maintenant et voyez ce qui se passe :

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

Ce qui se passe maintenant, c'est que le conteneur arrêté est redémarré :

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

Voilà. L'état est maintenant Up retour de Exit 0 . Vous pouvez également revérifier avec le docker version de la commande :

[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

Exécutons maintenant le stop commande à nouveau.

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

Vous savez maintenant quel est l'état du conteneur. Vous pouvez utiliser soit le up ou start commande pour le remettre en marche. Notez que vous pouvez exécuter le down dans cet état également sans redémarrer les services :

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

Le conteneur est maintenant supprimé. S'il y avait des réseaux internes spécifiés dans le fichier Docker Compose, ils auraient également été supprimés. Depuis net est externe, il est ignoré lors de la suppression. Aviez-vous spécifié le -v drapeau en plus, il aurait également été supprimé !

[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

Rester toujours prudent avec vos données !

Astuce bonus :notez que puisque j'utilise un volume externe (créé précédemment via "docker volume create volume-name"), l'utilisation de "-v" ne le supprime pas. Il est uniquement destiné aux volumes créés à partir de vos spécifications Docker Compose. Mais au contraire, "docker volume prune" supprimerait un volume externe même s'il est utilisé par un conteneur ! Guide définitif sur la sauvegarde et la restauration des conteneurs Docker Exploitez à la fois le cloud et votre système local pour sauvegarder et restaurer vos conteneurs Docker. Manuel LinuxAvimanyu Bandyopadhyay

De plus, vous ne pouvez pas utiliser start à ce stade. Cela ne fonctionne que pour stop configurations pédiatriques :

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

Dans ce cas, vous devez utiliser docker-compose up ou docker-compose up -d encore une fois.

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

Résumé

J'espère que cet article vous a permis de mieux comprendre up vs up -d vs start ainsi que stop vs down et down -v pour Docker Compose.

Guide rapide d'utilisation de Docker ComposeDocker Compose est un outil natif Docker qui facilite la gestion des applications multi-conteneurs. Linux HandbookHunter Wittenborn

Ce guide explicatif complet devrait rendre votre gestion quotidienne des dockers beaucoup plus facile et beaucoup moins écrasante à partir de maintenant. Selon les scénarios, en particulier dans les systèmes de production, la commande particulière que vous choisissez pour régler une situation diffère, bien sûr, dans la manière dont vous l'implémentez.

Si vous avez des idées, des questions ou des suggestions à partager, veuillez laisser un commentaire ci-dessous.


Docker
  1. Comment installer Docker et Docker Compose sur Debian 11

  2. Explication des différences entre les éditeurs de texte Vi et Vim

  3. Docker Run vs Start vs Create :Différence expliquée

  4. Comment installer et utiliser Docker Compose sur CentOS

  5. Comment démarrer et arrêter OSWatcher

Qu'est-ce que Docker Compose et comment l'utiliser ?

Comment installer Docker et Docker Compose sous Linux

Comment arrêter les conteneurs Docker

.NET Core et Docker

.NET et Docker

Comment répertorier/démarrer/arrêter/supprimer les conteneurs docker