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á).

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.

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.

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.

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

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 -Pre
NuGet 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.

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.
1 2 3 |
var cliente = nuevo ClientConfiguration(); cliente.Servidores = nuevo Lista {nuevo Uri("couchbase://172.17.0.2")}; ClusterHelper.Inicializar(cliente); |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
público IActionResult Índice() { var regalos = Regalo.GetAllGifts(); devolver Ver(regalos); } público estático Lista GetAllGifts() { var cubo = ClusterHelper.GetBucket("por defecto"); var consulta = Solicitud de consulta.Cree("SELECT g.* FROM `default` g"); consulta.Consistencia de escaneado(Consistencia de escaneado.SolicitarPlus); devolver cubo.Consulta(consulta).Filas; } |
Dado que tienes instaladas las herramientas Docker, hay un nuevo botón de despliegue para Docker.

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.yml
pero 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.

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.

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.