Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:cursos:docker_avanzado:el_porque_de_los_contenedores

El porqué de los contenedores

Contenido perteneciente al curso Docker avanzado.

¿Qué es una aplicación web?

En la ingeniería de software se denomina aplicación web a aquellas herramientas que los usuarios pueden utilizar accediendo a un servidor web a través de internet o de una intranet mediante un navegador.

En otras palabras, es un programa que se codifica en un lenguaje interpretable por los navegadores web en la que se confía la ejecución al navegador.

La elaboración de una aplicación es un proceso de ingeniería dividido en fases

Cada fase involucra diferentes roles con necesidades de conocimiento dispares pero complementarios

Las fases pueden ejecutarse de forma secuencial una única vez (metodología en Cascada)

O pueden ejecutarse N veces de forma repetitiva (metodología en espiral)

  1. Requisitos
  2. Diseño
  3. Codificación
  4. Pruebas
  5. Despliegue
  6. Mantenimiento

En las fases de Requisitos y Diseño se marcan las necesidades tecnológicas del proyecto y como se van a suplir:

  • Se define la tecnología escogida para el desarrollo
  • Se definen los requisitos no funcionales que darán lugar al diseño de la infraestructura de despliegue

Con gran diferencia, las fases de Codificación y Pruebas son las fases que más tiempo y recursos requieren en el total del proyecto

La fase de Despliegue comúnmente es la fase en la que se pone el software a funcionar en los entornos de producción

En la actualidad es muy común tener diferentes entornos previos al de producción para la realización de pruebas de integración o calidad

La fase de Mantenimiento es una fase posterior al desarrollo principal donde se abordan y solucionan posibles incidencias no detectadas en la fase de pruebas

Múltiples tecnologías para el desarrollo

  • Capa Navegador
    • HTML
    • CSS
    • JavaScript
  • Capa servidor
    • PHP
    • Java
    • JavaScript en lado servidor (SSJS)
    • Perl
    • Ruby
    • Python
    • Node.js
    • C# y Visual Basic con sus tecnologías de ASP/ASP.NET
  • Capa persistencia
    • Bases de datos SQL (MySQL, PostgreSQL, Oracle, …)
    • Bases de datos NOSQL (Cassandra, MongoDB, Redis, CouchDB, …)

Múltiples tecnologías para el despliegue

  • Apache HTTP Server
  • NGINX
  • Apache Tomcat
  • GlassFish
  • Oracle WebLogic Server
  • Microsoft IIS

Desplegando una aplicación web

A la hora de diseñar el despliegue de nuestra aplicación solemos manejar tres opciones:

  • Servidor dedicado
  • Virtualización
  • Contenerización

Servidor dedicado

Hace años era la opción predeterminada

Si todas las aplicaciones comparten arquitectura y tecnologías es más fácil de configurar y mantener

Todas las aplicaciones coexisten en la misma máquina (SO):

  • Puede suponer un problema de seguridad si no se manejan los permisos de forma adecuada
  • Una aplicación puede consumir todos los recursos disponibles
  • Un fallo crítico en una aplicación puede suponer la caída del resto de aplicaciones

El despliegue en un nuevo entorno implica un gran trabajo de configuración

La escalabilidad, cuando es posible, es complicada y costosa

Virtualización

Cada aplicación o conjunto de aplicaciones se despliega dentro de una maquina virtual (MV)

En el mismo servidor (host) pueden coexistir múltiples MV con tecnologías diferentes

El uso de recursos del host puede limitarse por MV

Un fallo crítico dentro de una MV no afecta a otras (isolación)

Mover la MV a otro servidor (con el mismo sistema de virtualización) es relativamente sencillo

La escalabilidad es más sencilla:

  • Duplicar una MV es mucho más fácil que duplicar un servidor
  • Se puede parar una instancia y relanzarla con más asignación de recursos

Contenerización

Existen varias opciones para la contenerización, pero sin duda la más extendida es Docker

El objetivo principal es el mismo, el aislamiento entre aplicaciones y generar un entorno replicable.

En este caso en lugar de albergar un SO completo lo que se busca es compartir directamente los recursos del SO Host

El Docker Engine es el encargado de lanzar y gestionar los contenedores buscando el uso optimo de los recursos del host

Docker funciona a partir de imágenes que se pueden reutilizar entre varias aplicaciones

Docker aisla directamente aplicaciones, no sistemas operativos.

¿Qué es Docker

Docker es un motor de código abierto que automatiza la implementación de aplicaciones en contenedores

Fue escrito por el equipo de Docker, Inc (anteriormente dotCloud Inc, uno de los primeros jugadores en el mercado de la Plataforma como Servicio (PAAS)), y publicado bajo la licencia Apache 2.0

Está diseñado para proporcionar un entorno ligero y rápido en el que ejecutar su código, así como un flujo de trabajo eficiente para llevar ese código de su computadora portátil a su entorno de prueba y luego a la producción

Puede comenzar con Docker en un host mínimo que no ejecute nada más que un kernel de Linux compatible y un binario de Docker

Porqué usar Docker

Olvídate del SO y de las configuraciones manuales

  • Con las máquinas físicas o virtuales hay que instalar el SO, todo el software y dependencias que se necesita para que nuestra aplicación funcione de forma manual.
  • Con Docker todo eso se puede especificar en el Dockerfile y cada vez que se arranque el contenedor se garantiza su correcta configuración y dsiponiblidad
  • Una actualización o cambio de dependencias solo impacta en editar el Dockerfile, parar y volver a desplegar el contenedor

Adiós al "en mi máquina funciona"

  • El contenedor de Docker proporciona consistencia. Lo que va dentro es siempre lo mismo independientemente de donde se despliegue

Mucho más ligero y escalable que una MV

  • Uso más eficiente de los recursos del host
  • Transformar fácilmente un único contenedor en una granja mediante Docker Composer
  • Más potencia aun con Kubernetes
    • Permite monitorizarlos, asegurarlos, ejecutarlos periódicamente, y muchas cosas más, para crear entornos empresariales con la complejidad que necesites.

Tan seguros como un MV

  • Disponen de una versión reducida del espacio de usuario del sistema operativo
  • Un contenedor no puede acceder a otros contenedores ni al sistema operativo subyacente (a excepción de los volúmenes de almacenamiento a los que les des permiso)

Control de versiones de la infraestructura

  • Dado que toda la configuración de la infraestructura se hace en ficheros de texto plano, este fichero puede ir al Sistema de control de versiones junto con el propio código de la aplicación

Concebido para trabajar en la nube

  • Los contenedores se pensaron con la nube en la mente
  • En la actualidad los principales actores Cloud ofrecen completísimas opciones de despliegue de contenedores en sus infraestructuras
    • Amazon Web Services
    • Microsoft Azure
    • Google Compute Engine
  • Todos ellos soportan Kubernetes para permitir despliegues más complejos de multiples contenedores orquestados para trabajar y escalar de forma independiente
informatica/sistemas_operativos/cursos/docker_avanzado/el_porque_de_los_contenedores.txt · Última modificación: por tempwin