Cómo usar el comando docker compose start para iniciar servicios

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar el comando docker-compose start para gestionar tus aplicaciones Docker con múltiples contenedores. Comenzaremos creando un archivo docker-compose.yml simple para definir nuestros servicios.

Después de crear el archivo compose, practicarás el inicio de todos los servicios definidos en él usando un único comando. Finalmente, aprenderás cómo iniciar selectivamente un servicio específico de tu configuración compose. Esta experiencia práctica te proporcionará las habilidades fundamentales para gestionar eficazmente tus proyectos de Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555092{{"Cómo usar el comando docker compose start para iniciar servicios"}} docker/ps -.-> lab-555092{{"Cómo usar el comando docker compose start para iniciar servicios"}} docker/start -.-> lab-555092{{"Cómo usar el comando docker compose start para iniciar servicios"}} docker/stop -.-> lab-555092{{"Cómo usar el comando docker compose start para iniciar servicios"}} docker/create -.-> lab-555092{{"Cómo usar el comando docker compose start para iniciar servicios"}} docker/pull -.-> lab-555092{{"Cómo usar el comando docker compose start para iniciar servicios"}} end

Crear un archivo docker-compose.yml simple

En este paso, crearemos un archivo docker-compose.yml simple. Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker con múltiples contenedores. Con Compose, utilizas un archivo YAML para configurar los servicios de tu aplicación. Luego, con un solo comando, creas e inicias todos los servicios desde tu configuración.

Antes de crear el archivo docker-compose.yml, necesitamos instalar Docker Compose. Como no viene preinstalado en el entorno de LabEx, lo instalaremos usando pip.

Primero, actualizaremos la lista de paquetes e instalaremos pip si no está ya instalado.

sudo apt update
sudo apt install -y python3-pip

Ahora, podemos instalar Docker Compose usando pip.

pip install docker-compose

Una vez completada la instalación, puedes verificar la instalación comprobando la versión de Docker Compose.

docker-compose --version

Deberías ver una salida similar a docker-compose version 1.29.2, build 5becea4c.

Ahora que Docker Compose está instalado, creemos un directorio para nuestro proyecto y accedamos a él. Crearemos el archivo docker-compose.yml dentro de este directorio.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

A continuación, crearemos el archivo docker-compose.yml usando el editor nano.

nano docker-compose.yml

Dentro del editor nano, pega el siguiente contenido. Este archivo docker-compose.yml define un único servicio llamado web que utiliza la imagen nginx y mapea el puerto 80 del contenedor al puerto 8080 de la máquina host.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Analicemos este archivo:

  • version: '3.8' especifica la versión del formato del archivo Compose.
  • services: define los diferentes servicios que componen tu aplicación.
  • web: es el nombre de nuestro servicio. Puedes elegir cualquier nombre que prefieras.
  • image: nginx:latest especifica la imagen Docker a usar para este servicio. En este caso, estamos usando la última versión de la imagen oficial de Nginx. Descargaremos esta imagen más adelante cuando iniciemos el servicio.
  • ports: mapea puertos entre el host y el contenedor.
  • - "8080:80" mapea el puerto 80 dentro del contenedor (donde Nginx se ejecuta por defecto) al puerto 8080 en tu máquina host. Esto significa que puedes acceder al servidor web Nginx visitando http://localhost:8080 en tu navegador web (o usando curl desde la terminal).

Guarda el archivo presionando Ctrl + X, luego Y, y finalmente Enter.

Puedes verificar el contenido del archivo usando el comando cat.

cat docker-compose.yml

Deberías ver el contenido YAML que acabas de pegar.

Iniciar todos los servicios definidos en el archivo compose

En este paso, iniciaremos todos los servicios definidos en nuestro archivo docker-compose.yml. Para ello utilizaremos el comando docker-compose up.

Primero, asegúrate de estar en el directorio donde creaste el archivo docker-compose.yml.

cd ~/project/my-compose-app

Ahora, ejecuta el comando docker-compose up. La bandera -d ejecuta los contenedores en modo detached (desacoplado), lo que significa que se ejecutarán en segundo plano sin bloquear tu terminal.

docker-compose up -d

Cuando ejecutes este comando por primera vez, Docker Compose realizará lo siguiente:

  1. Buscará el archivo docker-compose.yml en el directorio actual.
  2. Leerá las definiciones de los servicios.
  3. Para cada servicio, verificará si la imagen especificada existe localmente. Si no existe, la descargará de Docker Hub. En nuestro caso, descargará la imagen nginx:latest.
  4. Creará e iniciará los contenedores para cada servicio.

Verás una salida que indica que la imagen está siendo descargada y el contenedor está siendo creado e iniciado.

Pulling web (nginx:latest)...
latest: Pulling from library/nginx
... (salida mostrando las capas de imagen siendo descargadas)
Status: Downloaded newer image for nginx:latest
Creating my-compose-app_web_1 ... done

Una vez que el comando finalice, puedes verificar que el contenedor está en ejecución usando el comando docker ps.

docker ps

Deberías ver una entrada para el contenedor web, con la imagen nginx:latest y el estado Up. El nombre del contenedor será similar a my-compose-app_web_1.

Para verificar adicionalmente que el servidor Nginx está funcionando y es accesible, puedes usar el comando curl para acceder al servidor web en el puerto 8080 de la máquina host.

curl http://localhost:8080

Deberías ver el HTML de la página de bienvenida predeterminada de Nginx en tu terminal. Esto confirma que el contenedor está en ejecución y que el mapeo de puertos funciona correctamente.

Iniciar un servicio específico definido en el archivo compose

En el paso anterior, iniciamos todos los servicios definidos en nuestro archivo docker-compose.yml usando docker-compose up. En este paso, aprenderemos cómo iniciar un servicio específico cuando tienes múltiples servicios definidos en tu archivo Compose.

Aunque nuestro archivo docker-compose.yml actual solo tiene un servicio (web), el comando para iniciar un servicio específico es útil cuando tienes una aplicación más compleja con múltiples servicios (como un servidor web, una base de datos y una API backend).

Primero, detengamos el servicio que está actualmente en ejecución. Podemos hacer esto usando el comando docker-compose down. Este comando detiene y elimina los contenedores, redes y volúmenes creados por up.

Asegúrate de estar en el directorio ~/project/my-compose-app.

cd ~/project/my-compose-app

Ahora, ejecuta el comando docker-compose down.

docker-compose down

Verás una salida indicando que el contenedor y la red están siendo detenidos y eliminados.

Stopping my-compose-app_web_1 ... done
Removing my-compose-app_web_1 ... done
Removing network my-compose-app_default

Puedes verificar que el contenedor está detenido ejecutando docker ps. No debería haber contenedores en ejecución de nuestro archivo compose.

docker ps

Ahora, demostremos cómo iniciar un servicio específico. El comando es docker-compose up <nombre_del_servicio>. En nuestro caso, el nombre del servicio es web. Usaremos nuevamente la bandera -d para ejecutarlo en modo detached (desacoplado).

docker-compose up -d web

Este comando solo iniciará el servicio web como está definido en el archivo docker-compose.yml. Como la imagen ya fue descargada en el paso anterior, creará e iniciará el contenedor directamente.

Verás una salida similar a esta:

Creating my-compose-app_web_1 ... done

Nuevamente, puedes verificar que el contenedor web está en ejecución usando docker ps.

docker ps

Deberías ver el contenedor my-compose-app_web_1 listado con un estado de Up.

Esto demuestra cómo iniciar selectivamente servicios definidos en tu archivo docker-compose.yml, lo cual es útil para administrar aplicaciones más complejas con múltiples servicios.

Resumen

En este laboratorio, aprendimos cómo usar el comando docker-compose start. Comenzamos creando un archivo simple docker-compose.yml. Esto incluyó instalar Docker Compose usando pip, verificar la instalación, crear un directorio de proyecto y luego crear el archivo docker-compose.yml en sí. El archivo creado definió un único servicio llamado web usando la imagen nginx y mapeando puertos.

Los pasos posteriores, que no se detallaron completamente en el contenido proporcionado, involucrarían usar el comando docker-compose start para iniciar todos los servicios definidos en el archivo compose o para iniciar un servicio específico. Esto demuestra la funcionalidad principal del comando docker-compose start para gestionar el ciclo de vida de aplicaciones multicontenedor definidas en un archivo Compose.