Al igual que yo, probablemente haya escuchado la regla no oficial de Docker: es para servidores livianos, sin habitante y aplicaciones de fila de comandos, no para interfaces gráficas. La mayoría de nosotros seguimos esta regla por una buena razón: el CLI es para lo que Docker fue construido. Pero, ¿qué sucede cuando rompes las reglas?
Decidí hacer poco fuera de lo popular. Mi objetivo era ejecutar un escritorio Linux completo interiormente de un contenedor. No quiero solo un caparazón; Quiero una GUI completamente cómodo que exista donde se supone que no debe. Esto es lo que sucedió cuando lo intenté.
¿Por qué estoy haciendo esto de todos modos?
Entonces, ¿por qué determinado iría a todo este problema para ejecutar Linux? Luego de todo, simplemente podríamos usar VirtualBox o incluso Linux de doble botas adjunto con Windows. Mi respuesta es simple: la curiosidad y el deseo de un desafío.
He estado interesado en Docker por algún tiempo, y aunque he tenido experiencia con el exposición web de la pila completa, no mucho en el mundo de Docker y Contenerización. Quería examinar con las cosas y memorizar haciéndolas, por lo que este plan fue la respuesta.
Desde el principio, sabía que esto no sería manejable. Esperaba que un día, tal vez dos días como mayor, fuera suficiente para que un sistema descriptivo de Linux se ejecute. Pero la existencia del desafío fue todo lo contrario. Los obstáculos que enfrenté en los próximos cuatro días fueron completamente inesperados y mucho más complejos de lo que podría ocurrir anticipado, estirando mi paciencia mucho más allá de lo que había preparado.
Antiguamente de sumergirse en los detalles técnicos, aquí hay algún contexto.
Todo este prueba tuvo área en una PC de Windows 10, impulsada por una pregunta específica: ¿Qué pasaría si pudiera tener lo mejor de entreambos mundos? La idea de un entorno Linux completo que se ejecuta interiormente de un contenedor Docker, uno al banda del otro con mis aplicaciones unificado de Windows, era demasiado intrigante para dejarlo acaecer. Sin reinicios, sin particiones separadas, solo un escritorio de Linux y sin costuras y contenedores.
Entonces, primero tuve que preparar mi laboratorio. Esto significaba instalar Docker y configurar WSL. Con las bases colocadas, actualicé mis conceptos básicos de Docker y leí su documentación. Con esto, mi preparación auténtico fue completa; Ahora, era hora de poner en experiencia la teoría.
Ejecutando mi contenedor Docker
Mi primer intento de ejecutar un escritorio de Linux en Docker fue, en retrospectiva, un error de novato por exceso de confianza. Decidí construir una imagen personalizada desde cero. Si es nuevo en Docker, una imagen es un paquete autónomo de todo lo que una aplicación necesita ejecutar. Para que una vez que haya creado una imagen, ejecutará la misma en todas partes, independientemente del hardware o el sistema activo.
Cometí otro error desde el principio: me basé en gran medida en una utensilio AI para difundir el código para mi imagen personalizada.
Aquí está la escarmiento ganada con tanto esfuerzo: si no comprende la tecnología, no copie el código de pasta como lo hice yo. Pasé horas de depuración de errores sin un camino claro en torno a delante, abriéndome bruto a través de un desastre de código que no entendía.
Luego de perder un día firme en este camino improductivo, finalmente me di por vencido y cambié de táctica. Mi nuevo enfoque era simple: usaría una imagen preconstruida de Docker Hub. Piense en Docker Hub como una “tienda de aplicaciones” para imágenes de contenedores, llenas de soluciones creadas y compartidas por otros desarrolladores. Fue un ajuste muy necesario y finalmente permitió que comenzara el trabajo auténtico.
Primer exhalación de luz: las cosas buenas y las cosas malas
Luego de mi fallido intento de imagen personalizada, encontré una prometedora imagen de Debian basada en XFCE en Docker Hub. Lo descargué en minutos y, con algunos comandos, lo lanzé. Cuando abrí la URL, me recibió un escritorio Linux completamente cómodo, que se ejecuta exacto en mi navegador. La alegría pura geek de ver un sistema activo completo servido desde el interior de un contenedor Docker era una sensación de que no olvidaré. ¡Funcionó!
La usabilidad fue sorprendentemente aseado. LibreOffice y Gimp funcionaron admisiblemente, aunque hubo un poco de retraso. Estimaría en torno a del 70% del rendimiento nativo, pero aún muy idóneo. Firefox además se lanzó e incluso probé YouTube. Fue entonces cuando llegué al primer obstáculo importante: los colores fueron opacos y arrastrados. Una comprobación rápida confirmó mi sospecha: el navegador estaba utilizando la representación de software. Mi GPU estaba sentada inactiva.
Había otro problema que noté: Flatpak no funcionó. Cualquier intento de instalar una aplicación de Flatpak falló con errores, por lo que tuve que acudir a los paquetes de Debian. A pesar de estas limitaciones, ver un escritorio completo de Linux que se ejecuta en mi navegador, servido directamente desde Docker, fue una trofeo masiva.
Ajuste y formación
Luego de unos minutos con XFCE, decidí cambiar las cosas y probar Gnome como entorno de escritorio. ¡Gran error! Tomó horas de opción de problemas y fijación de errores para que se ejecute, y cuando finalmente se lanzó, fue sosegado y hambriento de medios. Al final, tragué mi orgullo y volví a XFCE, y me dije que XFCE puede no ser provocativo, pero es mucho más receptivo. Así que nos inclinemos en torno a la practicidad.
Con mi nuevo enfoque en el rendimiento, decidí retornar a examinar mi primer intento: construir una imagen personalizada desde cero. Esta vez, estudié el Dockerfile de la imagen preconstruida que había usado anteriormente. Quería entender exactamente lo que estaba pasando debajo del capó, y quería ver si podía mejorar el rendimiento yo mismo. Experimenté con algunas configuraciones nuevas, específicamente tratando de usar XRDP en área del método de reenvío NovNC, para ver si un protocolo diferente ofrecería una experiencia más suave. Pero no vi ninguna diferencia con XRDP.
Para replicar, cree un archivo con el nombre “DockerFile”, pegue el código y ejecútelo.
FROM ubuntu:jammy-20230425RUN apt update &&
DEBIAN_FRONTEND=noninteractive apt install -y
cinnamon locales sudo
tigervnc-standalone-server tigervnc-common
virtualgl mesa-utils mesa-vulkan-drivers
dbus-x11 xterm wget &&
locale-gen en_US.UTF-8 &&
update-locale LANG=en_US.UTF-8
ARG USER=user
ARG PASS=1234
RUN useradd -m $USER -p $(openssl passwd $PASS) &&
usermod -aG sudo $USER &&
chsh -s /bin/bash $USER
RUN echo "#!/bin/shn
export XDG_SESSION_DESKTOP=cinnamonn
export XDG_SESSION_TYPE=x11n
export XDG_CURRENT_DESKTOP=X-Cinnamonn
export LIBGL_ALWAYS_INDIRECT=0n
exec cinnamon-session" > /home/$USER/.xinitrc &&
chown $USER:$USER /home/$USER/.xinitrc && chmod +x /home/$USER/.xinitrc
RUN mkdir -p /home/$USER/.vnc &&
echo $PASS | vncpasswd -f > /home/$USER/.vnc/passwd &&
chmod 0600 /home/$USER/.vnc/passwd &&
chown -R $USER:$USER /home/$USER/.vnc
RUN echo "#!/bin/bashn
export DISPLAY=:1n
Xvnc :1 -geometry 1920x1080 -depth 24 -SecurityTypes VncAuth -rfbport 5901 -localhost no &n
sleep 2n
sudo -u $USER startx &n
tail -f /dev/null" > /start && chmod +x /start
EXPOSE 5901
CMD ("/start")
Explorando Docker Hub
Si todo esto suena como demasiado trabajo, hay buenas noticiero. No tiene que construir su propia imagen para comenzar o pelear con errores. Mi investigación me llevó a dos soluciones fantásticas y listas para usar que ofrecen una experiencia mucho más aerodinámica.
-
Webtop de Linuxserver.io: esta es una excelente opción de código hendido que proporciona una variedad de sabores de escritorio de Linux preenvasados como imágenes de Docker. Utiliza NovNC para entregar el escritorio directamente a su navegador, y la configuración es sencilla.
-
Espacios de trabajo de KASM: esta es otra opción de código hendido para uso personal.
Lo bueno de estas imágenes es que tienen todo preconfigurado, especialmente Webtop. Simplemente extraiga la imagen Docker y la ejecute. Una vez que el contenedor se está ejecutando, puede aceptar a su Linux ingresando la URL. Encontré que la gala era mucho mejor que cualquier cosa que había probado anteriormente y, lo que es más importante, tenía un paso de audio, lo que no encontré con las imágenes de Kasm.
Para ejecutar WebTop, broa CMD de Windows y pegue este código
docker run -d ^
-e PUID=1000 ^
-e PGID=1000 ^
-e TZ=Etc/UTC ^
-p 3000:3000 ^
lscr.io/linuxserver/webtop:latest
Descubrí algunas ventajas inesperadas
Lo que comenzó como un plan divertido para memorizar Docker y examinar con los contenedores de Linux terminó revelando algunas características sorprendentemente avíos en el camino. El longevo descubrimiento y mi personal “¡Ajá!” Moment, se dio cuenta del poder del ataque remoto de escritorio.
Cuando vi un escritorio Linux completo en mi navegador, tuve una idea salvaje: ¿qué pasaría si lo accediera desde un dispositivo menos potente? Agarré mi Chromebook, una máquina humilde con un procesador Intel Celeron, abrió la url, y allí estaba: la potencia completa de mi PC principal, transmitiendo en mi Chromebook. De repente, no estaba encadenado a mi escritorio. Podría seguir trabajando desde el sofá, o en cualquier otro área de la casa. Mi Chromebook de víctima potencia se convirtió en una ventana de stop rendimiento en mi escritorio, todo gracias a un contenedor.
Para la mejor experiencia, use una conexión Ethernet con cable o una red Wi-Fi rápida de 5 GHz.
Menos de esto, pude ver varios otros beneficios:
-
Sandboxes desechables: podría probar y romper las cosas en un entorno de Linux sin temor a estropear mi sistema activo principal. Un parque de niño valentísimo para experimentos de peligro.
-
Navegación privada: puedo volver un nuevo contenedor, usar un navegador web y luego eliminar todo el entorno con un solo clic, sin dejar huella.
-
Espacios de trabajo dedicados: Puedo crear imágenes de Linux personalizadas adaptadas a tareas específicas: un entorno de escritura sin distracciones, una configuración de codificación con todas mis herramientas de exposición preinstaladas.
Esta flexibilidad abrió posibilidades que ni siquiera había considerado al comenzar el plan.
¿Qué sigue? Mis experimentos inacabados
Si admisiblemente había conocido para mí que es posible ejecutar un escritorio de Linux en Docker, mi delirio no ha terminado. Hubo algunos experimentos que quería hacer, pero no tuve tiempo para ello:
-
Flatpak y Snap Store: me encantaría descubrir cómo hacer que estas tiendas de aplicaciones funcionen interiormente del contenedor para expandir la biblioteca de software.
-
Juegos: sin el paso de GPU, esto no sería posible, pero tengo curiosidad por descubrir una opción para esto.
-
Optimización adicional: quiero continuar ajustando la configuración para ver si puedo exprimir un rendimiento aún mejor y achicar el retraso de entrada.
¿Por qué es difícil ejecutar Linux en Docker?
Entonces, ahora que he entendido que ejecutar un entorno de escritorio completo interiormente de un contenedor y esperar que se comporte como un escritorio común en Windows es posible pero doloroso, frágil y mucho más engorroso que ejecutar una VM. Las razones principales para estos son:
-
Los contenedores no son sistemas operativos aislados: los contenedores Docker comparten el núcleo host. Esto es lo que los hace livianos y excelentes para servicios individuales. Mientras que los entornos de escritorio esperan que los servicios del sistema como Systemd, Logind, UDEV, DBUS) y el ataque al dispositivo estén disponibles. Los contenedores no proporcionan eso de forma predeterminada.
-
No hay servidores de pantalla incorporados: Linux GUIS necesita un servidor de compositor/pantalla (X11 o Wayland). Un contenedor no proporciona uno, por lo que tenemos que hacerlo nosotros mismos.
-
Golpe a la GPU: los contenedores no virtualizan las GPU de forma predeterminada, por lo que debe acaecer nodos del dispositivo al contenedor. Y en Windows, hay una capa WSL adicional para cruzar.
¿Vale la pena?
Absolutamente. Este fue un plan divertido y profundamente gratificante. Aprendí mucho sobre el funcionamiento interno de Docker y Linux, y hay un tipo singular de satisfacción que proviene de la resolución de problemas durante horas y finalmente ver su trabajo valiendo la pena.
Entonces, ¿lo recomendaría? Sí, especialmente si tienes curiosidad y estás buscando un plan de fin de semana peculiar. Pero incluso si no es así, los beneficios prácticos que descubrí, como el ataque de escritorio remoto, las cajas de arena desechables y los espacios de trabajo dedicados, hacen esto mucho más que un prueba. Puedo ver casos de uso prácticos aquí.
Aunque las reglas no oficiales de Docker están ahí por una razón, a veces las lecciones más valiosas se encuentran al romperlas. Entonces, enciende tu terminal, toma una imagen preconstruida (¡o sea robusto y construya la tuya!), Y vea la ilusionismo por ti mismo. Asimismo puede encontrar algunas ventajas inesperadas en el camino.






