11. Del desarrollo al despliegue
Temas del programa: 4.3
Desarrollo y producción
Section titled “Desarrollo y producción”En desarrollo buscamos facilidad para modificar el código y observar resultados
En producción necesitamos además controlar disponibilidad seguridad configuración datos y recuperación
DESARROLLO
Código + imágenes + ComposePRODUCCIÓN
Imágenes versionadas+ configuración controlada+ datos persistentes+ monitoreo+ respaldos+ seguridadContenerizar no sustituye la planeación de operación
¿Qué llevamos al servidor?
Section titled “¿Qué llevamos al servidor?”Aplicación │ ├── Imagen ├── Configuración ├── Datos persistentes ├── Redes └── Dependencias de infraestructuraNo necesitamos trasladar literalmente toda la computadora del desarrollador
Necesitamos definir los artefactos y servicios necesarios para ejecutar la aplicación en el ambiente destino
Distribución de imágenes
Section titled “Distribución de imágenes”Equipo de desarrollo │ ▼docker build │ ▼Imagen versionada │ ▼Registry │ ▼Servidor │ ▼docker compose upEl registry puede ser Docker Hub o un registro privado como GitLab Container Registry
El servidor debe tener acceso autorizado al registro y a la configuración requerida
¿Por qué versionar imágenes?
Section titled “¿Por qué versionar imágenes?”Ejemplo
reservafic:1.0.0reservafic:1.1.0reservafic:1.2.0Las etiquetas permiten identificar versiones de la aplicación
Para despliegues reproducibles debemos controlar también las imágenes base las dependencias y la configuración
Una etiqueta por sí sola no garantiza que el contenido de una referencia sea inmutable
¿Qué significa reproducibilidad?
Section titled “¿Qué significa reproducibilidad?”Equipo A │ ▼Repositorio │ ▼Definición de ambiente │ ▼EjecuciónEquipo B │ ▼Repositorio │ ▼Definición de ambiente │ ▼EjecuciónBuscamos que ambos equipos utilicen versiones y configuraciones controladas
El resultado puede seguir dependiendo de diferencias de arquitectura recursos y del entorno de ejecución
¿Cómo diagnosticamos un contenedor detenido?
Section titled “¿Cómo diagnosticamos un contenedor detenido?”Primero observamos
docker ps -aDespués consultamos sus registros
docker logs nombre_contenedorY examinamos su configuración
docker inspect nombre_contenedorNo comenzamos eliminando todo ni reconstruyendo la aplicación sin entender el problema
Error frecuente: puerto ocupado
Section titled “Error frecuente: puerto ocupado”Supongamos que aparece un error al publicar
Bind for 127.0.0.1:8080 failedport is already allocatedUna causa posible es que otro proceso o contenedor ya utilice el puerto
Podemos revisar
docker psTambién debemos comprobar los procesos y servicios del host mediante las herramientas apropiadas para el sistema operativo
Error frecuente: conexión rechazada
Section titled “Error frecuente: conexión rechazada”Aplicación │ ▼localhost:5432 │ ▼Connection refusedPreguntas de diagnóstico
- ¿PostgreSQL está ejecutándose?
- ¿Está listo para aceptar conexiones?
- ¿La dirección es correcta?
- ¿La aplicación está dentro o fuera de un contenedor?
- ¿El puerto corresponde al servicio correcto?
- ¿Los servicios comparten la red adecuada?
Error frecuente: permisos denegados
Section titled “Error frecuente: permisos denegados”Permission deniedAntes de cambiar permisos revisamos
whoamiidls -l archivoTambién debemos verificar
- Quién es el propietario
- Qué grupos intervienen
- Qué permisos tiene el directorio padre
- Qué usuario ejecuta el proceso del contenedor
- Si hay un volumen o bind mount involucrado
No utilices chmod 777 como solución automática
Error frecuente: desaparecieron los datos
Section titled “Error frecuente: desaparecieron los datos”Primero preguntamos dónde se almacenaban
¿Capa de escritura del contenedor? │ ▼Datos ligados al ciclo de vida del contenedor¿Volumen nombrado? │ ▼Datos separados del ciclo de vida del contenedorDespués revisamos si el volumen existe y si fue eliminado
Los respaldos siguen siendo necesarios aunque utilicemos volúmenes
Comandos para revisar el entorno
Section titled “Comandos para revisar el entorno”docker versiondocker infodocker ps -adocker imagesdocker network lsdocker volume lsPara un contenedor específico
docker inspect nombre_contenedordocker logs nombre_contenedordocker statsEstos comandos ayudan a obtener evidencia antes de cambiar la configuración
Relación con el laboratorio
Section titled “Relación con el laboratorio”Este tema se practica en el Laboratorio 4 — Despliegue en un servidor con HTTPS.
Qué sigue
Section titled “Qué sigue”Continúa con 12. Escalabilidad y orquestación.

