Guía para Principiantes: Ejecutar y Cerrar Contenedores Docker Rápidamente

DockerBeginner
Practicar Ahora

Introducción

Este tutorial te guiará a través del proceso de ejecutar y cerrar rápidamente contenedores Docker, proporcionando una introducción completa al mundo de Docker para principiantes. Aprenderás a instalar y configurar Docker en tu sistema, explorarás los fundamentos de la ejecución de contenedores Docker y descubrirás aplicaciones prácticas y mejores prácticas para gestionar tus contenedores de forma eficaz.

Entendiendo Docker: Qué es y Por Qué

Docker es una potente plataforma de código abierto que permite a los desarrolladores y profesionales de TI construir, desplegar y ejecutar aplicaciones en un entorno consistente y confiable. Utiliza la tecnología de contenedorización para empaquetar una aplicación y todas sus dependencias en un solo contenedor portátil, garantizando que la aplicación se ejecutará de la misma manera independientemente de la infraestructura subyacente.

¿Qué es Docker?

Docker es una plataforma de software que te permite construir, desplegar y ejecutar aplicaciones en contenedores. Un contenedor es una unidad de software estandarizada que empaqueta el código y todas sus dependencias, de modo que la aplicación se ejecute de forma rápida y confiable de un entorno informático a otro. Los contenedores son ligeros, portátiles y autocontenidos, lo que los convierte en una solución ideal para el desarrollo y despliegue de software moderno.

¿Por qué Usar Docker?

Existen varios beneficios clave al usar Docker:

  1. Consistencia: Docker garantiza que tu aplicación se ejecutará de la misma manera, independientemente de la infraestructura subyacente. Esto elimina el problema de "funciona en mi máquina", donde una aplicación funciona bien en la máquina de un desarrollador pero falla en producción.

  2. Escalabilidad: Docker facilita la escalabilidad de tu aplicación ejecutando múltiples instancias de un contenedor, ya sea manualmente o automáticamente.

  3. Eficiencia: Los contenedores son ligeros y utilizan menos recursos que las máquinas virtuales, lo que te permite ejecutar más aplicaciones en el mismo hardware.

  4. Portabilidad: Los contenedores Docker se pueden ejecutar en cualquier sistema que tenga Docker instalado, lo que facilita el traslado de tus aplicaciones entre diferentes entornos, como desarrollo, pruebas y producción.

  5. Aislamiento: Cada contenedor Docker está aislado de los demás, proporcionando un entorno seguro y confiable para ejecutar tus aplicaciones.

Arquitectura de Docker

Docker utiliza una arquitectura cliente-servidor, donde el cliente Docker se comunica con el demonio Docker, que es responsable de construir, ejecutar y gestionar los contenedores Docker. El demonio Docker se ejecuta en la máquina host, y el cliente puede ejecutarse en la misma máquina o en una máquina remota.

graph LR
    A[Cliente Docker] -- Se comunica con --> B[Demonio Docker]
    B -- Gestiona --> C[Contenedores Docker]
    B -- Gestiona --> D[Imágenes Docker]

En la siguiente sección, cubriremos cómo instalar y configurar Docker en tu sistema.

Instalación y Configuración de Docker en tu Sistema

Instalación de Docker en Ubuntu 22.04

Para instalar Docker en tu sistema Ubuntu 22.04, sigue estos pasos:

  1. Actualiza el índice de paquetes e instala las dependencias necesarias:
sudo apt-get update
sudo apt-get install -y \
  ca-certificates \
  curl \
  gnupg \
  lsb-release
  1. Agrega la clave GPG oficial de Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Configura el repositorio de Docker:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Instala el motor Docker, containerd y Docker Compose:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Verifica la instalación ejecutando la imagen hello-world:
sudo docker run hello-world

Configuración de Docker

Después de instalar Docker, puedes configurarlo según tus necesidades. Aquí hay algunas opciones de configuración comunes:

  1. Gestionar Docker como usuario no root: De forma predeterminada, los comandos de Docker requieren privilegios de root. Para ejecutar comandos de Docker sin sudo, agrega tu usuario al grupo docker:
sudo usermod -aG docker $USER
  1. Establecer opciones predeterminadas del demonio Docker: Puedes personalizar el comportamiento del demonio Docker editando el archivo /etc/docker/daemon.json. Por ejemplo, para cambiar el controlador de registro predeterminado:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}
  1. Configurar Docker Compose: Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multicontenedor. Puedes configurar el comportamiento predeterminado de Docker Compose editando el archivo ~/.docker/config.json.

Ahora que tienes Docker instalado y configurado, pasemos a ejecutar contenedores Docker.

Ejecutando Contenedores Docker: Lo Básico

Entendiendo las Imágenes Docker

Una imagen Docker es una plantilla de solo lectura que contiene las instrucciones para crear un contenedor Docker. Las imágenes se utilizan para empaquetar una aplicación y todas sus dependencias, garantizando que la aplicación se ejecutará de la misma manera independientemente de la infraestructura subyacente.

Puedes crear tus propias imágenes Docker o utilizar imágenes preconstruidas de Docker Hub, un repositorio público de imágenes Docker.

Ejecutando un Contenedor Docker

Para ejecutar un contenedor Docker, utilizas el comando docker run. Aquí hay un ejemplo de cómo ejecutar el servidor web nginx en un contenedor Docker:

docker run -d -p 80:80 --name my-nginx nginx

Desglosemos el comando:

  • docker run: Ejecuta un nuevo contenedor Docker.
  • -d: Ejecuta el contenedor en modo desacoplado, lo que significa que se ejecuta en segundo plano.
  • -p 80:80: Mapea el puerto 80 de la máquina host al puerto 80 dentro del contenedor.
  • --name my-nginx: Asigna el nombre "my-nginx" al contenedor.
  • nginx: El nombre de la imagen Docker a utilizar.

Listado de Contenedores en Ejecución

Para ver una lista de los contenedores Docker en ejecución, utiliza el comando docker ps:

docker ps

Esto mostrará una tabla con información sobre los contenedores en ejecución, incluyendo el ID del contenedor, la imagen utilizada, el comando que se está ejecutando, la hora de creación, el estado y los puertos.

Inspeccionando un Contenedor en Ejecución

Para obtener información más detallada sobre un contenedor en ejecución, utiliza el comando docker inspect:

docker inspect my-nginx

Esto mostrará un objeto JSON con información detallada sobre el contenedor, incluyendo su configuración, ajustes de red y uso de recursos.

En la siguiente sección, cubriremos cómo interactuar con los contenedores Docker.

Interactuando con Contenedores Docker

Accediendo al Shell del Contenedor

Para acceder al shell de un contenedor Docker en ejecución, utiliza el comando docker exec:

docker exec -it my-nginx bash

Esto abrirá una sesión de terminal interactiva dentro del contenedor my-nginx, permitiéndote ejecutar comandos dentro del contenedor.

Copiando Archivos a y desde Contenedores

Puedes copiar archivos entre el sistema host y un contenedor Docker utilizando el comando docker cp:

## Copiar un archivo del host al contenedor
docker cp /path/on/host my-nginx:/path/in/container

## Copiar un archivo del contenedor al host
docker cp my-nginx:/path/in/container /path/on/host

Registrando la Salida del Contenedor

Para ver los registros de un contenedor Docker en ejecución, utiliza el comando docker logs:

docker logs my-nginx

Esto mostrará los registros de salida estándar (stdout) y error estándar (stderr) del contenedor.

Monitorizando el Uso de Recursos del Contenedor

Puedes monitorizar el uso de recursos de un contenedor Docker utilizando el comando docker stats:

docker stats my-nginx

Esto mostrará una transmisión en vivo del uso de CPU, memoria, red y E/S de disco para el contenedor my-nginx.

Conectándose a un Contenedor en Ejecución

Para conectarte a las entradas, salidas y flujos de error estándar de un contenedor Docker en ejecución, utiliza el comando docker attach:

docker attach my-nginx

Esto conectará tu terminal a los flujos estándar del contenedor, permitiéndote interactuar con la aplicación en ejecución.

En la siguiente sección, cubriremos cómo detener, iniciar y eliminar contenedores Docker.

Deteniendo, Iniciar y Eliminando Contenedores

Deteniendo un Contenedor en Ejecución

Para detener un contenedor Docker en ejecución, utiliza el comando docker stop:

docker stop my-nginx

Esto detendrá el contenedor de forma controlada, permitiéndole realizar cualquier tarea de limpieza necesaria antes de apagarse.

Iniciar un Contenedor Detenido

Para iniciar un contenedor Docker detenido, utiliza el comando docker start:

docker start my-nginx

Esto iniciará el contenedor con la misma configuración que cuando se ejecutó originalmente.

Eliminando un Contenedor

Para eliminar un contenedor Docker, utiliza el comando docker rm:

docker rm my-nginx

Esto eliminará el contenedor del sistema, pero no eliminará ninguna imagen Docker asociada.

Eliminando Múltiples Contenedores

Puedes eliminar varios contenedores a la vez utilizando el comando docker rm con la opción -f (fuerza):

docker rm -f container1 container2 container3

Esto eliminará de forma forzosa los contenedores especificados, incluso si están en ejecución.

Eliminando Contenedores Detenidos

Para eliminar todos los contenedores Docker detenidos, puedes usar el siguiente comando:

docker container prune

Esto eliminará todos los contenedores detenidos, liberando espacio en disco en tu sistema.

En la siguiente sección, exploraremos algunas aplicaciones prácticas de los contenedores Docker.

Aplicaciones Prácticas de Contenedores Docker

Implementación de Aplicaciones Web

Uno de los casos de uso más comunes para los contenedores Docker es la implementación de aplicaciones web. Docker te permite empaquetar tu aplicación, junto con sus dependencias, en un solo contenedor que se puede implementar fácilmente en diferentes entornos, como desarrollo, preproducción y producción.

Arquitectura de Microservicios

Docker es adecuado para la construcción e implementación de aplicaciones basadas en microservicios. Cada microservicio se puede empaquetar en un contenedor separado, lo que facilita la escalabilidad, la actualización y el mantenimiento de los componentes individuales de la aplicación.

Integración Continua y Entrega Continua (CI/CD)

Docker se integra bien con las tuberías CI/CD, lo que te permite construir, probar e implementar tus aplicaciones de forma consistente y automatizada. Los contenedores Docker se pueden utilizar como entornos de compilación, entornos de prueba y objetivos de implementación.

Procesamiento y Análisis de Datos

Los contenedores Docker se pueden utilizar para ejecutar cargas de trabajo de procesamiento y análisis de datos, como procesamiento por lotes, procesamiento de flujos y aprendizaje automático. Al empaquetar toda la canalización de procesamiento en un contenedor, puedes garantizar la consistencia y la portabilidad en diferentes entornos.

Entornos de Desarrollo y Pruebas

Docker se puede utilizar para crear entornos de desarrollo y pruebas consistentes e aislados. Los desarrolladores pueden usar Docker para configurar sus entornos de desarrollo locales, mientras que los equipos de control de calidad pueden usar Docker para crear entornos de prueba estandarizados.

Computación sin Servidores

Docker se puede utilizar como base para plataformas de computación sin servidores, donde las aplicaciones se implementan y escalan como contenedores individuales, sin necesidad de administrar la infraestructura subyacente.

Internet de las Cosas (IoT)

La naturaleza ligera y portátil de Docker lo convierte en una buena opción para aplicaciones IoT, donde los dispositivos pueden tener recursos limitados. Los contenedores Docker se pueden utilizar para empaquetar e implementar aplicaciones IoT en una flota de dispositivos.

En la siguiente sección, discutiremos las mejores prácticas para administrar contenedores Docker.

Mejores Prácticas para Administrar Contenedores Docker

Usar Imágenes Base Ligera

Al crear tus propias imágenes Docker, utiliza imágenes base ligeras, como alpine o scratch, para minimizar el tamaño de tus contenedores y mejorar su rendimiento.

Optimizar las Capas de Dockerfile

Organiza tu Dockerfile para aprovechar el mecanismo de caché de capas de Docker. Agrupa instrucciones relacionadas para minimizar el número de capas y mejorar los tiempos de compilación.

Usar Variables de Entorno para la Configuración

Almacena datos de configuración, como cadenas de conexión a la base de datos o claves API, en variables de entorno en lugar de codificarlos en tu código de aplicación o Dockerfile.

Implementar Registros y Monitoreo

Configura tus contenedores Docker para registrar eventos y métricas importantes, y utiliza herramientas como Prometheus, Grafana o la pila ELK para monitorear la salud y el rendimiento de tus contenedores.

Administrar Secretos del Contenedor

Utiliza herramientas como Docker Secrets o HashiCorp Vault para administrar de forma segura datos confidenciales, como contraseñas o claves API, a los que tus contenedores necesitan acceder.

Automatizar la Gestión del Ciclo de Vida del Contenedor

Integra Docker con tu canalización CI/CD para automatizar la compilación, las pruebas y la implementación de tus contenedores. Utiliza herramientas como Docker Compose, Kubernetes o LabEx para administrar el ciclo de vida de tus contenedores.

Asegurar tus Contenedores

Mantén seguro tu demonio Docker y tus contenedores siguiendo las mejores prácticas, como ejecutar contenedores como usuarios que no sean root, usar sistemas de archivos de solo lectura e implementar políticas de red.

Optimizar el Uso de Recursos del Contenedor

Monitorea el uso de recursos de tus contenedores y optimiza sus asignaciones de recursos para garantizar una utilización eficiente de tu infraestructura.

Mantener la Higiene del Contenedor

Elimina y limpia regularmente las imágenes y contenedores Docker no utilizados para liberar espacio en disco y mantener un entorno Docker saludable.

Siguiendo estas mejores prácticas, puedes administrar y mantener tus contenedores Docker de manera efectiva, asegurando una implementación y operación de aplicaciones confiables y eficientes.

Resumen

Al finalizar este tutorial "Guía para principiantes: Ejecutar y cerrar rápidamente contenedores Docker", tendrás una comprensión sólida de Docker y la capacidad de ejecutar, interactuar y cerrar rápidamente tus contenedores Docker. También aprenderás valiosas prácticas recomendadas para administrar tu entorno Docker, lo que te permitirá optimizar tus procesos de desarrollo e implementación.