Q Application su container Docker¶
In questa pagina sono illustrati i passi principali per eseguire una QApplication all’interno di un container Docker basato su Debian10 tramite la Web UI che mostra l’interfaccia grafica attraverso un Web browser.
Impostazione
Per creare e provare il container è necessario installare Docker.
Una volta assicurato il corretto funzionamento di Docker, seguire i seguenti passi per lanciare una QApplication all’interno di un container:
Creare un progetto con QStudio che utilizza solo Web presentation engine (rimuovere Native presentation engine).
Esportare la QApplication in una cartella e selezionare la piattaforma Debian 64-bit.
Creare una cartella e copiare al suo interno la cartella
QApplication
generata dal passo precedente.Creare il
Dockerfile
nella cartella creata nel passo precedente. Il file ha il seguente contenuto che può essere personalizzato eventualmente.FROM debian:10 LABEL maintainer=youremail@company.com WORKDIR /app RUN chmod 777 /app RUN mkdir -p /app/QApplication ADD QApplication /app/QApplication/ CMD /app/QApplication/QRuntime -c
Questo file contiene una configurazione minima per eseguire una QApplication all’interno di un container. Inoltre, durante la fase di creazione del container la nostra QApplication viene anche copiata all’interno del container.
Una volta creato il Dockerfile, lanciare i seguenti comandi da PowerShell:
Creare l’immagine usando il seguente comando:
docker build -t $imageTag .
dove
$imageTag
indica il nome dell’immagine.Lanciare l’immagine in un container:
docker run -p externalPort:InternalPort --name containerName image
dove l’opzione
-p
permette di specificare una porta interna del container accessibile dall’esterno, ad esempio da web browser. Nel nostro casoInternalPort
assume il valore della proprietà Porta impostata del Web presentation engine in QStudio. Invece,ExternalPort
è una porta libera e disponibile sulla macchina in esecuzione.
In base al protocollo selezionato (
http
,https
) aprire una delle due seguenti pagine web:http://localhost:<externalPort>
https://localhost:<externalPort>