🐳 Docker para desarrolladores: qué es, cómo funciona y cómo levantar contenedores con YAML

Publicado por @anthonybanion | Abril 2025


🧠 ¿Qué es Docker?

Docker es una plataforma de código abierto que permite crear, distribuir y ejecutar aplicaciones dentro de contenedores.

📦 ¿Qué es un contenedor?

Un contenedor es una unidad ligera y portátil que incluye:

  • tu aplicación,
  • todas sus dependencias,
  • librerías,
  • y configuraciones necesarias para ejecutarse.

⚙️ ¿Cómo funciona Docker?

Docker se basa en una arquitectura cliente-servidor:

🔸 1. Docker Engine (Servidor)

Es el corazón de Docker, corre como un proceso en segundo plano (dockerd) y se encarga de:

  • gestionar imágenes,
  • construir contenedores,
  • ejecutar y parar servicios,
  • administrar redes, volúmenes, etc.

🔸 2. Docker CLI (Cliente)

Es el comando docker que usás para comunicarte con el motor. Por ejemplo:

docker run nginx

Esto le dice al motor: "Descargá la imagen de Nginx y corré un contenedor".

🔸 3. Docker Images

Las imágenes son plantillas inmutables que contienen todo lo necesario para correr una app: código, runtime, dependencias, etc.

Ejemplo:

docker pull php:8.2-apache

🔸 4. Docker Containers

Son instancias en ejecución de una imagen. Pueden ser destruidos y recreados fácilmente.

Ejemplo:

docker run -d -p 8080:80 php:8.2-apache

🚫 ¿Por qué no usar directamente mi sistema?

Cuando instalás software directamente en tu sistema operativo, podés encontrarte con:

  • Conflictos entre versiones
  • Problemas de dependencias (el clásico "works on my machine")
  • Dificultades para replicar entornos

✅ ¿Qué resuelve Docker?

  • Aislás aplicaciones como si estuvieran en entornos separados
  • Reproducís entornos exactos en diferentes máquinas
  • Empaquetás tu app y su entorno como un bloque portable

🛠️ ¿Cómo funciona Docker?

Docker se compone de tres elementos clave:

Componente Qué hace
Docker Engine Servicio que ejecuta contenedores
Docker CLI Herramienta de línea de comandos para interactuar
Docker Compose (v2) Herramienta para definir múltiples contenedores con YAML

🔥 Casos de uso reales

Desarrollo local con PHP, Node.js, Python, etc.

  • Entornos reproducibles para equipos de trabajo
  • Despliegues automatizados (CI/CD)
  • Contenedores con bases de datos para pruebas
  • Microservicios

📦 Instalación recomendada

Para Linux (como Xubuntu 24.04), te recomiendo usar el repositorio oficial de Docker, ya que es más actualizado y compatible con versiones modernas.

# 1. Preparar el sistema
sudo apt update
sudo apt install ca-certificates curl gnupg -y

# 2. Crear carpeta segura para llaves
sudo install -m 0755 -d /etc/apt/keyrings

# 3. Descargar y convertir la clave GPG
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 4. Agregar el repositorio oficial 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

# 5. Actualizar e instalar Docker y Compose (plugin)
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 6. Verificar
docker --version
docker compose version

🧪 Lista de comandos comunes de Docker

Comando Qué hace
docker --version Muestra la versión instalada
docker info Muestra info del sistema y demonio
docker images Lista las imágenes disponibles
docker ps Lista los contenedores activos
docker ps -a Lista todos los contenedores (activos o no)
docker pull Descarga una imagen desde Docker Hub
docker run Ejecuta un contenedor
docker run -d -p 8080:80 nginx Corre un contenedor en segundo plano, exponiendo puertos
docker exec -it bash Entra al contenedor como si fuera una terminal
docker stop Detiene un contenedor
docker rm Elimina un contenedor
docker rmi Elimina una imagen
docker logs Muestra los logs del contenedor
docker compose up Levanta todos los servicios definidos en YAML
docker compose down Detiene y elimina los contenedores de Compose

🧩 ¿Y qué es YAML?

Te dejo mi artículo dedicado a YAML donde explico de forma clara su sintaxis, usos y lo comparo con JSON:
👉 YAML: qué es, para qué sirve y cómo usarlo

🧱 Ejemplo práctico: levantar 3 contenedores con YAML

Vamos a usar Docker Compose para levantar:

  • Servidor PHP con Apache
  • Base de datos MariaDB
  • phpMyAdmin como frontend para la base de datos

📄 docker-compose.yml

version: '3.8'
services:
  php-apache:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html

  mariadb:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: tienda
      MYSQL_USER: user
      MYSQL_PASSWORD: pass

  phpmyadmin:
    image: phpmyadmin
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mariadb

▶️ Para correr el entorno:

docker compose up -d

Luego accedés a:

🧑‍💻 http://localhost:8080 → tu app PHP

📊 http://localhost:8081 → interfaz phpMyAdmin

🧼 Para detener y limpiar todo:

docker compose down

🧠 Conclusión

Docker no solo te permite crear entornos consistentes, sino que te da poder para automatizar, testear y escalar tus aplicaciones con facilidad.
Sumado a YAML, se convierte en una herramienta de desarrollo imprescindible en 2025.
Explorar estas tecnologías te prepara para el mundo real del desarrollo moderno y profesional.

📎 Recursos útiles

Documentación oficial de Docker
Docker Compose
Mi guía completa de YAML