jueves, 22 de noviembre de 2018

Despliegue continuo con Docker y Azure App Service

En el post anterior habiamos visto como ejecutar docker en Azure App Service, habiamos creado un registro de Docker en Azure (ACR) para almacenar nuestras imagenes ahi.

Si van al siguiente link: https://test-cibiri.azurewebsites.net/ pueden ver la version inicial de una aplicacion ficticia ejecutandose sobre docker (es un simple HTML)

En este post vamos a ver como hacemos despliegue continuo de la aplicacion para que cuando se haga un push de una nueva version de la imagen a ACR esta se despliegue hacia App Service.

Para esto vamos a las propiedades del container dentro de la consola de App Service y seleccionamos despliegue continuo:
























Esto va a generar un webhook en segundo plano, esto significa que cuando hagamos un push de una nueva version de una imagen esta se desplegara automaticamente a App Service, por lo cual siempre vamos a tener la ultima version desplegada. Para demostrar esto vamos a modificar nuestra aplicacion y vamos a volver a hacer el push a ACR.













Ahora hacemos el build de la imagen y hacemos el push de la misma hacia ACR:

docker build -t cibiriregistry.azurecr.io/demo-apache:latest .

docker push cibiriregistry.azurecr.io/demo-apache:latest

























Si volvemos a ir a la URL asignada a App Service vemos que se la nueva version se encuentra funcionando con el cambio realizado:













Si vamos a  nuestro grupo de recursos veremos que hay creado un webhook, si hacemos clic en el podremos ver todas las operaciones realizadas:























En proximos post veremos escenarios mas avanzados de configuracion

Espero que les sirva 

martes, 20 de noviembre de 2018

Desplegar Docker Containers en Azure App Service

El objetivo de este tutorial es mostrar una manera rápida y fácil de almacenar y ejecutar tus imágenes de contenedores en la plataforma Azure de Microsoft.

Veremos cómo crear una imagen de contenedor localmente, enviarla al Registro de Azure Container y luego ejecutarla mediante la aplicación web de Azure para contenedores. Es una excelente manera de ejecutar un solo contenedor para una sola aplicación web.

Todo lo que se necesita es Git y Docker Desktop instalados localmente, junto con una cuenta de Azure (Puede ser una cuenta trial sin problemas)

Creación del recurso Registro de contenedor de Azure (ACR)

Las imágenes de contenedores proporcionan la base para aplicaciones que se ejecutan dentro de contenedores Docker. Una imagen es como un paquete ejecutable que incluye todo lo que necesita para ejecutar una aplicación. Las imágenes de tu contenedor incluyen el código de la aplicación, el entorno de ejecución, las bibliotecas, los archivos de configuración y las variables de entorno.

Las imágenes de contenedores se encuentran en registros públicos o privados segun sea el caso, y los servidores que ejecutan el motor Docker descargan esas imágenes para iniciar y ejecutar contenedores. El registro de contenedores predeterminado para los contenedores de Docker es hub.docker.com, que ofrece más de 100,000 imágenes de contenedores de ISV, proyectos de código abierto y colaboradores de la comunidad. Podes utilizar este servicio para almacenar tus imágenes en repositorios públicos o privados (hasta 1 repositorio privado es gratis)

Microsoft también ofrece el Registro de Contenedores de Azure (ACR), que es un servicio de registro de Docker administrado basado en la plataforma Docker Registry 2.0 de código abierto.

El uso de ACR para implementaciones de contenedores  permite almacenar las imágenes de contenedores personalizados de forma privada en la nube de Azure. ACR se integra de forma nativa con múltiples servicios de Azure, y los equipos pueden usar las tareas de ACR para automatizar las implementaciones al crear nuevas imágenes o cuando el código se tiene que usar con control de versiones. ACR también proporciona un acceso de baja latencia para extraer imágenes cuando los hosts de Docker se ejecutan en la nube de Azure.

Para este tutorial, vamos a crear una nueva instancia de ACR, luego crearemos una imagen de Docker personalizada y haremos push de la misma a ACR para que podamos usarla más adelante con la aplicación web de Azure para contenedores.

En el portal de Azure, selecciona crear un recurso y elija registro de contenedor (ACR)





































Es necesario un nombre de host compatible con DNS globalmente único para tu registro bajo el espacio de nombres global azurecr.io. Luego defini el grupo de recursos de destino y asegúrate de habilitar la opción para el usuario administrador y clic en Crear.

Una vez que se complete el aprovisionamiento, navegue a tu recurso ACR en el portal y seleccione claves de acceso en la sección de configuración. Aquí se verá el servidor de inicio de sesión, nombre de usuario de administrador y contraseñas.






















Como parte final de esta seccion, inicia un terminal y usa el comando de inicio de sesión de la ventana login server para autenticarte en ACR y validar las credenciales.











Deberías obtener un mensaje similar al de la imagen anterior.

En el siguiente paso es armar la imagen para posteriormente hacer el push al registro creado en el paso anterior, para este paso vamos a crear una imagen bien sencilla basada en Apache ejecutándose en una imagen base de Debían. Vamos a necesitar una maquina con Docker instalado y definir 2 archivos:

* Dockerfile
* HTML base para servirlo en Apache

Vamos al detalle de estos archivos:

Dockerfile:

FROM debian:latest
MAINTAINER Christian Ibiri
RUN apt-get update && apt-get -y upgrade && DEBIAN_FRONTEND=noninteractive apt-$
COPY index.html /var/www/html/
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND


Html:

<!DOCTYPE html>
<html>
<body>

<h1>Prueba para post App Service Docker</h1>
</h2>Creado por Christian Ibiri</h2>

</body>
</html>

Una vez que tenemos estos 2 archivos hacemos el build de la imagen y hacemos push de la misma al ACR:

docker build -t cibiriregistry.azurecr.io/demo-apache:latest .



















Vamos con el push:

docker push cibiriregistry.azurecr.io/demo-apache:latest










Como se puede observar en la imagen anterior la imagen se creo correctamente y deberíamos ver la misma disponible en ACR dentro de la consola de Microsoft Azure:
















Ahora que la imagen se encuentra almacenada en ACR podemos crear una nueva aplicación web dentro de Microsoft Azure e indicar que queremos utilizar la imagen previamente creada, para esto al momento de crear la aplicación seleccionamos que el origen de la imagen es ACR:





























Con esto tenemos indicada toda la configuración y podemos crear la aplicación web, si todo funciono correctamente deberíamos ver el contenido del HTML en la URL publica asignada a la aplicación dentro de Azure.














Esta funcionando perfectamente:










En un próximo post veremos como realizar despliegue continuo a App Service utilizando Docker.

jueves, 15 de noviembre de 2018

Como ejecutar un container de Docker en Azure Container Instances (ACI)


Actualmente hay 3 formas diferentes de ejecutar un contenedor Docker en Microsoft Azure:

Uso de un APP Service para contenedores Docker
Usando el servicio de Azure Kubernetes (AKS)
Uso de instancias de contenedor de Azure (ACI)

En este post, veremos brevemente cómo ejecutar un contenedor Docker en el último servicio mencionado. El servicio "Instancias de contenedor de Azure" es un servicio bastante fácil y podría ser un buen comienzo. Haré este paso para la guía de pasos a través del Portal de Azure. Puede utilizar el CLI o Powershell.

Uso de instancias de contenedor de Azure
En la primera búsqueda de "Instancias de contenedor" y esto debería aparecer:


























En esta seccion estan las configuraciones mas importantes: elegir el nombre del contenedor y la fuente de la imagen (Estas configuraciones no pueden ser modificadas luego)

La imagen puede ser de un repositorio de Public Docker Hub o de un registro privado de docker (Es importante mencionar esto debido a que podemos crear nuestras propias imagenes y hacer push a un repositorio remoto que luego sera utilizado por ACI para armar el container)

Importante: si estás utilizando un repositorio de Private Docker Hub, tenes que usar ‘index.docker.io’ como servidor de inicio de sesión, caso contrario el pull de la imagen va a fallar.





























Luego de definir el nombre del container y el repositorio se deben definir configuraciones extra, tales como: el tipo de container (Windows o Linux), Memoria RAM, tipo de IP publica y mapeos de puertos hacia el container:




























Validamos la configuracion antes de proceder a la configuracion del container, si todo esta bien seleccionamos "Ok" para que se cree.



























Algo que me sorprendio es la rapidez con la que se crean los containers, en este caso utilizamos una imagen de NGINX y en exactamente 35 segundos ya estaba funcionando





Si vamos a la IP que nos indica Azure asociada al container podremos ver la pagina default de NGINX:
















Como conclusion se puede decir que este servicio es perfecto para pruebas y containers standalone donde no es requerido alta disponibilidad.