Header Ads Widget

Ticker

6/recent/ticker-posts

DevOps basado en API: Spotlight on Docker

 

Devops-spotlight-on-docker impulsado por API

La llegada de la computación en la nube ha cambiado la forma en que se crean, implementan y hospedan las aplicaciones. Un avance importante en los últimos años ha sido la aparición de DevOps , una disciplina en la encrucijada entre el desarrollo de aplicaciones y la administración de sistemas.

A los desarrolladores capacitados se les ha proporcionado un nuevo y amplio conjunto de herramientas para permitir:

  • Gestión del ciclo de vida de las aplicaciones con software de integración continua como Jenkins, Travis CI, CircleCI y CodeShip;
  • Aprovisionamiento de servidores con software y metadatos utilizando herramientas de administración de configuración como Chef, Puppet, Salt y Ansible;
  • Alojar aplicaciones en la nube, ya sea que utilicen un proveedor de IaaS como Amazon Web Services, Google Compute Engine o Digital Ocean, o una solución PaaS como Heroku, Google App Engine o cualquier oferta tecnológica específica.

Si bien estas herramientas generalmente se utilizan día a día desde la línea de comandos, todas tienen API y los desarrolladores están creando cada vez más clientes de API para administrar los flujos de trabajo de DevOps en las empresas de tecnología tal como lo hacen con sus propios productos.

De este conjunto de tecnologías emergentes, una de ellas ha revolucionado el mundo de DevOps en los últimos tres años: Docker .

Contenedores virtuales

Como describimos anteriormente , Docker es un proyecto de código abierto respaldado por una empresa del mismo nombre. Permite simplificar y acelerar la creación, implementación y ejecución de aplicaciones, al tiempo que reduce la tensión entre los desarrolladores y los departamentos de operaciones tradicionales.

Docker fue creado por el desarrollador franco-estadounidense Solomon Hykes , quien estaba construyendo un motor de implementación para la empresa PaaS dotCloud. El proyecto fue desarrollado en el lenguaje de programación Go y de código abierto en 2013.

Los contenedores virtuales de Docker están empaquetados con todo lo que la aplicación necesita para ejecutarse en el servidor host y están aislados de cualquier otra cosa que no necesiten: los contenedores se pueden mover de un host a otro sin ningún cambio. A diferencia de las máquinas virtuales administradas por hipervisor, los contenedores Docker son livianos y rápidos de iniciar.

Docker también incluye herramientas para crear e implementar aplicaciones en contenedores Docker. Los contenedores se pueden alojar en servidores Linux normales o en la nube (o prácticamente en cualquier lugar utilizando Docker Machine ).

Para obtener más información, consulte nuestra descripción general de los contenedores y las API de Docker.

Arquitectura de Docker

Cada configuración de Docker incluye un cliente de Docker (normalmente una interfaz de línea de comandos, pero Docker también cuenta con una API remota y un demonio , el proceso persistente que se ejecuta en cada host y escucha las llamadas a la API. Tanto el cliente como el demonio pueden compartir un solo host , o el demonio puede ejecutarse en un host remoto.

Las imágenes de Docker son plantillas de solo lectura a partir de las cuales se generan contenedores.
Una imagen consiste en una instantánea de una distribución de Linux como Ubuntu o Fedora, y tal vez un conjunto de aplicaciones o entornos de ejecución, como Apache, Java o ElasticSearch. Los usuarios pueden crear sus propias imágenes de Docker o reutilizar una de las muchas imágenes creadas por otros usuarios y disponibles en Docker Hub .

Los registros de Docker son repositorios desde los que se pueden descargar o cargar imágenes de Docker. Docker Hub es un gran registro público y se puede usar para extraer imágenes dentro de un flujo de trabajo de Docker, pero con mayor frecuencia los equipos prefieren tener su propio registro que contenga el subconjunto relevante de imágenes públicas de Docker que requiere junto con sus propias imágenes privadas.

Los contenedores Docker son directorios que contienen todo lo necesario para que se ejecute la aplicación, incluido un sistema operativo y un sistema de archivos, que aprovechan el kernel del sistema subyacente pero sin depender de nada específico del entorno. Esto permite que los contenedores se creen una vez y se muevan de un host a otro sin riesgo de errores de configuración. En otras palabras, exactamente el mismo contenedor funcionará tan bien en la estación de trabajo de un desarrollador como en un servidor remoto.

Un flujo de trabajo de Docker es una secuencia de acciones en registros, imágenes y contenedores. Permite a un equipo de desarrolladores crear contenedores basados ​​en una imagen personalizada extraída de un registro, e implementarlos y ejecutarlos en un servidor host. Cada equipo tiene su propio flujo de trabajo: integrarse potencialmente con un servidor de integración continua como Jenkins, herramientas de administración de configuración como Chef o Puppet, y tal vez implementarse en servidores en la nube como Amazon Web Services. El demonio en cada host de Docker permite acciones adicionales en los contenedores: se pueden detener, eliminar o mover. El resultado de todas estas acciones se denomina eventos del ciclo de vida .

Reutilizado del diagrama de flujo de Docker

Reutilizado del diagrama de flujo de Docker

¿Quién usa Docker?

Desde que entró en escena en 2013, Docker ha experimentado una adopción generalizada en las empresas de tecnología. Curiosamente, mientras que los primeros en adoptar la mayoría de las nuevas tecnologías generalmente se limitan a pequeñas empresas emergentes, las grandes empresas adoptaron rápidamente Docker, ya que se benefician más de las ganancias en eficiencia que permite y de la arquitectura de microservicios que fomenta. Los adoptantes de Docker incluyen Oracle , Cisco , Zenefits , Sony , GoPro , Oculus y la Universidad de Harvard .

El crecimiento de Docker ha sido fenomenal durante los últimos tres años, sus números de adopción son impresionantes y ha logrado atraer inversiones de fondos de capital de riesgo de primer nivel.

¿Dónde encaja Docker en el rompecabezas de DevOps?

Si bien DevOps ha facilitado el aprovisionamiento de servidores y el dominio de la administración de la configuración para los desarrolladores y los equipos de operaciones, puede ser un poco abrumador para los principiantes. La cantidad vertiginosa de tecnologías entre las que elegir puede resultar frustrante y puede generar mucha complejidad en el flujo de trabajo de una empresa si no se comprende bien el propósito de cada componente.

Docker no cae claramente en una de las categorías que enumeramos en nuestra introducción. Por el contrario, puede participar en todas las áreas de DevOps, desde las etapas de compilación y prueba hasta la implementación y la administración del servidor.

Sus características se superponen con las del software de administración de configuración: Docker se puede utilizar como sustituto de Chef o Puppet hasta cierto punto. Estas herramientas le permiten administrar toda la configuración del servidor en un solo lugar en lugar de escribir un montón de scripts bash para aprovisionar servidores, lo que se vuelve difícil de manejar cuando el número de servidores alcanza la marca de cien. La complejidad comienza invariablemente a aparecer cuando se realizan actualizaciones, instalaciones y cambios en la configuración. Los libros de cocina de Chef y los módulos Puppet resultantes deben administrarse cuidadosamente para los cambios de estado, que tradicionalmente es una tarea compartida entre los desarrolladores y el personal de operaciones.

La filosofía de Docker en torno a la gestión de la configuración es radicalmente diferente. A los defensores de la infraestructura inmutable les encanta Docker porque fomenta la creación de un único contenedor desechable con todos los componentes de una aplicación agrupados y desplegados tal cual en uno o más hosts. En lugar de modificar estos contenedores en el futuro (y, por lo tanto, administrar el estado como lo haría con Chef o Puppet), puede simplemente regenerar un contenedor completamente nuevo a partir de la imagen base y volver a implementarlo tal como está. Por lo tanto, la gestión del cambio se simplifica con Docker, al igual que la repetición del proceso de construcción e implementación y la alineación de los entornos de desarrollo, preparación y producción. Como escribe James Turnbull en The Docker Book, “La recreación del estado a menudo puede ser más barata que la remediación del estado”.

Por supuesto, Docker carece de la flexibilidad que ofrecen herramientas como Chef y Puppet, y su uso por sí mismo supone que su equipo opera solo con contenedores. Si este no es el caso y sus aplicaciones abarcan tanto los procesos basados ​​en contenedores como las aplicaciones bare metal o basadas en VM, las herramientas de gestión de la configuración conservan su utilidad. Además, la infraestructura inmutable no funciona cuando el estado es esencial para la aplicación, como en el caso de una base de datos. También puede resultar frustrante para los pequeños cambios.

En estos casos, o si Chef o Puppet son una parte importante de la arquitectura de un equipo antes de introducir Docker, es bastante fácil integrar estas herramientas dentro de un contenedor Docker, o incluso orquestar contenedores Docker usando un libro de cocina Chef o un módulo Puppet.

El software de integración continua como Jenkins puede trabajar con Docker para crear imágenes que luego se pueden publicar en un registro de Docker. Docker también permite la gestión de artefactos mediante la creación de versiones de imágenes. De esa manera, Docker Hub actúa un poco como Maven Central o repositorios públicos de artefactos de GitHub .

Blog-Post-Wide-CTA-API-Stack

API remota

Todos los eventos enumerados en la sección anterior se pueden activar a través de la interfaz de línea de comandos de Docker, que sigue siendo el arma elegida por muchos ingenieros de sistemas.

Pero también se puede acceder a los demonios a través de un socket TCP utilizando la API remota de Docker , lo que permite que las aplicaciones activen y supervisen todos los eventos mediante programación . La API de Docker también expone metadatos de contenedores y métricas clave de rendimiento.

La API remota es esencialmente una API REST bien documentada que utiliza un modelo de esquema abierto y admite la autenticación básica de los clientes API. La disponibilidad de esta API ha abierto la puerta para que los desarrolladores creativos creen herramientas sobre la pila de Docker. Exploraremos herramientas increíbles que consumen la API remota en una próxima publicación, así que estad atentos y suscríbete a nuestro boletín informativo para que no te lo pierdas.

Publicar un comentario

0 Comentarios