Cómo ejecutar aplicaciones basadas en GUI en Docker

Docker se utiliza comúnmente para aplicaciones del lado del servidor y de línea de comandos. Sin embargo, con la configuración adecuada, también puedes ejecutar aplicaciones basadas en GUI dentro de contenedores. Estos contenedores pueden incluir bibliotecas GUI y herramientas de visualización, que permiten que las aplicaciones se ejecuten en un entorno seguro y aislado. Este enfoque simplifica el desarrollo, la prueba y el despliegue de aplicaciones GUI en diferentes máquinas o entornos de sistemas operativos. Esta guía te llevará a través de cómo ejecutar aplicaciones GUI dentro de contenedores Docker con una configuración mínima.
Entendiendo Docker y los contenedores GUI de Docker
Docker te permite empaquetar una aplicación junto con todo lo que necesita, como código, bibliotecas y configuraciones, en una unidad autónoma llamada contenedor. Estos contenedores comparten el núcleo del sistema host, lo que los hace ligeros, rápidos de iniciar y eficientes en comparación con máquinas virtuales completas.
Los contenedores GUI son configuraciones de Docker que incluyen aplicaciones gráficas, como Firefox, Gedit u otras herramientas de escritorio, permitiendo que sus ventanas aparezcan en tu pantalla real. A diferencia de los contenedores estándar, estos requieren una configuración adicional para conectarse con el sistema de visualización del host, lo que permite un renderizado e interacción adecuados con los elementos de la GUI.
¿Por qué ejecutar aplicaciones GUI en Docker?
Aquí están las razones clave por las que ejecutar aplicaciones GUI en Docker puede ser beneficioso:
- Cuando ejecutas una aplicación GUI en Docker, todo lo que necesita, como bibliotecas y configuraciones, está empaquetado dentro del contenedor. Esto mantiene tu sistema principal libre de desorden o conflictos.
- Usar Docker significa que tu aplicación funcionará igual en cualquier máquina. Ya sea que estés desarrollando, probando o compartiendo con otros, el entorno se mantiene consistente.
- Los contenedores facilitan la prueba de una nueva aplicación o la depuración de algo. Puedes ejecutarlos, pausarlos o eliminarlos sin afectar tu máquina host.
- Docker te permite ejecutar aplicaciones GUI de Linux en sistemas no Linux. Lo hace utilizando herramientas de compartición de visualización como XQuartz o VcXsrv, por lo que no hay necesidad de una máquina virtual.
- A diferencia de las máquinas virtuales tradicionales, los contenedores Docker utilizan menos recursos del sistema. Se inician más rápido y funcionan más suavemente, incluso para aplicaciones basadas en GUI.
Ejecutar aplicaciones GUI en Docker
Para ejecutar aplicaciones GUI en Docker, primero debes asegurarte de que Docker esté instalado en tu sistema Linux. Puedes verificar esto ejecutando el siguiente comando:
docker--versionSi este comando devuelve un número de versión, significa que Docker está instalado y funcionando. Si no, es probable que veas un error de “comando no encontrado”.
Una vez que Docker esté correctamente configurado, puedes pasar a los siguientes pasos.
Activar el servicio Docker
Ahora, inicia el servicio Docker usando el siguiente comando:
sudo systemctl start dockerPara verificar si el servicio Docker está funcionando correctamente, ejecuta:
sudo systemctl status dockerLa salida confirma que el servicio Docker está activo y funcionando sin problemas:

Configurar la carpeta del proyecto y el Dockerfile
Vamos a crear un directorio llamado “dockerGUI”, donde almacenaremos todos los archivos relacionados con Docker para ejecutar aplicaciones GUI:
mkdir dockerGUIAhora navega a este directorio para asegurarte de que todos los archivos posteriores que creemos o modifiquemos se mantendrán en la carpeta dockerGUI:
cd dockerGUICrea un nuevo archivo llamado dockerGUIFile para definir la configuración de la imagen de Docker:
nano dockerGUIFileAhora, pega las siguientes líneas de código en el dockerGUIFile:
FROM jess/firefox
ENV DISPLAY=:0
CMD ["firefox"]El código anterior le dice a Docker que use una imagen preconstruida de Firefox y establece el entorno de visualización para que la GUI pueda aparecer en el sistema host. Además, asegura que Firefox se inicie automáticamente cuando se ejecute el contenedor.
Nota: Para probar una aplicación diferente, simplemente cambia la imagen y el comando en tu Dockerfile. Por ejemplo, para ejecutar Gedit, puedes usar la imagen oficial de Ubuntu e instalar la aplicación durante la construcción así:
FROM ubuntu
RUN apt-get update&&apt-get install-y gedit
ENV DISPLAY=:0
CMD ["gedit"]Construir la imagen de Docker
Ahora que la configuración de Docker está establecida en el dockerGUIFile, construyamos la imagen de Docker usando el siguiente comando:
sudodocker build -t myfirefox:1-f dockerGUIFile .Este comando construye una imagen de Docker a partir de dockerGUIFile, la nombra myfirefox con la etiqueta 1, y usa el directorio actual como contexto:

Lanzar el contenedor Docker con soporte GUI habilitado
Ahora, habilita el soporte GUI para los contenedores Docker ejecutando el siguiente comando:
xhost +local:dockerLa salida confirma que los clientes locales (como los contenedores Docker) que se ejecutan en mi sistema ahora están permitidos para conectarse a mi servidor X:
Ahora, ejecuta el contenedor usando el siguiente comando para lanzar Firefox con soporte GUI en tu sistema host:
docker run -it--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unix myfirefox:1Como resultado, este comando conecta el contenedor a tu visualización, lo que permite que Firefox se abra en tu pantalla como si fuera una aplicación nativa:

Nota: Usar la opción --rm hace que Docker elimine automáticamente el contenedor después de que la aplicación se cierre, manteniendo tu sistema limpio y evitando que aparezca en docker ps -s.
Desconectar Docker del servidor X
Una vez que hayas terminado de usar la aplicación GUI, se recomienda cerrar el acceso al servidor X por razones de seguridad:
xhost -local:dockerReflexiones finales
Ejecutar aplicaciones basadas en GUI en Docker es una excelente manera de extender lo que los contenedores pueden hacer más allá de la línea de comandos. Con la configuración adecuada, puedes lanzar aplicaciones de escritorio desde un contenedor como si estuvieran instaladas en tu sistema. Es un enfoque simple pero poderoso para pruebas, desarrollo o exploración de herramientas de Linux en un entorno limpio. Comienza a construir tus propios contenedores listos para GUI y aprovecha al máximo lo que Docker ofrece en tu escritorio Linux.