A Docker általában a háttéralkalmazások és a CLI programok tárolására szolgál. Bár grafikus programok futtatására is használható! Vagy használhat egy meglévő X kiszolgálót, ahol a gazdagép már grafikus környezetet futtat, vagy futtathat egy VNC kiszolgálót a tárolóban.
Először fontos megérteni, hogy Docker valójában mit csinál. A Docker „konténer” egy olyan kapszulázási forma, amely úgy tűnik, hogy felszínesen hasonlít egy virtuális géphez. A virtuális gépektől eltérően a tárolók ugyanazt a Linux kernelt használják, mint a gazda rendszerüket.
A következő komponens az X Window System. Az X szerverek, például az Xorg, biztosítják a Unix rendszerek alapvető grafikai képességeit. A GUI-alkalmazások nem jeleníthetők meg, ha nincs elérhető X Server. (Alternatív ablakos rendszerek, például Wayland, rendelkezésre állnak – ebben a cikkben az X-re koncentrálunk.)
Az X Server futtatása a Dockerben elméletileg lehetséges, de ritkán használatos. A Dockert privilegizált módban kell futtatnia (--privileged
), így hozzáférhet a gazdagép hardveréhez. A szerver indításával megpróbálná követelni a videoeszközeit, ami általában a video kimenet elvesztését eredményezi, mivel a gazdagép eredeti X szervere elrabolja az eszközeit.
Jobb megközelítés, ha a gazdagép X Server foglalatát a Docker konténerbe csatlakoztatja. Ez lehetővé teszi a tároló számára a már meglévő X kiszolgáló használatát. A tárolóban futó GUI alkalmazások ekkor megjelennek a meglévő asztalon.
Miért futtassa a GUI alkalmazásokat a Dockerben?
Egy GUI program futtatása a Docker alkalmazásban hasznos technika lehet egy új szoftver értékelésekor. Telepítheti a szoftvert egy tiszta konténerbe, ahelyett, hogy új csomagokkal kellene szennyeznie a gazdagépet.
Ez a megközelítés segít elkerülni az összeférhetetlenséget a környezet más csomagjaival. Ha ideiglenesen egy program két verzióját kell futtatnia, akkor a Docker használatával elkerülheti a szoftver eltávolítását és újratelepítését a gazdagépről.
X aljzat továbbítása egy dokkoló konténerbe
A Docker konténer hozzáférése a gazdagép X aljzatához egyszerű eljárás. Az X aljzat megtalálható itt: /tmp/.X11-unix
a házigazdáján. A könyvtár tartalmát a tárolóhoz rendelt Docker-kötetbe kell illeszteni. Használnia kell a host
hálózati üzemmódban, hogy ez működjön.
Meg kell adnia a tartályt a DISPLAY
környezeti változó. Ez utasítja az X klienseket – a grafikus programokat – melyik X szerverhez csatlakozzon. Készlet DISPLAY
értékre a tartályban $DISPLAY
a házigazdáján.
Ezeket a konfigurációkat egybe foglalhatja docker-compose.yml
fájl:
version: "3"
services:
app:
image: my-app:latest
build: .
environment:
- DISPLAY=${DISPLAY}
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
network_mode: host
Ezután létre kell hoznia a Dockerfile
alkalmazásához. Íme egy példa, amely a Firefox böngészőt futtatja:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y firefox
CMD ["/usr/bin/firefox"]
Most készítse el és futtassa a képet:
docker-compose build
docker-compose up
Új Firefox ablaknak kell megjelennie az asztalon! A Firefox példány a tárolón belül fog futni, függetlenül a többi nyitott Firefox ablaktól. A tároló megosztja a gazdagép X socketjét, így a tárolt Firefox továbbra is megjelenik az asztalon.
Ezt a megközelítést csak akkor szabad használni, ha megbízik a Docker-tárolóban. A gazdagép megjelenítő kiszolgálójának kiszolgáltatása biztonsági kockázatot jelent, ha nem biztos benne, hogy mi rejlik a tárolóban.
X hitelesítés kezelése
Lehetséges, hogy hitelesítenie kell a tárolót az X kiszolgáló eléréséhez. Először szerezzen be egy X hitelesítési tokent a gazdagéptől. Fuss xauth list
és jegyezze fel a felsorolt sütik egyikét. Le kell másolnia a teljes sort.
A Docker konténerbe helyezze be a xauth
csomag. Akkor fuss xauth add
, átadva az előző lépésben másolt tokent.
apt install -y xauth
xauth add <token>
A tárolójának most sikeresen hitelesítenie kell az X szervert.
Egy másik megközelítés – VNC-kiszolgáló futtatása
Ha nem tudja használni az X socket továbbítást, beállíthat egy VNC szervert a tárolójában. Ez a megközelítés lehetővé teszi a tárolóban lévő grafikus alkalmazások megtekintését a gazdagépen futó VNC-kliensről való csatlakozással.
Adja hozzá a VNC szerver szoftvert a tárolóhoz:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y firefox x11vnc xvfb
RUN echo "exec firefox" > ~/.xinitrc && chmod +x ~/.xinitrc
CMD ["v11vnc", "-create", "-forever"]
A tároló futtatásakor automatikusan létrejön egy VNC-kiszolgáló. A gazdagép portot a tároló 5900 portjához kell kötnie – ez az a port, amelyen a VNC szerver ki lesz téve.
A Firefox indításkor indul, amikor hozzáadódik .xinitrc
. Ez a fájl akkor kerül végrehajtásra, amikor a VNC szerver elindítja és inicializálja az új képernyőt.
A kiszolgálóhoz való csatlakozáshoz VNC kliensre lesz szüksége a gazdagépen. Futtatással keresse meg a tároló IP-címét docker ps
, feljegyezve a tárolóazonosítót, és továbbítva annak docker inspect <container>
. Az IP címet a kimenet alján, a Network
csomópont.
Használja a tároló IP-címét a VNC-klienssel. Csatlakozás az 5900-as porton hitelesítés nélkül. Most már képesnek kell lennie a Docker-tárolóban futó grafikus programokra.
Következtetés
Két módszer közül választhat, ha grafikus programokat futtat konténeres környezetben. Általános használatra a gazdagép X foglalatának megosztása általában a legegyszerűbb megoldást nyújtja. Választhat egy VNC-kiszolgáló futtatását is a tárolóban. Ez a megközelítés biztonságosabb lehet, ha nem a tároló képet hozta létre.
A konténeres grafikus alkalmazások akkor hasznosak, ha értékeli a szoftvert, vagy ha egy csomag két verzióját kell futtatnia. A meglévő asztalon programokat használhat anélkül, hogy hozzá kellene érnie a gazdagép konfigurációjához.