A GUI alkalmazások futtatása Docker konténerben – CloudSavvy IT

Avatar Gadam | 2021.04.09. 143 Views 0 Likes 0 Ratings

143 Views 0 Ratings Rate it

[ad_1]

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.

[ad_2]
Forrás link


143 Views 0 Ratings Rate it