Docker, contenedores para tus aplicaciones

Docker, contenedores para tus aplicaciones

Si estás involucrado en el mundo del desarrollo de software, DevOps, self-hosting o domótica, es casi seguro que has oído hablar de Docker. En este post exploraremos qué es Docker, por qué se ha vuelto esencial en el ecosistema tecnológico actual y cómo puedes empezar a utilizarlo en tus proyectos.

¿Qué es Docker?

Docker es una plataforma open source que permite crear, desplegar y gestionar aplicaciones dentro de contenedores virtualizados. A diferencia de las máquinas virtuales tradicionales, los contenedores de Docker comparten el kernel del sistema operativo del host, lo que los hace más ligeros, rápidos y portables.

¿Por qué usar Docker?

  • Consistencia entre entornos: “Funciona en mi máquina” deja de ser un problema. Los contenedores garantizan que el entorno de desarrollo sea idéntico al de producción.
  • Aislamiento: Cada aplicación corre en su propio entorno sin afectar a otros contenedores.
  • Eficiencia de recursos: Consumo mínimo de memoria y CPU comparado con máquinas virtuales.
  • Portabilidad: Las imágenes funcionan igual en cualquier sistema con Docker (siempre que coincida la arquitectura: x86, ARM, etc.).
  • Ecosistema robusto: Amplia documentación, Docker Hub con miles de imágenes preconstruidas, y soporte por una gran comunidad.

Conceptos básicos

  1. Contenedor: Entorno aislado que empaqueta una aplicación con todas sus dependencias.
  2. Imagen: Plantilla ejecutable que sirve como base para crear contenedores (ej: nginx:alpine).
  3. Dockerfile: Archivo de texto con instrucciones para construir imágenes personalizadas.
  4. Docker Compose: Herramienta para definir y gestionar aplicaciones multi-contenedor mediante YAML.
  5. Volúmenes: Mecanismo para persistir datos entre reinicios de contenedores.

Instalación de Docker

Requisitos

  • Terminal básica y permisos de administrador.
  • Sistema operativo compatible (Linux recomendado).

Proceso de instalación

El proceso de instalación es variado y cambiara dependiendo del sistema operativo que estés utilizando a continuación comparto la instalación para los sistemas operativos más comunes:

Ubuntu/Debian

  1. Registra la clave GPG oficial y añade el repositorio:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
  1. Instala los paquetes:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. Habilita e inicia el servicio:
sudo systemctl enable docker && sudo systemctl start docker
  1. Verifica la instalación
docker --version  # Debe mostrar la versión instalada

ArchLinux

  1. Instala desde repositorios oficiales:
sudo pacman -Syy docker docker-compose
  1. Habilita e inicia el servicio:
sudo systemctl enable docker && sudo systemctl start docker
  1. Verifica la instalación:
docker --version  # Debe mostrar la versión instalada

Configuración Post-Instalación

Para evitar tener que usar sudo cada vez que ejecutas un comando realiza los siguientes pasos:

⚠️ Advertencia de seguridad: Añadir usuarios al grupo docker les otorga privilegios equivalentes a root. En entornos productivos, o multi-usuario, considera alternativas como Rootless Docker.

  1. Crea el grupo docker si no existe:
sudo groupadd docker
sudo usermod -aG docker $USER
  1. Opcional, si no deseas reiniciar (proceso recomendado), puedes agregar el grupo docker a tu sesión actual:
newgrp docker
  1. Verifica que tu usuario esté en el grupo docker:
id -nG

Debes ver el grupo docker en la lista de grupos.

  1. Finalmente, verifica que Docker se esté ejecutando correctamente:
docker --version

Si todo está bien, deberías ver la versión de Docker instalada. Si presentas algún problema, es altamente recomendable reiniciar tu sistema.

Primeros pasos

Inicia tu primer contenedor

docker run hello-world # Incluye sudo al inicio si no diste acceso al grupo docker

Deberas obtener un mensaje de éxito indicando que Docker está funcionando correctamente, similar al siguiente:

# Primer sección del proceso, corresponde a la descarga de la imagen
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:d715f14f9eca81473d9112df50457893aa4d099adeb4729f679006bf5ea12407
Status: Downloaded newer image for hello-world:latest

# Después se ejecuta el contenedor y se muestra el mensaje
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Comandos básicos

  • docker ps: Muestra los contenedores en ejecución.
  • docker images: Muestra las imágenes descargadas.
  • docker pull <imagen>: Descarga una imagen.
  • docker stop <contenedor>: Detiene un contenedor.
  • docker start <contenedor>: Inicia un contenedor detenido.
  • docker rm <contenedor>: Elimina un contenedor.
  • docker rmi <imagen>: Elimina una imagen.
  • docker exec -it <contenedor> <comando>: Ejecuta un comando en un contenedor.

Conclusión

Docker ha revolucionado la forma en que desarrollamos, empaquetamos y desplegamos aplicaciones. Con solo unos comandos, puedes tener entornos aislados, reproducibles y listos para producción. Desde una Raspberry Pi hasta clusters empresariales, los contenedores son el presente y futuro de la infraestructura ágil.

Recursos adicionales

Productos relacionados