🐳 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