Dockerizar aplicaciones de escritorio

Ya sabemos qué es Docker, e incluso en un post anterior lo instalamos en nuestra raspberry pi a modo de prueba para familiarizarnos. Ahora ha llegado el momento de darle otra visión al mundo de los contenedores. Os invito a que continuéis leyendo para descubrir cómo dockerizar nuestras aplicaciones de escritorio.

¿Por qué usar contenedores en apps de escritorio?

De entrada el hecho de dockerizar aplicaciones que no sean servicios nos puede chocar, ya que no es el cometido habitual de Docker. Pero sí es cierto que en escenarios determinados, puede ser una solución sencilla a determinados problemas como veremos a continuación.

Más de una vez nos hemos visto en la situación de tener que usar aplicaciones antiguas cuyas dependencias están obsoletas. Esto suele traer los problemas de no poder resolver dichas dependencias dado que nuestra máquina tiene versiones muy superiores de esas librerías.

En este caso, dockerizar una aplicación de escritorio antigua es una solución elegante a un problema bastante feo, ya que está en juego la integridad de todo nuestro sistema operativo. Una mala gestión de dependencias nos puede acarrear problemas y que dejen de funcionar otras aplicaciones.

Al ejecutar el programa dentro de un contenedor que satisface sus dependencias y además es efímero en el tiempo, erradicamos estos riesgos de un plumazo, a parte de que en caso de prescindir de la nueva aplicación, simplemente eliminaremos contenedor e imagen sin dejar rastro, la desinstalación del programa se vuelve muy fácil.

También hay que tener en cuenta que hablamos de aplicaciones corriendo en un entorno de ejecución aislado, con las ventajas que eso supone en cuanto a seguridad, ya que no tendrá acceso a todos los recursos del sistema, y en cuanto a limitación de recursos.

Con todos estos argumentos, nos queda claro que la dockerización, si bien, no es la solución a todo, si podría estar justificado en determinados escenarios.

Crear nuestro Dockerfile de Inkscape

Vamos a dockerizar la aplicación inkscape como ejemplo de lo que sería una aplicación de escritorio.

Para comenzar a crear nuestra imagen de docker crearemos nuestro fichero con nombre Dockerfile con el siguiente contenido:

FROM ubuntu
MAINTAINER Tu nombre <tu.nombre@asdf.com>

RUN apt-get update && apt-get install -y inkscape --no-install-recommends
RUN rm -rf /var/lib/apt/lists/*

ENTRYPOINT [ "inkscape" ]

El ejemplo anterior es muy simple para facilitar su legibilidad. Al principio se establece a través de la palabra clave FROM la imagen base de la que se parte. Posteriormente se define el MAINTAINER. Luego se ejecutan los comandos necesarios para tener instalado el programa que necesitamos y sus dependencias a través de la palabra clave RUN. Y por último el ENTRYPOINT viene a ser el comando que se ejecuta al levantar el contenedor de una imagen (contenedor ~ instancia de una imagen).

Construimos nuestra imagen

Lo siguiente es construir nuestra imagen, para lo que simplemente necesitamos ejecutar lo siguiente desde el directorio donde se encuentre nuestro Dockerfile:

docker build -t prueba-inkscape .

Una vez ejecutado docker comenzará a construir nuestra imagen ejecutando los pasos descritos en el Dockerfile.

Ejecutamos nuestra aplicación dockerizada

Una vez ha sido construida la imagen, podemos ejecutarla. Si quieres consultar la lista de imágenes existentes en el sistema utiliza:

docker images

Entre la lista de imágenes veremos nuestra imagen prueba-inkscape.

Para ejecutar inkscape utilizaremos el siguiente comando:

docker run --net=host --env="DISPLAY" prueba-inkscape

Vemos que establecemos como dispositivo de red (–net) la máquina host y como entorno DISPLAY, que en este caso es necesario para poder hacer uso de la pantalla de la máquina host.

Una vez ejecutado vemos una instancia de inkscape totalmente funcional. Eso si, nos llamará la atención el hecho de que la decoración de la ventana es totalmente espartana, y aparece en inglés.

Esto se debe a que la aplicación se ejecuta de forma aislada a nuestra máquina host.

Las posibilidades soy casi ilimitadas

Nuestro ejemplo es simple, pero Docker nos abre un mundo de posibilidades muy interesante y no sólo para máquinas Linux. Aquí os dejo varios enlaces interesantes mostrando las posibilidades que nos aportan los contenedores.

Espero que nuestro artículo os haya gustado y hayáis aprendido mucho.

Un saludo!