En mi serie de desarrollo sobre Docker para el desarrollador de aplicaciones web, ya había repasado el despliegue de aplicaciones Java y Node.js como contenedores junto a Couchbase Server Containers. Esta vez pensé que sería genial desplegar una aplicación web Golang como un contenedor Docker junto con un contenedor Couchbase Server. Couchbase.

El proceso es muy similar a lo que ya había demostrado en los tutoriales anteriores, pero vale la pena explorarlo. Vamos a explorar la contenedorización de una aplicación que había explicado en un tutorial anterior sobre el tema de los servicios de acortamiento de URL.

Si le interesa, puede consultar Utilizar Docker para desplegar una aplicación web Java con Couchbase en contenedoresDesplegar una aplicación web Node.js con Couchbase como contenedores Dockeren función de sus preferencias lingüísticas.

Requisitos

Sólo hay una dependencia que debe cumplirse para tener éxito con esta guía. Necesitas Docker instalado en una máquina host. Usted no necesita Golang instalado o Couchbase Server ya que es la belleza del motor Docker.

Aunque no es necesario, te recomiendo que te familiarices con la aplicación en cuestión. Para aprender sobre el código detrás de la aplicación, echa un vistazo al tutorial que escribí llamado, Crear un acortador de URL con Golang y Couchbase NoSQL.

Establecimiento de un proyecto Docker para la aplicación Golang

El código fuente de la aplicación, y lo que vamos a empaquetar, se puede ver a continuación. Debe guardarlo como un archivo de código fuente Go como main.go.

La única diferencia entre el código anterior y el tutorial anterior sobre el tema es el uso de la función os.Getenv("COUCHBASE_HOST")os.Getenv("COUCHBASE_BUCKET") comandos. Esto nos permitirá definir la información de conexión de Couchbase en tiempo de ejecución del contenedor a través de variables de entorno en lugar de codificarla en la aplicación.

Si tuvieras Couchbase Server ejecutándose, podrías lanzar la aplicación web haciendo:

Por supuesto, el proyecto tendría que estar en su $GOPATHpero sería accesible desde http://localhost:12345 como se define en el código.

El objetivo aquí no es ejecutar este proyecto localmente, sino a través de un contenedor Docker. Cree un Dockerfile junto al archivo main.go o como quiera que se llame. El Dockerfile debe contener lo siguiente:

Como base usaremos la imagen oficial de Golang Alpine Linux para Docker, pero la personalizaremos. Durante el tiempo de compilación estamos instalando Git, copiando el archivo main.go a la imagen, instalando las dependencias del proyecto que se encuentran en el archivo importar e instalando la aplicación. En tiempo de ejecución estamos ejecutando la aplicación instalada.

Para construir una imagen desde nuestro Docker blueprint personalizado, ejecutaríamos lo siguiente:

Una vez completados todos los pasos de compilación, nos quedará un archivo proyecto golang Imagen Docker. Antes de intentar ejecutar esta imagen, tenemos que preocuparnos por Couchbase. Aunque podríamos ejecutar Couchbase fuera de un contenedor, ¿dónde está la diversión en eso?

Creación de una imagen Docker personalizada del servidor Couchbase

Al igual que con Golang, existe una imagen Docker oficial para Servidor Couchbase. Aunque es una solución perfectamente aceptable, no es una solución automatizada. Esto significa que tendrás que configurar manualmente la base de datos después de que se inicie el contenedor. Probablemente queramos evitar eso.

En su lugar, cree un directorio en algún lugar de su ordenador con un Dockerfileconfigure.sh en él. El plan es crear un Docker blueprint que ejecute el script de configuración por nosotros.

Abra el Dockerfile e incluya lo siguiente:

Básicamente estamos copiando el script en la imagen base y ejecutándolo. La verdadera magia ocurre dentro del script.

Abra el configure.sh e incluya lo siguiente:

Couchbase Server tiene una interfaz RESTful que nos permitirá completar el asistente de configuración a través de un script. Los comandos anteriores definirán las especificaciones y servicios de la instancia, las credenciales administrativas y un Bucket.

Te darás cuenta de cosas como $COUCHBASE_ADMINISTRATOR_USERNAME dentro del script. Al igual que en la aplicación Golang estamos aprovechando las variables de entorno para evitar tener que hardcode valores en nuestra imagen. Estos valores pueden ser definidos durante el despliegue del contenedor.

Puede encontrar más información sobre el aprovisionamiento de un contenedor de Couchbase Server en un archivo artículo anterior que escribí sobre el tema.

Finalmente podemos construir esta imagen personalizada de Couchbase Server. Desde Docker Shell, ejecute lo siguiente:

El comando anterior nos dejará un couchbase-personalizar imagen.

Despliegue del microservicio en contenedores

Hay varias formas de desplegar las imágenes que hemos creado. Aquí exploraremos dos de ellas.

Dado lo que sabemos sobre nuestras imágenes, podemos desplegar nuestros contenedores con los siguientes comandos:

El comando anterior desplegará Couchbase Server mientras mapea los puertos necesarios al sistema operativo anfitrión. Estamos pasando cada variable de entorno con el comando y definiendo una red operativa. La red es importante porque quieres que tanto tu base de datos como tu aplicación estén en la misma red de contenedores.

El comando anterior desplegará nuestra imagen Golang mientras mapea los puertos correctos de nuevo. Para el host notarás que estamos usando couchbase que es en realidad el nombre de nuestro otro contenedor. Los nombres de los contenedores también actúan como nombres de host.

En mi opinión, los comandos que acabas de ver son una forma muy manual de hacer las cosas. En su lugar puedes crear un Docker Compose para que se encargue de ello.

Crear un docker-compose.yml en algún lugar de su ordenador con lo siguiente:

Todo en un archivo Compose estará en la misma red. Para desplegar cada servicio, ejecute lo siguiente:

Si estás familiarizado con Docker Compose estarás familiarizado con docker-compose uppero no podemos usarlo aquí. Couchbase Server no tiene un mecanismo para decirnos que está listo, así que no queremos que la aplicación Golang intente conectarse antes de que esté configurada. Definitivamente no es un gran problema cuando se trata del despliegue de contenedores.

Conclusión

Acabas de ver cómo crear un microservicio Golang como un Docker que se comunica con Couchbase Server, también ejecutándose dentro de un contenedor Docker. Al convertir tu aplicación en una imagen Docker se vuelve muy fácil de distribuir porque no tendrás que preocuparte por el entorno en el que intentas desplegarla. Siempre que el motor Docker esté disponible puedes desplegar tu aplicación. Un ejemplo útil de esto sería en despliegue continuo de contenedores utilizando Jenkins.

¿Quiere ver cómo contenerizar su aplicación Java? Eche un vistazo a este tutorial Escribí. También tengo un tutorial para contenerizar una aplicación Node.js aquí.

¿Quieres más información sobre el uso de Golang con Couchbase? Echa un vistazo a la Portal para desarrolladores de Couchbase para consultar documentación y ejemplos.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Dejar una respuesta