Aprovechando el análisis del NAS QNAP TVS-672X vamos a efectuar el tutorial más completo posible sobre Docker, la solución de virtualización ligera junto a Container Station de QNAP y Portainer para su sistema operativo QTS.
Con Docker podremos virtualizar aplicaciones y utilizarlas de forma aislada y única sin necesidad de arrancar máquinas virtuales, para darle aún más utilidad y posibilidades a nuestro NAS en entornos de productividad o domésticos. Pondremos algunos ejemplos de instalación, y usaremos una funcionalidad extra como Portainer que añade más versatilidad y opciones de configuración.
Índice de contenidos
Qué es Docker y para qué sirve
Docker es una solución de virtualización ligera de aplicaciones y sistemas operativos basados en Linux. A diferencia de los mecanismos tan conocidos como VMWare o Microsoft Hyper-V, esta utilidad ofrece un enfoque distinto, denominándose virtualización ligera al poder crear contenedores individuales únicos para aplicaciones sin tener que usar una máquina virtual propiamente dicha.
Docker será el encargado de proporcionarnos las herramientas y medios para crear dichos contenedores, cada uno de ellos único y albergando una aplicación que funcionará tal y como lo haría instalada en un sistema operativo. En la virtualización ligera se utilizan los recursos disponibles en la propia máquina, y todos los contenedores correrán sobre una misma instancia en el sistema operativo anfitrión, en este caso QTS.
¿Cuáles son entonces las ventajas? Pues principalmente las siguientes:
- No necesitaremos arrancar y mantener múltiples máquinas virtuales, necesitando menos recursos y simplificando la administración.
- Al ser una imagen única, las aplicaciones estarán aisladas para poder migrarlas a cualquier plataforma compatible.
- Poder ejecutar múltiples contenedores aislados al mismo tiempo en QTS bajo una misma interfaz de administración centralizada como es el caso de Container Station o Portainer.
- Implementación rápida y sencilla, a través de interfaz gráfica, desde red o remota mediante SSH.
- Posibilidad de reutilizar componentes, hacer copias de seguridad de cada imagen o incluso duplicarlas.
- Completo ecosistema de herramientas en ampliación para aumentar las posibilidades de Docker
- Posibilidad de colocarlas tras redes virtuales, adaptadores de red virtuales, u otros contenedores con firewall para mejorar la seguridad.
- Administración flexible utilizando interfaz gráfica o terminal en línea de comandos.
- Posibilidad de configurar permisos de usuario para acceder a carpetas compartidas del NAS y los datos de otros contenedores.
Container Station será la aplicación desde la cual gestionar nuestros contenedores mediante interfaz gráfica. También integra soporte para LXC/LXD al menos hasta las versiones inferiores a la 3.0, un sistema de contenedores esta vez para albergar operativos basados en Linux. No es una solución tan potente como Portainer, otro gestor de contenedores que veremos aquí. Tampoco se parece mucho a VMware o similares, así que está pensado para sistemas ligeros donde poder correr múltiples aplicaciones virtualizadas e interactuar a través de red.
Un factor muy importante a tener en cuenta es que Container Station dejará de tener soporte con LXC a partir de la versión 3.0 en QNAP, pasando a ser una solución independiente
Tutorial de instalación de Container Station y Docker en NAS QNAP
Una vez sabemos qué podremos hacer con Docket, es el momento de explicar los pasos a seguir para instalar y configurar la solución de virtualización en nuestro NAS QNAP. Para ello utilizaremos el QNAP TVS-672X un NAS de alta gama con procesador Intel Core i3 8100T, 8 GB de memoria RAM y 6 bahías SATA + 2 ranuras M.2 NVMe.
Este NAS está bastante enfocado en este tipo de tareas de virtualización ligera al tener compatibilidad con QTS y QuTS hero y su sistema ZFS, así como un gran espacio y potencia para correr servidores y aplicaciones simultáneamente a través de la red. Además, cuenta con puerto HDMI, transcodificación en tiempo real, triple interfaz de red con enlace a 10 Gbps y puertos USB de 10 Gbps.
Pasos previos y preparación del NAS
La instalación de Docker la llevaremos a cabo sobre QTS 5.0.0 en su última versión disponible, en el cual podremos utilizar un solo disco o varios en RAID.
El primer requisito necesario que debemos cumplir para instalar Docker es tener ya hecho un espacio de almacenamiento y un volumen de almacenamiento. Este paso siempre es obligatorio para trabajar con el NAS, así que nos iremos al centro de almacenamiento e instantáneas, y pulsaremos sobre “Nuevo volumen de almacenamiento”. Seguiremos los pasos habituales y explicados para crear dicho volumen y así poder trabajar con carpetas y datos.
Otro paso opcional será el de activar el servicio SSH en el NAS para poder conectarnos al dispositivo remotamente de forma segura. Ya decimos que no es algo necesario, salvo que queramos utilizar la herramienta Portainer a la que también daremos un repaso en este tutorial.
Para activar SSH nos iremos al Panel de control > Servicio de red y de archivos > Telnet / SSH. Activaremos la opción Permitir conexión SSD, asignándole un puerto o manteniendo el de por efecto.
Instalar Docker
Llega el momento de instalar Docker, solución que vendrá integrada en la aplicación Container Station disponible en el App Center de QNAP dentro de QTS, o bien en la página oficial.
Cuando abrimos la aplicación por primera vez debemos configurar el directorio donde se crearán los contenedores virtuales. Nosotros mantendremos la ruta por defecto /Container, que se situará en el directorio raíz de nuevo volumen de almacenamiento.
La interfaz la iremos viendo poco a poco durante el tutorial, y principalmente el apartado que nos interesa será el de creación de contenedores. La información se presenta mediante una lista de aplicaciones/sistemas dividida en distintas secciones en función en ámbito de operación, por ejemplo; IoT, AI, Local, etc.
En realidad, lo importante es que arriba tenemos un buscador en el cual escribiremos la aplicación que deseamos virtualizar, y automáticamente buscará en su inmensa biblioteca para ver si hay coincidencias. Hay una infinidad de aplicaciones disponibles, entre ellas servidores webs como WordPress, bases de datos como MongoDB, CentOS, etc. Por ahora tenemos un apartado dedicado a imágenes LXD, aunque a partir de la versión 3.0 ya no estará disponible.
El primer ejemplo que vamos a poner es la instalación de un Docker LibreOffice, el cual es básicamente la suite de aplicaciones de Office y Firefox contenidas en un sistema Ubuntu Desktop. Dispondremos de una descripción indicándonos que admite VNC (Virtual Network Computing) y control directo local si conectamos un monitor al NAS.
El apartado de Preferences lo utilizaremos para configurar las opciones generales de Container Station, por ejemplo, las relativas a interfaces de red virtuales para acceso a los contenedores, registro o repositorio. Incluso podremos descargarnos un certificado para añadir seguridad en el acceso por red a los contenedores, utilizando myQNAPcloud o cualquier otro que tengamos.
Crear contenedor Docker en NAS QNAP
Así que pulsaremos sobre Install, lo que abrirá un pequeño asistente donde se nos pedirá el nombre de la instancia, configuración de recursos de hardware y opciones adicionales como la configuración de red para su control remoto. En realidad, lo podremos dejar todo por defecto, y automáticamente se le asignará un puerto TCP para el acceso.
En la esquina superior derecha podremos ver el proceso de descarga e instalación del contenedor cual aplicación se instala en un sistema.
Una vez instalado, se habrá creado un contenedor asociado a la instancia, la cual se mostrará en el apartado de Overview con el consumo de recursos en tiempo real. El cubo en color verde significa que la aplicación está corriendo, y desde los botones en su extremo podremos interactuar con ella.
Como hemos enunciado arriba, Docker admite importación y exportación de contenedores para duplicar o mover las instancias fácilmente. La sección de Logs nos muestra todos los acontecimientos producidos en el contenedor, accesos, instalación o problemas.
En el apartado de recursos, sección Images encontramos las imágenes que Docker ha descargado para crear los contenedores. De esta forma podremos crear nuevos elementos sin necesidad de volver a descargarla, exportarla o ponerla en el registro.
El apartado más interesante será el de Container, donde accederemos nuevamente a las opciones de configuración avanzada del contenedor. Por lo demás, cada instancia dispondrá de un terminal propio con el cual trabajar a nivel avanzado en sus opciones internas, siendo esto interesante para instancias como WordPress, Joomla, Ubuntu o cualquier otra que necesite intervención de administradores.
El terminal siempre ha sido un componente básico en aplicaciones open source y Linux. La forma de acceso será tocar en la opción Terminal, con la consiguiente creación de una nueva ventana en el navegador para acceder a dicho terminal. Un ejemplo podría ser añadir un usuario y contraseña a una instancia de Ubuntu virtual.
Para utilizar el contenedor Docker solo debemos pulsar en el enlace de este mismo apartado, y si ya lo conocemos, colocaremos la IP del NAS con el puerto asociado al contenedor para acceder a él.
En caso de que tengamos un dominio para el acceso local o remoto a través de myQNAPcloud y alguna otra DDNS, podremos utilizarlo de la misma forma en la que lo hacemos para entrar al NAS. Siempre activando en el router los puertos correspondientes para el acceso. Con las opciones antes vistas, podremos utilizar certificados para conexiones seguras y HTTPS.
El procedimiento se repetirá en todos los contenedores que pretendamos crear, por ejemplo, podemos crear un contenedor para un servidor web WordPress y así montar nuestro propio blog.
Nuevamente iríamos al apartado de Create, buscaríamos WordPress y lo instalaríamos. Este bloque ya vendrá asociado a otros sub-contenedores si son necesarios, como la base de datos mariadb sobre la que trabaja el servidor.
Para ilustrar un poco más la prueba, también hemos instalado un contenedor Ubuntu Desktop, aprovechando la todavía compatibilidad con LXD de la versión sobre la que trabajamos. El funcionamiento es exactamente el mismo, con acceso web y terminal de comandos para efectuar modificaciones.
Gestión Docker con Portainer
Portainer es un sistema de creación y gestión de contenedores igual que Container Station, pero proporcionando una serie de ventajas extras pensadas para usuarios avanzados o administradores. Serán las siguientes:
- Además de administración gráfica desde el navegador a través de un usuario y contraseña, también permite crear y gestionar contenedores a través de SSH por línea de comandos. Esto aporta una seguridad añadida y elimina la limitación de necesitar navegador web para la gestión.
- Admite creación de backups de los contenedores para asegurar la persistencia de datos al poder crear copias de seguridad de los mismos individualmente.
- Admite configuración y creación de contenedores a partir de ficheros de texto de configuración o scripts.
- Interfaz gráfica más completa que Container Station
Pasos previos para instalar y configurar Portainer
Si ya hemos hecho los deberes con los pasos previos vistos al principio, ya dispondremos de acceso al NAS a través de SSH, bien desde Linux o Windows.
Para los que hayáis saltado hasta aquí, repetimos que debemos activar SSH en el NAS dirigiéndonos al Panel de control > Telnet/SSH. Desde este tutorial podremos instalar y activar la extensión SSH Client y server en Windows 10, para acceder al NAS desde entornos Microsoft.
Así que nos dirigiremos a un terminal de comandos de Windows, sea PowerShell o CMD, y colocaremos el siguiente comando para acceder:
ssh <usuario>@<ip o dominio> -p <puerto>
Nos pedirá la contraseña de usuario y ya estaremos dentro del NAS.
A través de Docker, e imaginándonos que aún no hay un switch virtual específico para contenedores, vamos a crear un adaptador de red con el siguiente comando:
docker network créate <nombre del adaptador>
A partir de ahora utilizaremos este adaptador para los contenedores creados desde Portainer, que además estará enlazado con la IP del NAS para su acceso web local o remoto.
Opcionalmente podremos cambiarle el nombre al adaptador en el NAS para poder diferenciarlo en el entorno gráfico.
También necesitaremos un almacén de contenedores, así podremos tenerlos mucho mejor controlados y hacer el trabajo de persistencia de datos más cómodamente que con Container Station.
Así que nos iremos al servidor NAS > Panel de Control y crearemos una nueva carpeta compartida que denominaremos DockerContainers. De sus opciones, solamente desactivaremos la de papelera de reciclaje en red.
Vamos a crear un contenedor dentro de Docker para que a su vez virtualice nuestro otro gestor de contenedores Portainer. Lo haremos desde la interfaz de comandos de la siguiente forma:
docker run -d -p 9000:9000 \ --network=docnet --restart always --name="servidor-portainer" \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /share/DockerContainers/portainer:/data \ portainer/portainer:1.22.0
Para ello iniciaremos el contenedor en modo separado (-d), le asignaremos un puerto para su acceso desde fuera hacia dentro (-p 9000:9000), le indicaremos que se conecte al adaptador de red anteriormente creado (–network), asignaremos un nombre (–name) y le indicaremos que el contenedor se inicie automáticamente tras un corte de luz o apagado del sistema accidental (–restart always).
Los parámetros -v establecen una correspondencia entre los ficheros del servidor NAS con los ficheros del contenedor que creemos. Esto es necesario en el primer caso para ejecutar el contenedor, y en el segundo para asegurar la persistencia de datos. Si utilizamos en el terminal de comandos el separador “\” podremos escribir y ver el comando en distintas líneas más claramente, algo típico en Linux.
Al final del comando debemos colocar la cadena para que el servicio acceda a la red y descargue el paquete correspondiente. En este caso crearemos e instalaremos Portainer en su versión 1.22.0 tal y como especificamos antes de terminar el comando.
La ventaja aquí es que automáticamente se encargará de buscar el repositorio de la aplicación para descargarla de la red tal y como ocurre con apt-get en Linux. Y como contra tenemos el hecho de necesitar conocer lo parámetros correctos a asignar a los nuevos contenedores que, dependiendo de la aplicación, podrían cambiar un poco.
Ahora nos iremos al servidor NAS para ver que efectivamente se nos ha creador el nuevo contenedor con Portainer, y se ha asignado correctamente al nuevo adaptador de red virtual. Vemos además que las carpetas se han creado en el lugar correspondiente, y ahora tendremos acceso a Portainer a través del navegador.
En el primer acceso se nos pedirá un nuevo usuario y contraseña para acceder al servidor, seguidamente preguntará la forma en la que queremos entrar al Portainer, en nuestro caso de forma Local.
Finalmente accederemos a Home del servidor donde podremos ver los contenedores que están corriendo en el servidor NAS, y una enorme lista de opciones a la izquierda bastante más amplia que la de Container Station. De esta forma podremos sacar mucho más partido a Docker. Tal y como podríais intuir, en la lista se presentan todos los contenedores que hayamos creado, tanto desde Container Station como Portainer mediante comandos.
Instalar contenedores con Docker mediante comandos
El procedimiento para crear contenedores a través de comandos es casi el mismo que hemos llevado a cabo con Portainer anteriormente, pues en definitiva también era otro contenedor.
Pongamos el ejemplo con un servicio de almacenamiento en la nube propio como ownCloud; y el comando que utilizaremos será el siguiente:
docker run -d -p 4400:8080 -p 4401:8081 \ --network=docnet --restart always --name="servidor-owncloud" \ -v /share/DockerContainers/owncloud:/mnt/data \ -e OWNCLOUD_VERSION=latest \ -e OWNCLOUD_DOMAIN=owncloud.profesionalreview.net \ -e OWNCLOUD_ADMIN_USERNAME=prreview \ -e OWNCLOUD_ADMIN_PASSWORD=prreview_pass \ -e OWNCLOUD_FILESYSTEM_CACHE_READONLY=false \ -e HTTP_PORT=4400 \ -e HTTPS_PORT=4401 \ owncloud/server:latest
Vemos que hasta la asignación del parámetro -v, el comando sigue la misma estructura con la asignación de puertos, en este caso uno para el acceso HTTP y otro para el HTTPS. Y a partir de ahí necesitamos conocer el directorio de correspondencia entre los ficheros del NAS y el de los ficheros del contenedor, que cambiará en cada aplicación. Si no conocemos esta información, podremos probar con el comando básico docker:
run -d -p 4400:8080 owncloud:latest
Para saber parámetros y variables del entorno a aplicar en el comando, visitaremos hub.docker.com, donde encontraremos todos los contenedores y una completa descripción de ellos. Incluso está ya definido el comando básico para instalar y ejecutar el contenedor. Si no las conocemos, usaremos el comando básico y a posteriori configuraremos sus parámetros
¿Cómo sabemos esto? consultando algún tutorial o indagando en la descripción de la aplicación en cuestión. Un magnífico lugar para conocer gran parte o todos estos parámetros será hub.docker.com, una base de datos donde se encuentran todos los contenedores compatibles con el servicio.
Los parámetros -e serán variables de entorno, así que tendrán carácter opcional como -v, aunque si las conocemos, ya habremos hecho una gran parte de la configuración del contenedor. Estas variables suelen estar explicadas en la descripción del contenedor en la página hub.docker, así que leed con atención antes de escribir el comando.
Conclusiones finales sobre instalar Docker en NAS QNAP
Concluimos este tutorial donde hemos explicado de una forma bastante completa a nuestro juicio, cómo instalar y utilizar Docker en nuestro servidor NAS. De esta forma, podemos darles un uso más completo a equipos potentes y de nivel medio aprovechando la versatilidad de la virtualización ligera de aplicaciones a través de contenedores.
Tenemos una opción digamos para usuarios estándar como es Container Station muy simple, de fácil uso y sin apenas necesitar conocimientos de red. Y una segunda más potente como es Portainer, mediante la que a través de interfaz gráfica o por SSH y scripts podremos aprovechar la potencia de Docker para crear contenedores con variables de entorno y persistencia de datos.
Dejamos algunos artículos interesantes relacionados con los NAS:
Esperamos que os haya servido de ayuda para comenzar a probar el mundo de la virtualización ligera con aplicaciones y optimizar recursos del NAS.