Come Eseguire Applicazioni Basate su GUI in Docker

Esegui App Gui Docker

Docker è comunemente usato per applicazioni lato server e da riga di comando. Tuttavia, con la giusta configurazione, puoi anche eseguire applicazioni basate su GUI all’interno dei container. Questi container possono includere librerie GUI e strumenti di visualizzazione, che consentono alle app di funzionare in un ambiente sicuro e isolato. Questo approccio semplifica lo sviluppo, il test e il deployment di app GUI su diverse macchine o ambienti OS. Questa guida ti guiderà su come eseguire app GUI all’interno dei container Docker con una configurazione minima.

Comprendere Docker e i Container GUI di Docker

Docker ti consente di impacchettare un’applicazione insieme a tutto ciò di cui ha bisogno, come codice, librerie e impostazioni, in un’unità autonoma chiamata container. Questi container condividono il kernel del sistema host, rendendoli leggeri, veloci da avviare ed efficienti rispetto a macchine virtuali complete.

I container GUI sono configurazioni Docker che includono applicazioni grafiche, come Firefox, Gedit o altri strumenti desktop, consentendo alle loro finestre di apparire sul tuo schermo reale. A differenza dei container standard, questi richiedono una configurazione aggiuntiva per connettersi con il sistema di visualizzazione dell’host, abilitando il corretto rendering e interazione con gli elementi GUI.

Perché Eseguire App GUI in Docker?

Ecco i motivi principali per cui eseguire app GUI in Docker può essere vantaggioso:

  • Quando esegui un’app GUI in Docker, tutto ciò di cui ha bisogno, come librerie e impostazioni, è impacchettato all’interno del container. Questo mantiene il tuo sistema principale libero da ingombri o conflitti.
  • Usare Docker significa che la tua app funzionerà allo stesso modo su qualsiasi macchina. Che tu stia sviluppando, testando o condividendo con altri, l’ambiente rimane coerente.
  • I container semplificano il test di una nuova app o il debug di qualcosa. Puoi eseguirli, metterli in pausa o rimuoverli senza influenzare la tua macchina host.
  • Docker ti consente di eseguire applicazioni GUI Linux su sistemi non Linux. Lo fa utilizzando strumenti di condivisione dello schermo come XQuartz o VcXsrv, quindi non c’è bisogno di una macchina virtuale.
  • A differenza delle VM tradizionali, i container Docker utilizzano meno risorse di sistema. Si avviano più velocemente e funzionano più fluidamente, anche per app basate su GUI.

Eseguire Applicazioni GUI in Docker

Per eseguire applicazioni GUI in Docker, devi prima assicurarti che Docker sia installato sul tuo sistema Linux. Puoi verificarlo eseguendo il seguente comando:

docker--version

Se questo comando restituisce un numero di versione, significa che Docker è installato e funzionante. In caso contrario, probabilmente vedrai un errore “command not found”.

Una volta che Docker è configurato correttamente, puoi passare ai passaggi successivi.

Attivare il Servizio Docker

Ora, avvia il servizio Docker utilizzando il seguente comando:

sudo systemctl start docker

Per controllare se il servizio Docker è in esecuzione correttamente, esegui:

sudo systemctl status docker

L’output conferma che il servizio Docker è attivo e in esecuzione senza problemi:

Controlla Stato Docker

Configurare la Cartella del Progetto e il Dockerfile

Creiamo una directory chiamata “dockerGUI”, dove memorizzeremo tutti i file relativi a Docker per eseguire app GUI:

mkdir dockerGUI

Ora naviga in questa directory per assicurarti che tutti i file successivi che creiamo o modifichiamo saranno mantenuti nella cartella dockerGUI:

cd dockerGUI

Crea un nuovo file chiamato dockerGUIFile per definire la configurazione dell’immagine Docker:

nano dockerGUIFile

Ora, incolla le seguenti righe di codice nel dockerGUIFile:

FROM jess/firefox  
ENV DISPLAY=:0  
CMD ["firefox"]

Il codice sopra dice a Docker di utilizzare un’immagine precompilata di Firefox e imposta l’ambiente di visualizzazione in modo che la GUI possa apparire sul sistema host. Inoltre, garantisce che Firefox si avvii automaticamente quando il container viene eseguito.

Nota: Per provare un’app diversa, basta cambiare l’immagine e il comando nel tuo Dockerfile. Ad esempio, per eseguire Gedit, puoi utilizzare l’immagine ufficiale di Ubuntu e installare l’app durante la build in questo modo:

FROM ubuntu  
RUN apt-get update&&apt-get install-y gedit  
ENV DISPLAY=:0  
CMD ["gedit"]

Costruire l’Immagine Docker

Ora che la configurazione di Docker è impostata nel dockerGUIFile, costruiamo l’immagine Docker utilizzando il seguente comando:

sudodocker build -t myfirefox:1-f dockerGUIFile .

Questo comando costruisce un’immagine Docker da dockerGUIFile, la nomina myfirefox con tag 1 e utilizza la directory corrente come contesto:

Costruisci Immagine Docker

Avviare il Container Docker con Supporto GUI Abilitato

Ora, abilita il supporto GUI per i container Docker eseguendo il seguente comando:

xhost +local:docker

L’output conferma che i client locali (come i container Docker) in esecuzione sul mio sistema sono ora autorizzati a connettersi al mio server X:

Ora, esegui il container utilizzando il seguente comando per avviare Firefox con supporto GUI sul tuo sistema host:

docker run -it--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unix myfirefox:1

Di conseguenza, questo comando collega il container al tuo display, consentendo a Firefox di aprirsi sul tuo schermo proprio come un’app nativa:

Esegui App Gui Da Docker

Nota: Utilizzando l’opzione --rm, Docker elimina automaticamente il container dopo che l’app si chiude, mantenendo il tuo sistema pulito e impedendo che appaia in docker ps -s.

Disconnettere Docker dal Server X

Una volta che hai finito di utilizzare l’applicazione GUI, è consigliabile chiudere l’accesso al server X per motivi di sicurezza:

xhost -local:docker

Considerazioni Finali

Eseguire applicazioni basate su GUI in Docker è un ottimo modo per estendere ciò che i container possono fare oltre la riga di comando. Con la giusta configurazione, puoi avviare app desktop da un container come se fossero installate sul tuo sistema. È un approccio semplice ma potente per testare, sviluppare o esplorare strumenti Linux in un ambiente pulito. Inizia a costruire i tuoi container pronti per la GUI e sfrutta appieno ciò che Docker offre sul tuo desktop Linux.