Saltar al contenido principal

Día 10 - Gestión de contenedores Docker

🐳 Aprende a controlar y administrar contenedores de forma efectiva

En este día vas a dominar el ciclo de vida de los contenedores, ejecutar comandos dentro de ellos, copiar archivos, configurar variables de entorno y obtener información avanzada. Todo esto es esencial para tener control total de tus entornos en desarrollo, testing y producción.


🚀 Ejecutando un contenedor en segundo plano

Podés ejecutar un contenedor que corra en segundo plano con -d:

docker run -d --name contenedor2 ubuntu bash -c "while true; do echo hello world; sleep 1; done"

Verificar que está corriendo:

docker ps

Ver qué está haciendo:

docker logs contenedor2

Detener y eliminar el contenedor:

docker stop contenedor2
docker rm contenedor2

Si querés borrarlo sin detenerlo primero:

docker rm -f contenedor2

🔁 Ciclo de vida de contenedores

Ejemplo con un contenedor que imprime la hora cada segundo:

docker run -d --name hora-container ubuntu bash -c 'while true; do echo $(date +"%T"); sleep 1; done'
docker logs -f hora-container

En otra terminal, podés probar:

ComandoAcción
docker stop hora-containerDetiene
docker start hora-containerInicia
docker restart hora-containerReinicia
docker pause hora-containerPausa
docker unpause hora-containerReanuda

💬 Ejecutar comandos dentro del contenedor

docker exec hora-container date

Crear un nuevo contenedor que guarde la hora en un archivo:

docker run -d --name hora-container2 ubuntu bash -c 'while true; do date +"%T" >> hora.txt; sleep 1; done'
docker exec hora-container2 ls
docker exec hora-container2 cat hora.txt

📂 Copiar archivos entre host y contenedor

Desde host hacia contenedor:

echo "Curso Docker" > docker.txt
docker cp docker.txt hora-container2:/tmp
docker exec hora-container2 cat /tmp/docker.txt

Desde contenedor hacia el host:

docker cp hora-container2:hora.txt .

🔎 Procesos y detalles del contenedor

Ver procesos en ejecución:

docker top hora-container2

Inspeccionar contenedor (JSON detallado):

docker inspect hora-container2

Filtros útiles con --format:

  • ID del contenedor:

    docker inspect --format='{{.Id}}' hora-container2
  • Imagen usada:

    docker inspect --format='{{.Config.Image}}' hora-container2
  • Variables de entorno:

    docker container inspect -f '{{range .Config.Env}}{{println .}}{{end}}' hora-container2
  • Comando ejecutado:

    docker inspect --format='{{range .Config.Cmd}}{{println .}}{{end}}' hora-container2
  • IP asignada:

    docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' hora-container2

🌍 Configuración de contenedores con variables de entorno

Para configurar valores dentro del contenedor, usamos el flag -e:

docker run -it --name prueba -e USUARIO=prueba ubuntu bash

Comprobamos el valor dentro del contenedor:

echo $USUARIO

🛢️ Configuración de un contenedor con la imagen mariadb

Algunas imágenes, como mariadb, requieren variables para inicializarse. Según su documentación, una variable obligatoria es:

docker run -d --name some-mariadb -e MARIADB_ROOT_PASSWORD=my-secret-pw mariadb

Verificamos la variable dentro del contenedor:

docker exec -it some-mariadb env

Accedemos a MariaDB desde el contenedor:

docker exec -it some-mariadb mariadb -u root -p

🌐 Accediendo a MariaDB desde el exterior

  1. Eliminamos el contenedor anterior:
docker rm -f some-mariadb
  1. Creamos uno nuevo exponiendo el puerto:
docker run -d -p 3306:3306 --name some-mariadb -e MARIADB_ROOT_PASSWORD=my-secret-pw mariadb
  1. Accedemos desde el host (requiere tener instalado el cliente de mariadb):
mysql -u root -p -h 127.0.0.1

🧠 Reto del Día

  1. Crea un contenedor personalizado que cada 5 segundos escriba un mensaje diferente (puede ser la hora, un contador o un texto aleatorio) en un archivo llamado mensajes.txt.
  2. Copia el archivo mensajes.txt desde el contenedor al host y verifica su contenido.
  3. Utiliza docker inspect para obtener la IP del contenedor y el nombre de la imagen utilizada.
  4. Comprueba los procesos activos dentro del contenedor usando docker top y verifica que el proceso principal sigue ejecutándose.
  5. Detén y elimina el contenedor de forma forzada usando un solo comando.
  6. (Opcional) Automatiza los pasos anteriores con un pequeño script bash.

🔥 Reto Extra: Variables de Entorno

  1. Ejecuta un contenedor de Alpine pasándole dos variables de entorno: APP_ENV=development y APP_VERSION=1.0.0. Haz que el contenedor imprima ambas variables.
docker run --rm -e APP_ENV=development -e APP_VERSION=1.0.0 alpine sh -c 'echo Entorno: $APP_ENV, Versión: $APP_VERSION'
  1. Crea un contenedor de MariaDB que utilice variables de entorno para definir el usuario, contraseña y base de datos inicial. Verifica que las variables estén correctamente configuradas dentro del contenedor.

✨ Tip de Roxs

¡Dominar Docker no es solo saber correr un contenedor, sino administrarlo como una pro! Hoy diste un gran paso para controlar tu entorno DevOps desde la línea de comandos. 🚀

Usá el hashtag #DevOpsConRoxs o compartilo en el canal de la comunidad. 🎯