Come Eseguire Applicazioni Basate su GUI in 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--versionSe 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 dockerPer controllare se il servizio Docker è in esecuzione correttamente, esegui:
sudo systemctl status dockerL’output conferma che il servizio Docker è attivo e in esecuzione senza problemi:

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 dockerGUIOra naviga in questa directory per assicurarti che tutti i file successivi che creiamo o modifichiamo saranno mantenuti nella cartella dockerGUI:
cd dockerGUICrea un nuovo file chiamato dockerGUIFile per definire la configurazione dell’immagine Docker:
nano dockerGUIFileOra, 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:

Avviare il Container Docker con Supporto GUI Abilitato
Ora, abilita il supporto GUI per i container Docker eseguendo il seguente comando:
xhost +local:dockerL’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:1Di conseguenza, questo comando collega il container al tuo display, consentendo a Firefox di aprirsi sul tuo schermo proprio come un’app nativa:

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:dockerConsiderazioni 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.