Uno de las principales fases del proyecto afectadas por la orientación
hacia la nube es la fase de desarrollo, pues condiciona la arquitectura
y diseño de las soluciones informáticas. Las mejores prácticas en esta
fase son:
- Crecimiento vertical: Las aplicaciones deben estar diseñadas
para ejecutarse sobre una sola máquina. El crecimiento de las necesidades
se harán en base al hardware de esta máquina.
- Crecimiento horizontal: Las aplicaciones deben estar diseñadas
para poder tener múltiples instancias de la misma ejecutandose sobre varias
máquinas. Para ello, las aplicaciones deberán ser Stateless, o disponer de un
mecanismo de compartición de los datos de sesión compatible con los entornos de
la nube.
- Generación de datos y métricas: Las aplicaciones deberán recopilar y
generar todos los datos necesarios para que puedan ser centralizados y consumidos
de cara a evaluar su estado, disponibilidad, nivel de servicio y detectar
necesidades de crecimiento/corrección.
La integración del software desarrollado, dentro de la nube corporativa,
implica la conteneirización del mismo. Se exponen a continuación una serie
de buenas prácticas para este proceso:
- Se crearán preferentemente imágenes Docker basadas en sistemas operativos minimalistas
que refuercen la seguridad al reducir la superficie de ataque y faciliten la administra
ción y el mantenimiento, como por ejemplo Alpine Linux.
- Con el mismo objetivo del punto anterior, la instalación del resto de software se reducirá
al mínimo imprescindible.
- En aras de conseguir la reducción de imágenes explicada en el apartado anterior, y otras
ventajas como las de facilitar la integración y despliegue continuos, se utilizará la técnica
multistage de creación de contenedores en los casos en los que sea posible.
- Se utilizarán repositorios oficiales.
- Los datos que se deban persistir serán almacenados fuera del contenedor.
- La imagen docker deberá ser configurada de tal forma que se le pueda proveer al contendor todos
los datos necesarios para su correcta ejecución, mediante variables de entorno o parámetros.
- Procurar desplegar una única aplicación por contenedor.
- Se debe ejecutar el contenedor con un usuario con mínimos privilegios, nobody si fuera posible.
- Las empresas desarrolladoras entregarán siempre el archivo Dockerfile y no la imagen ya creada.
- Dentro del dockerfile, se deberán organizar las diferentes líneas que lo componen para optimizar la cache
- La creación de artefactos debe ser autocontenida salvo que se justifique lo contrario. La configuración
e instalación de los artefactos que componen la aplicación (paquetes, librerías ejecutables, etc) debe
proveerse como parte de la propia generación del contenedor de aplicación de forma
que el entorno de creación de estos artefactos (compiladores, librerías y otras herramientas) sea reproducible y quede explícitamente documentado
en un Dockerfile.
- La creación de los contenedores de aplicación para su despliegue no debe depender de la máquina en la
que se generen estos contenedores.
- Se aconseja seguir siempre estas y otras
Mejores prácticas para trabajar con Docker.