Docker y ASP.NET Core con Couchbase Server

En muchas de mis entradas de blog y ejemplos, utilizo un único nodo de Couchbase Server. Hago esto porque es fácil, y mucho de lo que demuestro se puede hacer con un solo nodo. Sin embargo, Couchbase Server se ejecuta típicamente en múltiples nodos en producción (a veces 3, a veces 3000). Para simular esto localmente, puedo usar algunos contenedores Docker ligeros.

Ya que estoy, voy a mostrarte cómo empezar con un sitio web ASP.NET Core, también ejecutándose en Docker.

Lo que necesita para empezar

  • Docker para Windows. Puedes usar Docker para cualquier plataforma, pero en este ejemplo, estoy usando Windows.
  • Visual Studio 2015 (o posterior). No necesitas Visual Studio para usar ASP.NET Core o Docker, pero estoy usando una extensión de Visual Studio para facilitar las cosas.
  • .NET Core VS 2015 tooling preview 2 o superior. Se trata de herramientas .NET Core para Visual Studio.
  • Herramientas de Visual Studio para Docker (vista previa). Más herramientas VS para facilitar el trabajo.

Una vez que tengas todo lo anterior instalado, asegúrate de activar el uso compartido de unidades en Docker. De lo contrario, obtendrá un error como La tarea "PrepareForLaunch" falló inesperadamente más tarde. (Tuve que habilitar el uso compartido tanto en la unidad C como en la D, pero tu configuración variará).

Enable shared drives in Docker for Windows

Configurar Couchbase Server en Docker

Comienza ejecutando una imagen Docker de Couchbase. Como el sitio ASP.NET Core se ejecutará dentro de Docker, solo necesitamos exponer el puerto 8091 (para usar la consola de Couchbase desde un navegador web en localhost:8091).

docker run -d --name db -p 8091:8091 couchbase

Lo llamé db pero puedes ponerle el nombre que quieras. He especificado couchbase como la imagen, que es Couchbase Server 4.5.1 en el momento en que estoy escribiendo esto.

A continuación, ejecuta al menos un contenedor más con Couchbase. No hay necesidad de mapear ningún puerto para estos. Simplemente crearé dos:

docker run -d --name db2 couchbase

docker run -d --name db3 couchbase

Tome nota de las direcciones IP de estos dos contenedores utilizando docker inspect db / docker inspect db2 / etc... y buscando Dirección IPA en la salida.

Ahora, dirija su navegador a localhost:8091 para configurar el cluster de Couchbase. Si no lo has hecho antes, puedes consultar esta entrada del blog sobre la configuración de Couchbase Server o puede vea este vídeo sobre la configuración de Couchbase Server.

Cuando configures y crees un bucket (yo he creado un bucket llamado 'default'), sigue adelante y activa la replicación, ya que vamos a añadir algunos nodos más.

Enable replication when creating a bucket

Vaya a la pestaña Nodos Servidores y pulse "Añadir Servidor". Introduzca la dirección IP de db2 y haga clic en "Añadir servidor". Repita el proceso para db3 y cualquier otro nodo que haya creado. En este punto, deberías ver un número junto a "Pendiente de reequilibrio". Esto significa que los nodos están listos para formar parte del cluster.

Rebalance pending in Couchbase Console

Haz clic en 'rebalancear'. Esto tomará un poco de tiempo, pero cuando termine, tendrás un cluster de Couchbase Server corriendo dentro de Docker. Es importante tener en cuenta que incluso durante la operación de reequilibrio, el clúster sigue siendo funcional.

Couchbase Cluster in Docker

Mientras estás en la consola de Couchbase, sigue adelante y crea un índice primario. Ejecuta CREATE PRIMARY INDEX on default en la pestaña Consulta. La aplicación ASP.NET Core necesitará esto.

Crear una aplicación ASP.NET Core

Desde Visual Studio, cree una nueva aplicación ASP.NET Core. También puede utilizar la aplicación Código fuente ASP.NET Core que ya he preparado para este ejemplo en GitHub. Es un sitio web muy sencillo con dos operaciones: hacer una lista de todos los regalos y añadir un nuevo regalo aleatorio a la lista. (Es esa época del año y tengo regalos en la cabeza).

New ASP.NET Core project in Visual Studio

Añade la dependencia CouchbaseNetClient con NuGet. Utilizaremos el SDK de .NET Core, que actualmente se encuentra en la vista previa para desarrolladores. Por lo tanto, necesitarás ejecutar Install-Package CouchbaseNetClient -Pre en la consola del gestor de paquetes. Si no utiliza -PreNuGet intentará instalar el SDK de .NET en lugar del SDK de .NET Core.

A continuación, añade soporte para Docker al proyecto. Haz clic con el botón derecho del ratón en el proyecto, luego en Añadir y, a continuación, en "Soporte para Docker". Esto añadirá algunos archivos Docker a tu proyecto. Si no ves esta opción, entonces necesitas instalar Herramientas de Visual Studio para Docker.

Add Docker support with Visual Studio Tools for Docker

En la aplicación ASP.NET Core, configure el módulo ClusterHelper para apuntar al Cluster Couchbase usando una o más de las direcciones IP de los contenedores db/db2/db3.

Consulte el código fuente completo en GitHub, especialmente HomeController.cs y Regalo.cs. Aquí está el Índice acción y la GetAllGifts al que llama.

Dado que tienes instaladas las herramientas Docker, hay un nuevo botón de despliegue para Docker.

Docker deploy button in Visual Studio

Haga clic aquí para ejecutar su aplicación ASP.NET Core en Docker. Tenga en cuenta que cuando ejecute esto por primera vez, puede tardar más tiempo porque está descargando el archivo aspnetcore de Docker Hub.

Una vez desplegado el contenedor, hay un paso más. Por alguna razón, la imagen Docker de aspnetcore no se conecta a la red Docker "puente". Por lo tanto, la aplicación ASP.NET Core no puede ver el cluster Couchbase. Para añadir 'bridge', ejecuta docker network connect bridge dockernetcore_dockernetcore_1 (el nombre de su contenedor puede variar). Puede que haya otra forma de hacerlo cambiando la directiva Dockerfile o docker-compose.ymlpero no sé cuál es (todavía).

Vuelva a ejecutar la aplicación ASP.NET Core (con Docker). El sitio web debería aparecer en tu navegador. En este punto, tienes 4 contenedores ejecutándose juntos en el host de Docker: un servidor web ejecutando ASP.NET Core y tres nodos de Couchbase Server.

ASP.NET Core website using Couchbase Server

Resumen

Cuando tu sitio esté funcionando, y hayas añadido unos cuantos regalos, vuelve a la Consola de Couchbase y abre la pestaña Nodos del Servidor. Echa un vistazo a la columna "Items" y observa la división Activo/Réplica. A medida que añades regalos, observa que los documentos se reparten automáticamente entre los nodos, y las réplicas se almacenan en los otros nodos.

Otra cosa que puedes probar por diversión: activa el auto-failover (Settings → Auto-Failover → Enable), y luego apaga uno de los nodos de Couchbase (docker stop db2 por ejemplo). Luego observa en la consola de Couchbase como el nodo se cae y los otros nodos se compenstate. Finalmente, vuelva a poner el nodo en línea (docker start db2), y observa que el clúster te da algunas opciones para volver a añadir el nodo.

Options for recovering a Couchbase node

Soy bastante nuevo tanto en Docker como en ASP.NET Core, así que si tienes algún consejo o sugerencia, me encantaría escucharlo. Por favor, deja un comentario o encontrar @mgroves en Twitter.

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

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

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.