Docker Esencial: Contenedores desde Cero
- Duración: 4 tardes (16 horas lectivas).
- Modalidad: Online en directo / Presencial.
- Público objetivo: Estudiantes y desarrolladores juniors que sufren el "en mi máquina sí funciona" y necesitan empaquetar sus aplicaciones y bases de datos en entornos aislados y reproducibles.
El Problema
Instalar una base de datos directamente en tu sistema operativo, pelearte con versiones incompatibles de Java/Node/Python o enviar un proyecto que no le arranca a un compañero porque le falta una dependencia es perder el tiempo.
Las empresas exigen que cualquier software se ejecute en contenedores:
- No más "se me ha desconfigurado la base de datos local".
- Levantar todo el entorno de un proyecto con una sola línea de comando.
- Asegurar que lo que funciona en tu portátil funcionará exactamente igual en cualquier servidor.
Esta píldora te enseña a containerizar tus proyectos sin complicaciones.
Temario Detallado (Tarde por Tarde)
Lunes: Fundamentos de la Containerización
- ¿Por qué Docker?: Máquinas virtuales vs. Contenedores (aislamiento, recursos y velocidad).
- Arquitectura de Docker: Daemon, Cliente CLI, Imágenes y Contenedores.
- Primeros pasos con la CLI: Descargar y ejecutar contenedores oficiales (
docker run,docker ps,docker stop,docker rm). - Inspección y logs: Ver qué pasa dentro de un contenedor en ejecución (
docker logs,docker exec -it). - Ejercicio práctico: Levantar servidores web (Nginx/Apache) y bases de datos desde Docker Hub sin instalar nada en el sistema base.
Martes: Creación de Imágenes con Dockerfile
- Anatomía de un Dockerfile: Instrucciones clave (
FROM,WORKDIR,COPY,RUN,ENV,EXPOSE,CMD). - Ciclo de vida: Construir imágenes personalizadas (
docker build) y etiquetarlas (docker tag). - Estrategias de optimización: Orden de las capas, uso de
.dockerignorey elección de imágenes base ligeras (Alpine/Slim). - Ejercicio práctico: Escribir un
Dockerfiledesde cero para empaquetar una aplicación web (Java, Node o Python) y ejecutarla dentro de un contenedor.
Miércoles: Persistencia de Datos y Volúmenes
- El ciclo de vida efímero: Por qué los datos dentro de un contenedor se pierden al destruirlo.
- Volúmenes gestionados por Docker: Creación, inspección y uso de
docker volume. - Bind Mounts: Mapear carpetas de tu máquina local al contenedor para desarrollo en tiempo real.
- Gestión de permisos y persistencia: Proteger los datos de tus bases de datos (PostgreSQL, MySQL o MongoDB).
- Ejercicio práctico: Montar una base de datos containerizada con volumen persistente, destruir el contenedor y comprobar que los datos no se han perdido.
Jueves: Redes y Orquestación Local con Docker Compose
- Redes en Docker: Aislamiento, driver
bridgey resolución de nombres por DNS interno de Docker. - Introducción a Docker Compose: Sintaxis del archivo
docker-compose.yml. - Servicios, Redes y Volúmenes: Declarar múltiples contenedores interconectados de forma limpia.
- Variables de entorno y secretos: Uso de archivos
.envpara no exponer credenciales en el código. - Ejercicio práctico: Diseñar un entorno multicapa funcional (Aplicación Backend + Base de Datos PostgreSQL + Adminer/pgAdmin).
Viernes: Publicación y Buenas Prácticas
- Registros de imágenes: Cuenta en Docker Hub, autenticación y publicación de imágenes propias (
docker push). - Limpieza de recursos: Mantenimiento del entorno local sin llenar el disco (
docker system prune, eliminación de imágenes huérfanas). - Buenas prácticas de seguridad: Ejecutar procesos sin usuario
rooty gestión de puertos expuestos. - Ejercicio práctico: Publicar la imagen de tu aplicación en Docker Hub y desplegarla mediante Docker Compose en la máquina de un compañero con un solo comando (
docker compose up).
Lo que te llevas
- La capacidad de aislar cualquier base de datos o servicio en segundos sin ensuciar tu sistema operativo.
- Sabiduría práctica para crear Dockerfiles optimizados para tus propios proyectos.
- Dominio de Docker Compose para arrancar entornos completos de desarrollo con un solo comando.