En este artículo vamos a hablar de Docker, una tecnología de virtualización que ha sido incorporada en la última versión de los NAS de Synology y que nos va a dar muchísimo juego, sobre todo si somos desarrolladores Web y trabajamos con WordPress.
Docker nos va a permitir empaquetar una aplicación y/o sistema operativo con todas sus dependencias en una unidad estándar para el desarrollo de software. Seguramente ahora mismo esta afirmación os suena a chino pero cuando terminéis de leer este artículo todas vuestras dudas sobre Docker habrán sido despejadas.
La ventana principal de Docker
Una vez que instalamos la aplicación de Docker en nuestro NAS de Synology, usando el Centro de Paquetes, y la ejecutamos lo primero que vemos es la pestaña Visión general (1) en la que apreciaremos el Uso de CPU (2) y el Uso de RAM (3) de nuestro NAS Synology.
Hay que tener en cuenta que la virtualización de aplicaciones consume recursos físicos por lo que cuantas más tengamos en ejecución, menos CPU y RAM dispondremos para las aplicaciones nativas del NAS. Por último veremos los contenedores (4) que tenemos en funcionamiento. No nos preocuparemos ahora de ese termino puesto que más adelante hablaremos de él en profundidad.
El Registro
La pestaña Registro (1) de Docker es una de las más importantes puesto que a través de ella podremos localizar en el repositorio Docker Hub la aplicación que queremos virtualizar. Para ello, simplemente tendremos que escribir en la caja de texto (2) el nombre de la aplicación que queremos descargar.
Es muy importante saber que dentro de Docker Hub existen aplicaciones de dos tipos: las oficiales que provienen de desarrolladores de renombre y organizaciones conocidas y que están identificadas por un logotipo oficial (3). Luego hay muchas aplicaciones de desarrolladores independientes que tal vez no funcionen como es debido. Yo os recomiendo que siempre busquéis y descarguéis las del primer tipo.
Para descargar una Imagen (más adelante explicaremos este concepto) hacéis click con el botón derecho sobre la misma y elegís la opción Descargar esta imagen (4). También podéis consultar la página de la ayuda de dicha aplicación en Abrir página de Docker Hub.
Para nuestro ejemplo de montar una Web de pruebas en WordPress usando Docker, necesitamos descargar dos imágenes oficiales, la de mysql que contendrá la base de datos de nuestra web y la propia de WordPress repitiendo los pasos del 1 al 4.
El concepto de Imagen
Cada una de las aplicaciones que vamos a instalar en Docker provienen de lo que en esta tecnología se denomina Imagen (1). Una imagen es un archivo comprimido que contiene todos los archivos necesarios para ejecutar con éxito la aplicación mediante la creación de un Contenedor (lo veremos más adelante).
Una vez que hemos puesto a descargar las imágenes y se ha completado su descarga, el icono (2) se pone azul y muestra el tamaño en megas del archivo de imagen en nuestro disco duro del NAS. La siguiente pantalla muestra una serie de imágenes descargadas pero las flechas indican las que necesitamos para crear nuestro laboratorio de WordPress.
Ahora pasaremos a crear los contenedores de cada una de ellas, empezando por el de mysql. Esto es así debido a que como veréis a continuación, el contenedor de WordPress va a depender de éste. Para crear un contenedor pulsamos con el botón derecho del ratón sobre la imagen Docker deseada y elegimos la opción del menú Iniciar con asistente (3). También es posible hacerlo de forma más avanzada usando la opción Iniciar con Docker Run pero esto no lo contemplaremos en el artículo.
Creando el contenedor de mysql de Docker
Si hemos ejecutado correctamente el paso anterior, nos va a aparecer una ventana tipo asistente en la que tendremos que ir paso a paso completando una serie de datos que veremos en este apartado. Un Contenedor va a ser un recipiente donde se descomprimirán los ficheros de imagen y que podrá ser accedido mediante una URL. Hemos de tener en cuenta que podremos crear todos los contenedores que queramos partiendo de un único fichero de imagen.
La siguiente imagen muestra el Paso 1 del asistente de Docker donde tendremos que completar el Nombre del contenedor (1), en nuestro caso hemos elegido mysql-test. Respecto a los puertos locales y del contenedor (2) no es necesario que los rellenemos en este caso puesto que no nos van a hacer falta. Hecho esto pulsaremos sobre el botón Siguiente.
En el Paso 2 es muy importante ya que tenemos que seleccionar el check Habilitar la limitacion de recursos (1) y después en la Prioridad de CPU elegir la opción Alta (2). Si no hacemos esto así, cuando intentemos iniciar el contenedor de WordPress, es probable que nos aparezca el error [mpm_prefork:notice] [pid 23417] AH00169: caught SIGTERM, shutting down
y se nos va a caer dicho contenedor. Pulsamos el botón Siguiente para continuar con el asistente.
En la pantalla siguiente veremos un Resumen con los valores (1) que hemos ido introduciendo. En este caso, lo más interesante es el botón Configuración avanzada (2) que nos permitirá realizar cambios para el correcto funcionamiento del contenedor, por lo que haremos click sobre él.
En la configuración avanzada del contenedor Docker, seleccionaremos la pestaña Medio ambiente (1) en la que podremos configurar las variables de entorno que va a tener nuestro contenedor. Lo primero que tenemos que hacer es marcar la opción Utilizando ejecutar contenedor con altos privilegios (2) y posteriormente pulsar sobre el botón más (3) para añadir la variable de entorno (4) MYSQL_ROOT_PASSWORD
que contendrá la clave del usuario root de la base de datos mysql-test que estamos creando. En nuestro caso hemos elegido MiPassword1
pero podéis establecer cualquier clave siempre que os acordéis para posteriormente usarla en el contenedor de WordPress.
Una vez hecho esto pulsáis sobre el botón OK y después sobre el botón Aplicar para que el contenedor sea creado. Más adelante veremos como iniciar el contenedor pero antes procederemos a crear el contenedor de WordPress.
Creando el contenedor de WordPress de Docker
El contenedor de WordPress va a alojar todos nuestros ficheros de la web, tal y como si de una web «normal» se tratase. Los pasos a realizar son muy similares a los realizados para el contenedor de mysql, con lo que tenemos que Iniciar desde asistente sobre la imagen de WordPress.
En el Paso 1 estableceremos el Nombre del contenedor (1) pero incluiremos una novedad respecto a los puertos local y del contenedor (2). El puerto local (en nuestro caso 8080) es el puerto usado por nuestro NAS mientras que el puerto del contenedor (en nuestro caso el 80) es el que va a usar dicho contenedor de forma interna.
Para simplificar, se trata de establecer una redirección de puertos de forma que toda petición que entre por el puerto 8080 del NAS lo mandará al puerto 80 del contenedor, el cual tendrá un servidor web apache escuchando. Una vez establecidos ambos puertos, pulsaremos sobre el botón Siguiente.
En el Paso 2 actuaremos igual que en el contenedor de mysql, en lo que a Prioridad de CPU (1) se refiere, pero en este momento daremos un paso más y configuraremos la opción Crear acceso directo en el escritorio (2) de forma que tengamos un enlace a la web de pruebas de WordPress.
Si observamos la imagen la opción seleccionada es Página web (3) en lugar de Página de estado. De esta forma al hacer click sobre el acceso directo del escritorio nos abrirá una nueva ventana del navegador en la que podremos ver nuestra página web de pruebas en WordPress.
En nuestro caso hemos elegido como URL la IP local del NAS seguida del puerto 8080 que configuramos en el paso anterior, pero podríamos haber elegido el nombre de dominio DDNS que nos proporciona gratuitamente Synology. Una vez completados los datos de la pantalla, pulsaremos sobre el botón Siguiente.
En la pantalla de Resumen veremos los datos (1) que hemos configurado con el asistente de creación del contenedor. Pulsaremos sobre el botón Configuración avanzada (2) para cambiar los parámetros clave que harán que nuestro contenedor funcione correctamente.
En la pestaña Links (1) del asistente de Docker, estableceremos el vínculo con el contenedor de base de datos mysql de forma que WordPress se pueda «comunicar» con éste. Para ello pulsaremos el botón más (2) y en Nombre del contenedor (3) nos aparecerá un desplegable en el que podremos elegir mysql.
Si este paso no se realiza, no existirá comunicación de nuestra web con la base de datos. Acto seguido estableceremos un alias para este Link y después pulsaremos el botón OK.
La última cosa a tener en cuenta a la hora de crear el contenedor de WordPress en Docker son las variables de entorno para el mismo. En la pestaña Medio ambiente (1) hemos de marcar la opción Utilizando ejecutar contenedor con altos privilegios (2) y después en las Variables del entorno (3) añadiremos tres variables con sus respectivos valores, tal y como lo hicimos al crear el contenedor de mysql. Estas son:
WORDPRESS_DB_NAME
con la que estableceremos el nombre de la base de datos que usará nuestra web de WordPress dentro de mysql. En nuestro caso se llamará wordpress-pruebaWORDPRESS_DB_PASSWORD
La password ha de coincidir con la password del usuario root del contenedor mysql. Si no nos acordamos podemos mirar su valor en las propiedades del contenedor mysql.WORDPRESS_DB_USER
el usuario de la base de datos con el que vamos a acceder. En nuestro caso hemos elegido el usuario root del contenedor mysql
Cuando terminemos de configurar las variables de entorno pulsaremos el botón OK.
Iniciando los contenedores
Una vez que ya tenemos creados los dos contenedores, en la pestaña Contenedor (1) podremos ver que están apagados por defecto. Primero pulsaremos el botón del contenedor mysql-test (2) y después el del contenedor WordPress-pruebas (3). Al iniciar los contenedores, se muestra la información (4) de la CPU y memoria RAM que está consumiendo cada uno de ellos.
Si todo está correcto, podremos pulsar el acceso directo al contenedor Docker que se ha creado en el escritorio del NAS o bien escribir directamente la URL en el navegador para mostrar la pantalla de instalación de la página de WordPress de pruebas como se puede ver en la siguiente imagen. Lo único que nos quedaría es terminar el proceso de instalación y configuración de la web WordPress, pero esto se escapa del alcance de este artículo.
Conclusiones
Como habéis podido comprobar, Docker nos va a resultar muy útil si somos desarrolladores de WordPress y tenemos que montar un sitio web para pruebas de un cliente o bien para nosotros mismos. Siempre es bueno no tocar nuestra web principal y tener un sitio alternativo donde probar todos esos temas y plugins que nos llaman la atención pero que no sabemos si los vamos a necesitar o no. Si os habéis quedado con alguna duda o necesitáis más información del entorno Docker podéis contactar conmigo y gustoso os echaré una mano. Nos leemos en el próximo!
Adiós, os!