Hoy día quizá escuches frecuentemente términos como Devops, Virtualización y por supuesto Cloud. En las siguientes lineas hablaremos sobre ellas y además para hacer la cosa más divertida presentar una aplicación real de todos estos conceptos.
Por ultimo podemos acceder desde nuestro navegador a la dirección ip de nuestro contenedor, realizar la instalación del CMS Wordpress y comenzar a trabajar.
Adicionalmente una de las herramientas indispensables para administrar y gestionar Wordpress es PhpMyAdmin. Para instalarlo podemos proceder de dos formas distintas.
Virtualización es un concepto muy amplio y tiene diferentes aplicaciones según el nivel donde se dé, ya hemos hablado en otra ocasión de Copicloud, donde la virtualización llega al extremo, convirtiéndose en un “cloud”.
Hoy nos centraremos en otro nivel de virtualización, destinado tanto a desarrolladores como a administradores de sistemas, es por ello que os presento la herramienta Docker.
Por ser actualmente una de las herramientas preferidas en el mundillo Devops.
Estos contenedores agrupan todo lo necesario para que pueda funcionar el software, código, herramientas, bibliotecas de sistema, configuraciones, tuning, esquema de permisos. etc.
Además tiene una interfaz simple para crear, ejecutar y compartir los contenedores de software.
He de decir que Docker no es la única alternativa para realizar este tipo de virtualización, existen otras formas como jaulas, LXC, BSD, vServers, OpenVZ. Aunque sí es cierto que Docker es una de las alternativas favoritas.
Los comandos básicos se pueden resumir en los siguientes:
Dockerfile es un manifiesto donde especificas las características de tu imagen, software adicional que quieres que tenga instalado, librerías, servicios y configuraciones. El formato de este documento tiene siempre la misma estructura:
Para aprender más acerca de como redactar tu Dockefile, recomiendo que acudas nuevamente a la documentación oficial.
Para no estar andando siempre con la terminal, existen varias aplicaciones de escritorio con interfaz gráfica, que facilita la gestión de contenedores y imágenes.
Para Windows y Macs contamos con Kitematic, aplicación muy intuitiva de usar y que cuenta con un explorador de imágenes de DockerHub.
Podemos ver en el entorno gráfico Kitematic que efectivamente tenemos arrancados ambos contenedores.
Hoy nos centraremos en otro nivel de virtualización, destinado tanto a desarrolladores como a administradores de sistemas, es por ello que os presento la herramienta Docker.
Por ser actualmente una de las herramientas preferidas en el mundillo Devops.
¿ Que es Devops ?
"DevOps, es una respuesta a la interdependencia del desarrollo de software y las operaciones IT."
Devops define una metodología de creación de software, así como una forma de integración entre desarrolladores y administradores de sistemas, para conseguir la creación y puesta en explotación de software de una forma más rápida, con unos mayores estándares de calidad, menor coste y permitiendo una frecuencia más alta de puestas en producción para las nuevas versiones.
Es un termino bastante confuso y en la red tratan de definirlo de múltiples formas, incluso desde el enfoque opuesto ¿qué no es Devops?
Devops define una metodología de creación de software, así como una forma de integración entre desarrolladores y administradores de sistemas, para conseguir la creación y puesta en explotación de software de una forma más rápida, con unos mayores estándares de calidad, menor coste y permitiendo una frecuencia más alta de puestas en producción para las nuevas versiones.
Es un termino bastante confuso y en la red tratan de definirlo de múltiples formas, incluso desde el enfoque opuesto ¿qué no es Devops?
La magia de Docker
Una de las herramientas de moda que permite dinamizar la interdependencia entre desarrollo y sistemas, es Docker, una solución de virtualización ligera, para crear contenedores de software.Estos contenedores agrupan todo lo necesario para que pueda funcionar el software, código, herramientas, bibliotecas de sistema, configuraciones, tuning, esquema de permisos. etc.
Además tiene una interfaz simple para crear, ejecutar y compartir los contenedores de software.
Virtualización ligera ¿Que es eso?
Cuando hablamos de máquinas virtuales seguro que se te suenan herramientas como VirtualBox, o VMware, dada su gran popularidad, así como otras alternativas como QEMU o Microsoft Hyper-V también muy extendidas, este tipo de soluciones se denomina Hipervisores.
El hypervisor emula el hardware subyacente y permite que los diferentes sistemas operativos que se instalan en él piensen que son propietarios únicos del sistema, dentro de este mega paquete hacemos correr todos los servicios para que nuestra aplicación pueda funcionar así como otros servicios innatos al sistema operativo virtual (consumiendo recursos).
La filosofía de Docker al contrario que la anterior, trata de dividir en capas la aplicación y crear contenedores específicos para cada parte de la aplicación o servicio, por ejemplo si pensamos en una aplicación web, SPA, "Single-page application" podemos diferenciar claramente, una parte de programación en el servidor o backend, una parte de programación en el cliente o frontend, así como un almacenamiento, base de datos o ficheros estáticos, con esta filosofía creamos contenedores independientes y hacemos que se conozcan y hablen entre sí.
Además los contenedores comparten el mismo sistema operativo, son muy rápidos de desplegar, consumen menos recursos que las VMs completas y además se pueden compartir de forma mucho más cómoda, su tamaño es muy reducido, orden de megabytes, mientras que las VMs, tienen orden de gigabytes.
El hypervisor emula el hardware subyacente y permite que los diferentes sistemas operativos que se instalan en él piensen que son propietarios únicos del sistema, dentro de este mega paquete hacemos correr todos los servicios para que nuestra aplicación pueda funcionar así como otros servicios innatos al sistema operativo virtual (consumiendo recursos).
La filosofía de Docker al contrario que la anterior, trata de dividir en capas la aplicación y crear contenedores específicos para cada parte de la aplicación o servicio, por ejemplo si pensamos en una aplicación web, SPA, "Single-page application" podemos diferenciar claramente, una parte de programación en el servidor o backend, una parte de programación en el cliente o frontend, así como un almacenamiento, base de datos o ficheros estáticos, con esta filosofía creamos contenedores independientes y hacemos que se conozcan y hablen entre sí.
Además los contenedores comparten el mismo sistema operativo, son muy rápidos de desplegar, consumen menos recursos que las VMs completas y además se pueden compartir de forma mucho más cómoda, su tamaño es muy reducido, orden de megabytes, mientras que las VMs, tienen orden de gigabytes.
He de decir que Docker no es la única alternativa para realizar este tipo de virtualización, existen otras formas como jaulas, LXC, BSD, vServers, OpenVZ. Aunque sí es cierto que Docker es una de las alternativas favoritas.
¿Como instalar Docker ?
Estimado lector, siento comunicarte que mi intención no es hacer un paso a paso para instalar y configurar Docker, puesto que no conozco tú máquina. Decirte que esta herramienta está pensada para ejecutarse sobre máquinas Linux y no funciona de forma nativa en Windows o Mac OSX, pero no te asustes, ya que existen paquetes ejecutables que haciendo uso de VirtualBox instalan una base Linux perfecta para que puedas correr tus contenedores Docker en las plataformas Windows y Macs.
Proveedores Cloud famosos como Amazon Web Services (AWS) o Digital Ocean, también hacen esfuerzos en la Docketización de las aplicaciones que alojamos, proporcionándonos plugins para facilitarnos la vida.
Te recomiendo que te pases por la sección “Install Docker Engine” de la página oficial.
Te recomiendo que te pases por la sección “Install Docker Engine” de la página oficial.
DockerHub, el repositorio de imágenes
Te preguntaras donde encontrar imágenes Docker, para crear tus primeros contenedores.
Pues existe un directorio público llamado DockerHub que contiene todo tipo de imágenes personalizadas, para multitud de tipos de proyectos, desde contenedores con los servicios mínimos para ejecutar aplicaciones web, PHP o Django, bases de datos en MySql o Postgres, pasando por NodeJS o aplicaciones más complejas como Wordpress, OwnCloud, etc.
Como curiosidad para los jugones, existen contenedores para crear servidores de Minecraft o Counter Strike.
Pues existe un directorio público llamado DockerHub que contiene todo tipo de imágenes personalizadas, para multitud de tipos de proyectos, desde contenedores con los servicios mínimos para ejecutar aplicaciones web, PHP o Django, bases de datos en MySql o Postgres, pasando por NodeJS o aplicaciones más complejas como Wordpress, OwnCloud, etc.
Como curiosidad para los jugones, existen contenedores para crear servidores de Minecraft o Counter Strike.
La consola de Docker
Existen multitud de comandos para manejar a nuestra merced las imágenes y contenedores, no es interesante entrar en detalle, puesto que disponemos de una buena documentación que siempre podemos consultar o el comando docker help.Los comandos básicos se pueden resumir en los siguientes:
Personalizar mi imagen, el Dockerfile
Seguro que llegado a este punto estará pensando, ¿como creo mi imagen personalizada?. Pues muy fácil, existen diferentes métodos pero lo más usual es usar Dockerfile.Dockerfile es un manifiesto donde especificas las características de tu imagen, software adicional que quieres que tenga instalado, librerías, servicios y configuraciones. El formato de este documento tiene siempre la misma estructura:
Para aprender más acerca de como redactar tu Dockefile, recomiendo que acudas nuevamente a la documentación oficial.
Trabajar con varios contenedores
La filosófica de Docker trata de separar las capas de nuestras aplicación en diferentes contenedores.
Por tanto para una aplicación simple es fácil contar con varios contenedores, y administrarlos de forma independiente puede ser complejo.
Para ello contamos con docker-composer, que trata de unificar las tareas de administración de los diferentes contenedores en un solo manifiesto, docker-composer.yml.
En este manifiesto, declaramos todos los contenedores que necesarios para que la aplicación pueda funcionar, junto con sus relaciones y dependencias.
En la última sección propongo un ejemplo de uso para docker-composer.
No soy amigo de la consola
Si no te llevas bien con la consola de comandos, no te asustes, existen aplicaciones que te hacen más amena tu interacción con los contenedores Docker.Para no estar andando siempre con la terminal, existen varias aplicaciones de escritorio con interfaz gráfica, que facilita la gestión de contenedores y imágenes.
Para Windows y Macs contamos con Kitematic, aplicación muy intuitiva de usar y que cuenta con un explorador de imágenes de DockerHub.
Un ejemplo practico
Para finalizar vamos a ver algunos ejemplos interesantes de como instalar varias aplicaciones haciendo uso de contenedores Docker.Instalar Wordpress CMS
Un buen ejemplo es instalar Wordpress CMS, haciendo uso de dos contenedores, uno para la aplicación y otro para la base de datos. Usamos exclusivamente imágenes prefabricadas y disponibles en DockerHub.Podemos ver en el entorno gráfico Kitematic que efectivamente tenemos arrancados ambos contenedores.
Por ultimo podemos acceder desde nuestro navegador a la dirección ip de nuestro contenedor, realizar la instalación del CMS Wordpress y comenzar a trabajar.
- Personalizar un Dockerfile, para tener una imagen con los servicios propios tanto de MySQL como PhpMyAdmin.
- Agregar un nuevo contenedor con los servicios exclusivos de PhpMyAdmin y linkearlo con el contenedor MySql.
Instalar Django Framework
En otro ejemplo montamos de forma simple una máquina de desarrollo para el framework web Django, esta vez creamos nuestra propia imagen, partiendo de un Dockerfile y para orquestar las máquinas hacemos uso de Docker Composer.
- Primer Paso: Escribir Dockerfile para construir la maquina de desarrollo Django.
- Segundo Paso: Declarar dependencias pip, en requierement.
- Tercer Paso: Escribir docker-composer, para crear todos los contenedores y enlazarlos.
Como vemos las variables de entorno las almacenamos en un fichero independiente "development.env".
Un ejemplo de dicho fichero es el siguiente.
- Cuarto Paso: Iniciar la aplicación Django.
docker-compose run web django-admin.py startproject ejemplo. - Quinto Paso: Configurar base de datos en la configuración de la aplicación, haciendo uso de la variables de entorno definidas anteriormente.
- Sexto paso: Ejecutar contenedor y aplicación.
Conclusión
Espero que te haya parecido interesante esta herramienta y te animes a empezar a usarlo en tus próximos proyectos, estaríamos encantados de conocer tu experiencia con Docker.
Si te ha gustado y crees que puede ser útil para otros lectores, no dudes en compartirlo en las redes sociales ;-)
No hay comentarios:
Publicar un comentario