Servicios Docker, pila y paquete de aplicaciones distribuidas

docker-1.12

Primera versión candidata de Docker 1.12 se anunció en hace dos semanas. Varias novedades
previsto para esta versión.

Este blog mostrará cómo crear un Aplicación distribuida Bundle de Docker Compose y desplegarlo como Docker Stack en Enjambre Docker Modo. Muchas gracias a @friism por ayudarme a entender estos conceptos.

Veamos primero las características:

  • Orquestación integrada: Una aplicación típica se define mediante un archivo Docker Compose. Esta definición consta de varios contenedores y se despliega en varios hosts. Esto evita el punto único de fallo (SPOF) y mantiene su aplicación
    resistentes. Múltiples marcos de orquestación como Docker Swarm, Kubernetes y Mesos permiten orquestar estas aplicaciones. Sin embargo es una característica tan importante de la aplicación, Docker Engine ahora tiene orquestación incorporada.
    Más detalles sobre este tema en un blog posterior.
  • Servicio: Un servicio replicado, distribuido y con equilibrio de carga puede crearse fácilmente utilizando docker service create comando. Se proporciona un "estado deseado" de la aplicación, como ejecutar 3 contenedores de Couchbase, y el comando
    El motor Docker de autorreparación garantiza que muchos contenedores se ejecuten en el clúster. Si un contenedor se cae, se inicia otro. Si un nodo se cae, los contenedores en ese nodo se inician en un nodo diferente. Más información en
    blog.
  • Seguridad de configuración cero: Docker 1.12 viene con TLS autenticado mutuamente, proporcionando autenticación, autorización y cifrado a las comunicaciones de cada nodo que participa en el enjambre, fuera de la caja. Más información en
    un blog posterior.
  • Pila Docker y paquete de aplicaciones distribuidas: Distributed Application Bundle, o DAB, es un formato de imagen distribuible multiservicios. Siga leyendo para obtener más detalles.

Hasta ahora, puede tomar una Dockerfile y crear una imagen a partir de ella utilizando la función construcción docker comando. Un contenedor puede iniciarse utilizando el comando docker run comando. Se pueden iniciar fácilmente varios contenedores dando
ese comando varias veces. O también puedes usar el archivo Docker Compose y escalar tus contenedores usando el comando docker-compose scale mando.
docker-lifecycle

La imagen es un formato portátil para un único contenedor. Paquete de aplicaciones distribuidas, o DAB, es un nuevo concepto introducido en Docker 1.12, es un formato portátil para múltiples contenedores. Cada bundle puede desplegarse como
a Pila en tiempo de ejecución.

docker-stack-lifecycle

Más información sobre DAB en docker.com/dab. Para simplificar, se puede establecer una analogía:

Dockerfile -> Imagen -> Contenedor

Docker Compose -> Paquete de aplicaciones distribuidas -> Docker Stack

Utilicemos un archivo Docker Compose, creemos un DAB a partir de él y despleguémoslo como Docker Stack.

Es importante señalar que se trata de una función experimental en 1.12-RC2.

Creación de un paquete de aplicaciones distribuidas desde Docker Compose

Docker Compose CLI añade un nuevo paquete mando. Encontrará más información al respecto:

Ahora, tomemos una definición de Docker Compose y creemos un DAB a partir de ella. Aquí está nuestra definición Docker Compose:

Este archivo Compose inicia un servidor WildFly y un servidor Couchbase. En el servidor WildFly se predespliega una aplicación Java EE que se conecta al servidor Couchbase y permite realizar operaciones CRUD utilizando la API REST. La fuente de este archivo está en:
github.com/arun-gupta/oreilly-docker-book/blob/master/hello-javaee/docker-compose.yml. Genera un paquete de aplicaciones con él:

depende_de sólo crea dependencia entre dos servicios y hace que se inicien en un orden específico. Esto sólo asegura que el contenedor Docker se inicie, pero la aplicación dentro del contenedor puede tardar más en iniciarse. Así que este atributo sólo
resuelve parcialmente el problema. nombre_contenedor da un nombre específico al contenedor. Depender de un nombre específico de contenedor es un acoplamiento estrecho y no permite escalar el contenedor. Así que ambas advertencias pueden ser ignoradas,
por ahora. Este comando genera un archivo utilizando el nombre del proyecto Compose, que es el nombre del directorio. Así que en nuestro caso, hellojavaee.dsb se genera un archivo. Esta extensión de archivo ha sido renombrada a .dab en RC3. El
paquete de aplicaciones:

Este archivo proporciona una descripción completa de los servicios incluidos en la aplicación. No estoy del todo seguro de que Distributed Application Bundle sea el nombre más apropiado, discútalo en #24250. En
Sería genial si otros formatos de contenedores, como Rkt, o incluso VMs pudieran ser soportados aquí. Pero por ahora, Docker es el único formato compatible.

Inicializar el modo enjambre en Docker

Como se mencionó anteriormente, el "estado deseado" ahora es mantenido por Docker Swarm. Y esto ya está integrado en Docker Engine. Los conceptos de Docker Swarm también han evolucionado y pueden leerse en Conceptos clave del modo enjambre. A
blog más detallado sobre esto vendrá más adelante. Pero para este blog, un nuevo comando enjambre docker se añade ahora:

Inicialice un nodo Swarm (como gestor) en el motor Docker:

Más información sobre este nodo en docker node inspect autocomando.

La salida detallada es verbosa pero la sección relevante es:

La salida muestra que el nodo es un gestor. Para un clúster de un solo nodo, este nodo también actuará como trabajador.

Se pueden obtener más detalles sobre el clúster utilizando la función docker swarm inspect mando.

Política de aceptación muestra que otros trabajador Los nodos pueden unirse a este clúster, pero un administrador requiere una aprobación explícita.

Despliegue de una pila Docker

Crear una pila utilizando docker deploy mando:

El uso de los comandos puede simplificarse, como se explica en #24249. Consulte la lista de servicios:

La salida muestra que dos servicios, WildFly y Couchbase, se están ejecutando. Servicios también es un nuevo concepto introducido en Docker 1.12. Es lo que le da el
"estado deseado" y Docker Engine trabaja para dártelo. docker ps muestra la lista de contenedores en ejecución:

El contenedor WildFly se inicia antes de que el contenedor Couchbase esté en funcionamiento. Esto significa que la aplicación Java EE intenta conectarse al servidor Couchbase y falla. Así que la aplicación nunca arranca con éxito.

Servicio Docker autorreparable

Docker Service mantiene el "estado deseado" de una aplicación. En nuestro caso, el estado deseado es asegurar que un, y sólo un, contenedor para el servicio se está ejecutando. Si eliminamos el contenedor, no el servicio, entonces el servicio se
arrancar automáticamente el contenedor de nuevo. Retire el contenedor como:

Nota, tienes que dar -f porque el contenedor ya se está ejecutando. Los mecanismos de auto-reparación de Docker 1.12 entran en acción y reinician automáticamente el contenedor. Ahora si vuelves a listar los contenedores:

Esto muestra que se ha iniciado un nuevo contenedor. Inspeccione el servicio WildFly:

Swarm asigna un puerto aleatorio al servicio, o éste puede actualizarse manualmente utilizando actualización del servicio docker comando. En nuestro caso, el puerto 8080 del contenedor se asigna a 30004 puerto en el host.

Verificar la aplicación

Compruebe que la aplicación se ha desplegado correctamente:

Añade un nuevo libro a la aplicación:

Vuelve a verificar los libros:

Más información sobre esta aplicación Java EE en github.com/arun-gupta/oreilly-docker-book/tree/master/hello-javaee.

Este blog muestra cómo crear un paquete de aplicaciones distribuidas desde Docker Compose y desplegarlo como Docker Stack en modo Docker Swarm.

Referencias de servicios y pilas Docker

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase

Arun Gupta es vicepresidente de promoción de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante más de 10 años en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campañas de marketing y programas. Anteriormente dirigió equipos de ingeniería en Sun y es miembro fundador del equipo Java EE. Gupta es autor de más de 2.000 entradas de blog sobre tecnología. Tiene una amplia experiencia como conferenciante en más de 40 países sobre innumerables temas y es una JavaOne Rock Star desde hace tres años consecutivos. Gupta también fundó el capítulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educación tecnológica entre los niños. Autor de varios libros sobre tecnología, ávido corredor, trotamundos, campeón de Java, líder de JUG, miembro del Dream Team de NetBeans y capitán de Docker, es fácilmente accesible en @arungupta.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.