GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Docker Compose Up vs Start y Down vs Stop:diferencias explicadas

Si es nuevo en Docker Compose y está aprendiendo siguiendo varios tutoriales, es posible que encuentre términos como docker-compose up, docker-compose up -d, docker-compose stop, docker-compose down o incluso docker -componer parada.

Estos términos son suficientes para confundir a un principiante de docker porque muchos de estos comandos de docker-compose parecen comportarse de manera muy similar.

De hecho, puede ser especialmente difícil al principio distinguir de inmediato la diferencia entre docker-compose up y docker-compose start .

¿Iniciar un contenedor a través de Docker Compose no es lo mismo que ejecutar el comando arriba? No exactamente.

Déjame explicártelo todo en detalle.

Diferencias entre Docker Compose up, up -d, stop, start, down y down -v

Qué hacen estos comandos:

Comando Docker Redactar implementa servicios de aplicaciones web y crea nuevos contenedores nuevos a partir de la imagen de Docker junto con la configuración de redes, volúmenes y todas las configuraciones especificadas en el archivo Docker Compose. Cuando especifica -d , significa que le dices que lo ejecute en modo separado para que se ejecute en segundo plano al darte el control de la terminal (discutido en un momento a través de algunos ejemplos a continuación).

Comando de parada de Docker Compose detiene todos los servicios asociados con una configuración de Docker Compose. NO elimina ningún contenedor ni redes o volúmenes internos asociados.

Comando de inicio de Docker Compose iniciará cualquier servicio detenido como se especificó en una configuración detenida basada en el mismo archivo Docker Compose.

Comando de Docker Redactar hacia abajo detiene todos los servicios asociados con una configuración de Docker Compose. A diferencia de stop, también elimina los contenedores y las redes internas asociadas con los servicios. Pero NO volúmenes especificados internamente. Para hacerlo también, debe especificar adicionalmente -v bandera después de down comando.

Esto suena similar al comando Docker run vs start, ¿verdad?

Docker Run vs Start vs Create:diferencia explicada Para un principiante de docker, términos como docker start, docker run y docker create pueden ser confusos. Este artículo explica la diferencia con ejemplos. Manual de LinuxAbhishek Prakash

Suficiente teoría, veamos algunos ejemplos prácticos ahora.

Comprender la diferencia con un ejemplo práctico

Si desea seguir los ejemplos, asegúrese de que ya tiene el instalador de Docker y Docker Compose.

Supongamos que está utilizando una configuración de blog Ghost basada en Docker Compose que se ejecuta en su servidor Linux.

En todos nuestros tutoriales de alojamiento propio, tiendo a usar principalmente -d bandera cada vez que implementamos nuestras configuraciones en nuestros servidores. Pero, ¿y si no lo especificas?

[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

¿Como puedes ver? Sin el -d opción, inicia su configuración, pero sucede en un modo detallado sin volver al indicador del terminal. Un poco útil, ¿no? Cuando abra el navegador y acceda al blog fantasma, lo encontrará accesible en unos momentos. Pero, ¿y si sales de la consola con Ctrl+Z? Mantendrá el proceso ejecutándose en segundo plano, y puede verificarlo usando el 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

Pero, ¿qué sucede con el contenedor si usa Ctrl+C en su lugar? El proceso se mata de inmediato.

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

Cuando usas -d opción, lo que hace es muy similar a Ctrl+Z:se desconecta de la consola y continúa ejecutando el contenedor en segundo plano y también imprime el nuevo nombre del contenedor (ghost_ghost_1 en este caso).

Ahora, en lugar de usar docker-compose down , usemos docker-compose stop :

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

Ahora revisemos nuestros contenedores en ejecución. Como era de esperar, no debería haber ninguno:

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

Tenga en cuenta que no usé docker ps . En su lugar, ejecuté docker-compose ps porque quería mostrarles otra forma de verificar el Exit 0 Expresar. Esto significa que el contenedor salió/se detuvo.

Volvamos a verificar esto con docker ps -a . El -a flag también buscará contenedores detenidos:

[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é es docker-compose start? entonces?

Docker Compose Start solo tiene sentido cuando no ha eliminado ningún contenedor con docker-compose down (que aún no he hecho en la línea de comando de este tutorial). Básicamente, la diferencia aquí es que inicia contenedores que han sido detenidos y no eliminados.

Entonces, primero, usemos start en lugar de up ahora a ver qué pasa:

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

Lo que sucede ahora es que el contenedor detenido se inicia de nuevo:

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

Ahí tienes El Estado ahora está Up volver de Exit 0 . También puede volver a verificar con docker versión 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

Ahora ejecutemos stop comando de nuevo.

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

Ahora eres consciente de cuál es el estado del contenedor. Puede usar el up o start comando para que vuelva a funcionar. Tenga en cuenta que puede ejecutar down en este estado también sin volver a iniciar los servicios:

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

El contenedor se retira ahora. Si hubiera redes internas especificadas dentro del archivo Docker Compose, también se habrían eliminado. Desde net es externo, se salta de la eliminación. Si hubiera especificado el -v además, ¡también habría sido eliminada!

[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

¡Manténgase siempre doblemente cauteloso con sus datos!

Sugerencia adicional:tenga en cuenta que, dado que estoy usando un volumen externo (creado previamente a través de "docker volume create volume-name"), usar "-v" no lo elimina. Solo está destinado a volúmenes creados a partir de sus especificaciones de Docker Compose. Pero, por el contrario, la "poda de volumen de Docker" eliminaría un volumen externo incluso si lo está utilizando un contenedor. Manual de LinuxAvimanyu Bandyopadhyay

Además, no puede usar start En este punto. Funciona solo para stop configuraciones de ped:

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

En tal caso, debe usar docker-compose up o docker-compose up -d una vez más.

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

Resumen

Espero que este artículo te haya dado una mejor comprensión de up vs up -d vs start así como stop vs down y down -v para Docker Compose.

Una guía rápida para usar Docker ComposeDocker Compose es una herramienta nativa de Docker que facilita la administración de aplicaciones de varios contenedores. Manual de LinuxHunter Wittenborn

Esta amplia guía explicativa debería hacer que la administración diaria de Docker sea mucho más fácil y mucho menos abrumadora a partir de ahora. Dependiendo de un escenario a otro, especialmente en los sistemas de producción, el comando particular que elija para resolver una situación diferirá, por supuesto, en la forma en que lo implemente.

Si tiene alguna idea, consulta o sugerencia para compartir, deje un comentario a continuación.


Docker
  1. Cómo instalar Docker y Docker Compose en Debian 11

  2. Explicación de las diferencias entre los editores de texto Vi y Vim

  3. ¿Qué hay de nuevo en Docker Compose v2?

  4. Cómo instalar y usar Docker Compose en CentOS

  5. Cómo iniciar y detener OSWatcher

¿Qué es Docker Compose y cómo se usa?

Cómo instalar Docker y Docker Compose en Linux

Cómo detener los contenedores de Docker

.NET Core y Docker

.NET y Docker

Cómo listar/iniciar/detener/eliminar contenedores docker