Docker Logo

Desplegando nuestros hosts de Docker a Azure con Machine

A la hora de desplegar nuestro host o motor de Docker en Azure, ya estuve hablando sobre cómo se podía hacer utilizando la extensión disponible para máquinas virtuales o desde cero dentro de nuestra propia máquina virtual.

Sin embargo, estos mecanismos no proporcionan una solución rápida o fácilmente automatizable en entornos que así lo requieran. Por ello, desde Docker no están haciendo evolucionar la plataforma únicamente en el área de su motor y cliente, sino que también hay una serie de proyectos satélites que buscan completarla proporcionando las herramientas de orquestación y automatización necesarias.

A finales de febrero, liberaron la primera versión beta de tres de ellas: Swarm, Compose y Machine.

  • Machine: el objetivo de esta herramienta es facilitar el despliegue del motor de Docker a través de un solo comando en tu ordenador, en tu propio datacenter o en un proveedor de cloud como Azure.
  • Compose: facilita el despliegue de aplicaciones distribuidas construidas sobre una solución basada en múltiples contenedores.
  • Swarm: es la solución de clusterización para contenedores de Docker. Permite unificar diferentes motores de Docker como un único host virtual y desplegar en él tus soluciones. Lo mejor es que se puede gestionar desde otras herramientas de forma transparente como el propio cliente de Docker, Compose, Jenkins, etc.

El artículo de hoy está enfocado a mostrar cómo hacer uso de Machine para desplegar nuestras hosts en Azure.

Plataformas soportadas

A día de hoy, Docker Machine está soportado tanto en Windows, OSX como Linux. Hay dos formas de completar la instalación en nuestro equipo: a partir de la compilación del código fuente o utilizando los binarios directamente. Por comodidad, utilizaremos esta segunda opción.

Los enlaces para la descarga son los siguientes:

Una vez descargado, puedes comprobar que funciona correctamente consultando la versión del programa con el siguiente comando:

$ docker-machine -v
machine version 0.1.0
Consulta versión Docker Machine
Consulta versión Docker Machine

Nota: todo el ejemplo lo realizaré desde una máquina virtual con Ubuntu desplegada en Azure. A día de hoy, aunque el cliente de Machine está soportado en Windows, existe algún tipo de bug en la versión beta que impide trabajar correctamente con Azure

Configuración previa

Para que el cliente de Machine se pueda conectar a nuestra suscripción de Azure y crear los recursos necesarios para el despliegue, es necesario que se autentique de alguna manera. El procedimiento escogido es utilizando una autenticación basada en certificados.

En primer lugar, en nuestra máquina con Linux, necesitaremos proceder a crear el certificado:

$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout AzureManagementCert.pem -out AzureManagementCert.pem
$ openssl pkcs12 -export -out AzureManagementCert.pfx -in AzureManagementCert.pem -name "Docker Machine Certificate"
$ openssl x509 -inform pem -in AzureManagementCert.pem -outform der -out AzureManagementCert.cer

En el primer comando podemos completar la información que nos solicita o dejar los campos en blanco según deseemos. El resto, lo único que generará es el certificado necesario para subirlo a Azure y el otro para utilizarlo en nuestro proceso de autenticación.

Para subir nuestro certificado será necesario que accedamos a nuestro portal de Azure, vayamos a Settings y dentro de la pantalla seleccionemos la pestaña de Management Certificates. En la parte inferior nos saldrá la opción de Upload y tras ello, seleccionaremos nuestro fichero .cer

Subir certificado de gestión a Azure
Subir certificado de gestión a Azure

Desplegando nuestro primer host de Docker

Una vez completado los pasos anteriores estaremos preparados para trabajar con Machine. Esta utilidad no está enfocada únicamente a Azure sino que permite desplegar tus host a diferentes plataformas. Esta versatilidad se logra gracias a lo que denominamos drivers; existen drivers para Azure, para Hyper-V, para AWS, para VMware, etc.

Para crear nuestro primer host de Docker únicamente será necesario invocar al programa con el comando create, el driver que queremos utilizar y los parámetros mínimos necesarios. En el caso de Azure sería lo siguiente:

$ docker-machine create -d azure --azure-subscription-id="Subscription_ID" --azure-subscription-cert="AzureManagementCert.pem" Your_Cloud_Service_Name

Nuestro identificador de la suscripción lo podemos encontrar accediendo a nuestro portal de Azure, yendo a Settings y dentro de la pantalla seleccionemos la pestaña de Subscriptions. En una de las columnas del listado podremos encontrar el identificador asociado a nuestra suscripción. Completando los pasos anteriores tendremos un resultado como el siguiente:

Desplegando host de Docker en Azure
Desplegando host de Docker en Azure

Nuestro host ya estará desplegado utilizando la configuración por defecto del driver de Azure. En el caso de que nos queramos conectar a él, Machine facilita el trabajo ayudándonos a fijar las variables de entorno necesarias. Para ello, ejecutamos lo siguiente:

$ docker-machine env Your_Cloud_Service_Name
Fijando las variables de entorno con Docker Machine
Fijando las variables de entorno con Docker Machine

De esta manera, tendremos configuradas las variables de entorno necesarias para lanzar nuestros comandos desde la consola sin necesidad de especificar la dirección del host o habilitar la conexión usando TLS.

Conexión a nuestro host de Docker recién desplegado
Conexión a nuestro host de Docker recién desplegado

Si creamos más de un host, podemos consultar los que tenemos disponibles con el siguiente comando:

$ docker-machine ls
Mostrando los hosts de Docker disponibles
Mostrando los hosts de Docker disponibles

Parámetros del driver de Azure

Si queremos personalizar el proceso de creación de nuestro host de Docker especificando parámetros como en qué región queremos desplegarlo, qué red, qué subred, qué usuario, etc. necesitaremos hacer uso de los parámetros que acompañan al driver de Azure. Cada driver tiene los suyos propios característicos de la plataforma; por ejemplo, en el de Hyper-V se especifica a qué switch virtual queremos que se conecte, algo que en el de Azure no tiene sentido.

  • Azure Docker Port.
    • Nombre: azure-docker-port
    • Valor por defecto: 2376
  • Nombre de la imagen.
    • Nombre: azure-image
    • Variable de entorno: AZURE_IMAGE
    • Valor por defecto: Ubuntu 14.04 LTS x64 (b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20140927-en-us-30GB)
  • Tamaño.
    • Nombre: azure-size
    • Variable de entorno: AZURE_SIZE
    • Valor por defecto: Small
  • Región.
    • Nombre: azure-location
    • Variable de entorno: AZURE_LOCATION
    • Valor por defecto: West US
  • User Password.
    • Nombre: azure-password
  • Nombre de usuario.
    • Nombre: azure-username
    • Valor por defecto: ubuntu
  • Puerto SSH.
    • Nombre: azure-ssh-port
    • Valor por defecto: 22
  • Fichero “Publish Settings”.
    • Nombre: azure-publish-settings-file
    • Variable de entorno: AZURE_PUBLISH_SETTINGS_FILE
  • Región.
    • Nombre: azure-location
    • Variable de entorno: AZURE_LOCATION
    • Valor por defecto: West US
  • Certificado de gestión de Azure.
    • Nombre: azure-subscription-cert
    • Variable de entorno: AZURE_SUBSCRIPTION_CERT
    • Valor por defecto: West US
  • Identificador de suscripción.
    • Nombre: azure-subscription-id
    • Variable de entorno:AZURE_SUBSCRIPTION_ID

Leave a Reply

Your email address will not be published. Required fields are marked *