Docker konténerek telepítése távoli szervereken

  • A Docker Compose és az SSH vagy a GitHub Actions használata leegyszerűsíti a konténerek távoli szerverekre történő telepítését és megkönnyíti a szolgáltatások frissítését.
  • Az olyan eszközök, mint a WSL 2, a VS Code és a Dev Containers, lehetővé teszik a távoli Docker környezetekben történő fejlesztést, közel lokális élményt nyújtva.
  • A Plesk és a Portainer webes felületeket kínál helyi és távoli Docker-hosztok, Compose-vermek, kötetek és képfájlok kezeléséhez.
  • A VNC/noVNC és a Caddy segítségével grafikus alkalmazásokat lehet futtatni távoli konténerekben, és biztonságosan elérni azokat a böngészőből.

Docker konténerek telepítése távoli szervereken

Docker konténerek használata távoli szervereken Ez lett azok alapfeladata, akik modern alkalmazásokat szeretnének telepíteni anélkül, hogy elakadnának a függőségekben, a könyvtárverziókban és a klasszikus „a gépemen működik” elvben. Amikor azonban egy egyszerű… futtatásáról… docker run Egy komolyabb, helyi Linux szerveren történő telepítéstől kezdve, Docker Compose-szal, GitHub megosztásokkal, Pleskkel, Portainerrel vagy akár böngészőn keresztül elérhető grafikus alkalmazásokkal, a dolgok kicsit bonyolultabbá válnak.

Ha a célod Docker konténerek telepítése egy távoli szerveren (Ubuntu, Debian, Windows WSL 2-vel, Cloud Server, Plesk stb.) és mindezt karbantartható, automatizált és biztonságos módon. Ebben az útmutatóban egy meglehetősen teljes folyamatot mutatunk be: a Docker Compose távoli alapvető használatától kezdve a VS Code-dal rendelkező fejlesztői környezeteken át a Plesk-ből történő telepítésekig, a Portainerrel történő adminisztrációig és grafikus alkalmazások távoli futtatásáig noVNC és Caddy használatával.

Alapfogalmak: Docker konténerek és távoli telepítés

A Docker egy konténerplatform Egy alkalmazást csomagol minden szükséges elemmel együtt (könyvtárak, függőségek, bináris fájlok, minimális rendszerkonfiguráció), így ugyanúgy fut minden olyan gépen, amelyen telepítve van a Docker motor. A virtuális géphez képest a legfontosabb különbség az, hogy a konténer nem tartalmaz teljes operációs rendszert; ehelyett megosztja a gazdagép kernelt, ami könnyebb képeket és jobb teljesítményt eredményez.

Docker konténerek telepítése távoli szerverekre Általában van egy Dockerrel és opcionálisan Docker Compose-szal rendelkező hosztod (például egy Ubuntu szerver a felhőben), amelyre a kódot vagy a képeket elküldöd futtatni. Ezt manuálisan is megteheted SSH-n keresztül, automatizálhatod a GitHub Actions segítségével, vagy integrálhatod olyan panelekkel, mint a Plesk, vagy olyan eszközökkel, mint a Portainer.

A főbb valós forgatókönyvek, amelyekkel találkozni fogsz Amikor „távoli Dockerről” beszélünk, három szempontot kell figyelembe venni: helyi fejlesztés, de konténerek futtatása egy másik gépen (vagy WSL 2-ben), a backend/frontend szolgáltatások automatizált telepítése, valamint az éles konténerek kezelése (monitorozás, naplózás, újraindítások, hálózati szabályzatok stb.). A technológia ugyanaz; ami változik, az a vezénylés módja.

A hagyományos backend szolgáltatásokon túlA Docker egy kevésbé ismert, de annál hatékonyabb funkciót kínál: grafikus alkalmazások (e-mail kliensek, IDE-k, analitikai eszközök stb.) futtatását távoli konténerekben, és azok elérését böngészőből VNC-n keresztül WebSocketen keresztül. Ez egy kényelmes módja annak, hogy nagy teljesítményű szervereket használjunk, amikor a számítógépünk nem elég erős.

A Docker futtatástól a Docker Compose-ig egy távoli szerveren

Docker Compose használata távoli szerveren

A manuális telepítés meglehetősen gyakori mintája Ez egy GitHubon található kódtárból, egy Dockerrel telepített távoli Ubuntu szerverből és egy CI/CD munkafolyamatból (például GitHub Actions) áll, amely a következőket teszi, amikor egy olyan ágra küldesz kódot, mint a development o main:

  • Csatlakozz a távoli szerverhez SSH-n keresztül.
  • Állítsa le és távolítsa el a működő tartályokat.
  • Töltse le az új rendszerképeket a Docker Hubból (vagy a saját beállításjegyzékéből).
  • Fuss docker run minden szolgáltatáshoz.
  • Hagyd, hogy az Nginx (vagy a használt fordított proxy) átirányítsa a forgalmat az egyes konténerek portjaira.

Amikor Docker Compose-ra váltasz A folyamat jelentősen leegyszerűsödik, mivel a konténerek egyenkénti kezelése helyett a teljes vermet (frontend, backend, adatbázis, gyorsítótár stb.) egyetlen fájlban definiálod. docker-compose.yml, hálózataival, köteteivel és környezeti változóival együtt.

A legegyszerűbb (és meglehetősen gyakori) gyakorlat a GitHub Actions használatával A munkafolyamatnak végre kell hajtania a következőt: cd a távoli szerveren lévő projektkönyvtárba (ahol a docker-compose.yml) és hajtsa végre az olyan parancsokat, mint:

  • docker compose pull hogy elhozza a legújabb képeket.
  • docker compose down a régi tartályok megállításához és eltávolításához (opcionálisan --remove-orphans).
  • docker compose up -d --build ha magáról a szerverről építesz képeket.

Ez a megközelítés jól működik és meglehetősen robusztusFeltéve, hogy jól tudod kontrollálni a hitelesítő adatokat, a környezeti változókat és a köteteket, javíthatod a biztonságot, ha megakadályozod, hogy a GitHub Actions teljes root hozzáférést kapjon a szerverhez, korlátozod az SSH-kulcsokat, dedikált felhasználókat használsz, vagy akár a Dockert biztonságos, tanúsítványokkal rendelkező távoli szolgáltatásként teszed elérhetővé ahelyett, hogy mindent SSH-n futtatnál.

Nincs ennél sokkal jobb „varázsmód”. Egy egyszerű környezethez: a kulcs az automatizálás és a jó megírás docker-compose.ymlHasználj megváltoztathatatlan képcímkéket (pl. adott verziókat), és rendelkezz valamilyen visszaállítási mechanizmussal (pl. a levél vagy a képek előző verziójának mentése).

Távoli fejlesztői környezet Dockerrel, WSL 2-vel és VS Code-dal

Távoli Docker VS Code-dal és WSL 2-vel

Windows rendszeren nagyon gyakori a Dockerrel, WSL 2 használatával történő fejlesztés.A Docker Desktop for Windows egy WSL 2 alapú motort kínál, amely lehetővé teszi Linux és Windows konténerek futtatását ugyanazon a gépen, miközben a kódot VS Code-dal szerkesztheti és a helyi böngészőben tesztelheti.

A WSL 2 használatával létrehozott távoli konténerekkel rendelkező fejlesztői környezet beállításának tipikus munkafolyamata a következő:

  1. Telepítsd a WSL 2-t és egy Linux disztribúciót (például Ubuntut).
  2. Telepíted a Docker Desktopot Windowsra, és engedélyezed a „WSL 2-alapú motor használata” opciót a Beállítások > Általános menüpontban.
  3. A Beállítások > Erőforrások > WSL-integráció menüpontban kiválaszthatja azokat a WSL-disztribúciókat, amelyeken a Dockert futtatni szeretné.
  4. Ellenőrized a telepítést a docker --version és futás docker run hello-world a WSL disztribúción belül.

A konténereken belüli fejlesztés És nem csak a Docker motorként való használatáról van szó; a VS Code kulcsfontosságú. A WSL, a Dev Containers és a Docker bővítmények segítségével olyan dolgokat tehetsz, mint:

  • Nyisd meg a WSL-en belül tárolt projektmappádat közvetlenül a VS Code-ban.
  • Nyisd meg újra a mappát „egy fejlesztői konténerben” (Dev Container) egy Dockerfile és egy devcontainer.json amelyek leírják az ideális környezetet (Python verzió, Node stb.).
  • Hibakeresést végezhet az alkalmazásban a VS Code-ból, miközben az a konténerben fut.

Egy nagyon gyakori példa Django vagy Node.js projekttel működik: klónozod a repositoryt a WSL-en belül, megnyitod a mappát a következővel: code .Kiválaszt egy fejlesztői konténer definíciót (például „Python 3”), és a VS Code felépíti a rendszerképet, majd elindítja a konténert az összes függőséggel. Innen futtathatja, hibakeresheti és ellenőrizheti, hogy a kód Linuxon fut-e, még akkor is, ha a gazdagép Windows.

Ez a módszer akkor is hasznos, ha a géped nem túl erős.Mivel a terhelés egy részét áthelyezheted egy távoli szerverre a Dockerrel, és VS Code-dal csatlakozhatsz hozzá SSH-n és Dev Containers-en keresztül, szinte úgy működve, mintha lokálisan működne, de a szerver erőforrásaira támaszkodva.

Alkalmazások telepítése felhőszerveren Docker és Docker Compose segítségével

Dockerrel ellátott felhőszerver beállítása telepítésre kész állapotban A legtöbb szolgáltatónál nagyon gyors: kiválasztasz egy rendszerképet, amelyen már előre telepítve van a Docker, vársz néhány percet, és a géped készen áll a konténerek fogadására.

Egy tipikus minta egy egyszerű Node.js alkalmazás telepítéséhez Ez lenne:

  1. Hozd létre a Node.js projektet (például egy "Hello world"-t Express-szel) a helyi gépeden: projekt mappa, alkönyvtár app, npm initfüggőségek telepítése (például express) és a index.js amely egy alapvető üzenettel beállít egy szervert a 3030-as porton.
  2. Dockerizáld az alkalmazást egy dockerfile amely meghatározza az alapképet (például node:12), a WORKDIRMásolja az alkalmazásfájlokat, futtassa npm install és szabaddá tegye a belső portot.
  3. Adja hozzá a .docker figyelmen kívül hagyni hogy elkerüljük az olyan dolgok elhelyezését, mint node_modules.
  4. Hozzon létre egy dokkoló-compose.yml a projekt gyökerében, jelezve a verziót (például 3.8) és meghatározza a fő szolgáltatást, annak build, portleképezés (3030:3030) és a parancs (node index).

Miután elkészült a projekt és a komponálási felületA távoli szerverre történő telepítés általában a következő folyamatot követi:

  • SSH-n keresztül csatlakozol a szerverhez.
  • Klónozod a repositoryt, vagy feltöltöd a fájlokat (Git, SCP, rsync…).
  • telepíted dokkoló-levélírás ha még nem lenne ott (sok disztribúcióban külön kell telepíteni a Dockertől, például a bináris fájl GitHub-ról való letöltésével és végrehajtási jogosultságok megadásával).
  • Kivégezed docker-compose up (o docker compose up (a verziótól függően), hogy a képek letöltődjenek, az alkalmazás képfájlja létrejöjjön, és a tárolók elinduljanak.

Egy gyakran figyelmen kívül hagyott szempont a gyártó tűzfala.Ha a szolgáltatásod a 3030-as porton figyel, akkor meg kell nyitnod a tűzfalszabályokban, vagy létre kell hoznod egy külön szabályzatot, és társítanod kell a szerverhez. Ellenkező esetben csak egy „kapcsolat elutasítva” üzenetet fogsz látni kívülről, még akkor is, ha a konténer megfelelően fut.

Miután működőképes, hozzáférhet az alkalmazáshoz a szerver nyilvános IP-címének és elérhető portjának használatával (például https://IP_DEL_SERVIDOR:3030), vagy úgy, hogy ezt a portot egy fordított proxy mögé rejtjük, mint például az Nginx/Traefik, amely a 80/443-as porton figyel.

Távoli konténerek kezelése Plesk és Docker segítségével

Ha a Plesk-et használja vezérlőpultkéntA Docker bővítmény segítségével közvetlenül a webes felületről is kezelheti a konténereket, mind magán a szerveren, mind távoli Docker-gazdagépeken.

A Plesk számos operációs rendszeren támogatja a DockertCentOS 7, RHEL 7, Debian 10/11/12, az Ubuntu különböző verziói (18.04, 20.04, 22.04, 24.04), AlmaLinux 8/9, Rocky Linux 8.x és a frissített Virtuozzo 7. A Plesk for Windowsban a Docker nem helyben, hanem egy távoli gépen fut, amely Docker-hosztként működik.

Van néhány fontos korlátozás, amit szem előtt kell tartani:

  • A Docker bővítmény nem használható, ha a Plesk egy Docker konténeren belül van telepítve.
  • A távoli Docker szolgáltatások (azaz külső hosztok) használatához további licencre vagy speciális csomagokra (Hosting Pack, Power Pack, Developer Pack) van szükség.
  • A Plesk által kezelt Docker konténerek nem „migrálhatók”, bár az általuk használt adatokról kötetek vagy pillanatképek segítségével készíthet biztonsági másolatot.

A Plesk felületén képeket kereshet mind a helyi repositoryban (a hosztra már letöltött képfájlok), mind a Docker Hub-ban. Egy konténer elindításához a panel a következő útmutatást nyújtja:

  1. Látogatás Docker > Konténerek > Konténer futtatása.
  2. Keresd meg a kívánt rendszerképet, és tekintsd át a dokumentációját a Docker Hub-on (ha van ilyen).
  3. Opcionálisan válasszon ki egy adott képcímkét/verziót.
  4. Konfigurálja a konténer paramétereit (környezeti változók, portok, kötetek, memória, automatikus indítás stb.), majd kattintson a Futtatás gombra.

A Plesk lehetővé teszi a speciális beállítások kezelését is. Minden konténerhez: rendeljen hozzá portokat újra (automatikusan vagy manuálisan), döntse el, hogy a port elérhető-e az internetről vagy csak a localhostról, korlátozza a konténer által felhasználható RAM mennyiségét, definiálja a köteteket (elérési út a gazdagépen és a konténeren belül), vagy adjon hozzá annyi környezeti változót, amennyire szüksége van.

A távoli vezénylési szemponttal kapcsolatbanA Plesk képes együttműködni a „távoli Docker szolgáltatásokkal”. Ez magában foglalja a Docker démon konfigurálását a távoli gépen (például egy /etc/docker/daemon.json TLS és TCP socketek támogatásával), tanúsítványok generálása .pem és regisztrálja azt a hosztot a Plesk-ben Docker > Környezetek > Szerver hozzáadásaEzután megjelölheti az adott Docker csomópontot aktívként, és válthat a különböző szerverek között ugyanazon felületről.

Docker Compose stackek telepítése Pleskből

Ha már Docker Compose-t használ az infrastruktúrájáhozÉrdekelhet, hogy a Plesk kezelje a fájlokból származó "vermek" telepítését. docker-compose.yml.

A Compose telepítésének munkafolyamata Pleskben Ez viszonylag egyszerű:

  1. bemegy Docker > Vermek > Verem hozzáadása.
  2. Rendeljen egy projektnevet a veremhez.
  3. Válaszd ki a fájl létrehozásának forrását: szerkesztő (illeszd be a tartalmat), tölts fel egy fájlt a számítógépedről, vagy válassz ki egy meglévő fájlt egy domain webtárhelyén.
  4. Erősítse meg a konfigurációt, és engedélyezze a Plesk számára a definiált konténerek deklarálását és létrehozását.

Minden, ami az építési folyamat során felépül A társított Compose fájl a webhely fő könyvtárában tárolódik, amely hozzáférést biztosít a naplókhoz, köztes összetevőkhöz vagy a build által generált további fájlokhoz.

A Plesk a helyi képek kezelését is megkönnyíti.: -tól Docker > Képek Szűrhet, áttekintheti a különböző termékcímkéket, láthatja a felhasznált tárhelyet, és törölheti az elavult képeket a lemezterület felszabadítása érdekében. Ez fontos a korlátozott tárhellyel rendelkező távoli környezetekben.

Ha Nginxet használsz front-end webszerverkéntA Plesk proxy szabályokat alkalmaz (például a nginx.conf (a domainből) a forgalom Docker-konténereibe irányításához, még NAT mögötti forgatókönyvekben is. Ez megkíméli Önt a távoli szervereken a fordított proxy konfigurációk manuális kezelésétől.

Távoli konténerek kezelése a Portainerrel

A Portainer egy könnyű webes felület A Docker esetében ez nagyban leegyszerűsíti azok napi munkáját, akik nem szeretnének a parancssorban dolgozni. Maga konténerként funkcionál, és képes kezelni a helyi gépet vagy több távoli gépet (akár Portainer Agenttel is).

A Portainer telepítése a szerverre Docker használatával Általában ezeket az alapvető lépéseket kell követnie:

  • Hozz létre egy kötetet a Portainer-adatokhoz: docker volume create portainer_data.
  • Indítsd el a Portainer konténert a 8000-es és 9000-es portok leképezésével, majd csatold a Docker socketet (/var/run/docker.sock) és az adatmennyiség: docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer.

Ezáltal a Portainer a szerver 9000-es portján fog figyelni.Mint mindig, meg kell nyitnod a portot a tűzfaladon, vagy egy HTTPS fordított proxyn keresztül kell elérhetővé tenned. Amikor először férsz hozzá böngészőn keresztül, a Portainer megkér, hogy hozz létre egy rendszergazdai felhasználót, majd kiválaszthatod, hogy a helyi Dockert vagy további távoli hosztokat szeretnéd-e kezelni.

A Portainer panel meglehetősen intuitív.Látni fogod az aktív konténereket, azok naplóit, erőforrás-fogyasztási statisztikáit, Compose stackeket, hálózatokat, köteteket és egyebeket. És ami a legfontosabb, lehetővé teszi a konténerek újbóli létrehozását különböző paraméterekkel, a képfájlok frissítését, a stackek kezelését és több távoli szerver központosítását egyetlen felületről.

Grafikus alkalmazások futtatása távoli konténerekben, és azok elérése böngészőn keresztül

Amikor a számítógéped kifogy az erőforrásokból De ha nehéz grafikus alkalmazásokat kell használnod (például e-mail klienseket, IDE-ket vagy visszafejtési eszközöket), egy nagyon érdekes megoldás, ha Docker konténerekben futtatod őket egy nagy teljesítményű szerveren, és weben keresztül éred el őket.

Egy nagyon jól dokumentált esettanulmány Az ötlet az, hogy a Mozilla Thunderbirdöt egy konténerbe zárják, a grafikus felületét TigerVNC/noVNC segítségével elérhetővé tegyék, és a hozzáférést Caddy segítségével biztosítsák. Ez a koncepció szinte bármilyen Linux grafikus alkalmazáshoz újra felhasználható.

Az ilyen típusú grafikus konténer alapvető architektúrája általában a következőket tartalmazza::

  • Egy könnyűsúlyú VNC/X11 szerver (TigerVNC), amely kijelzőszerverként működik.
  • Egy minimalista ablakkezelő (OpenBox) ablakok kezeléséhez.
  • Kicsi, könnyen használható szervertípus easy-novnc amely a VNC-t WebSocketként teszi elérhetővé, és egy HTML oldalt generál a böngészőből való csatlakozáshoz.
  • supervisord vagy hasonló a konténeren belüli összes folyamat elindításához és figyeléséhez.
  • Maga az alkalmazás (Thunderbird, GIMP stb.) úgy van konfigurálva, hogy a távoli kijelzőn jelenjen meg (DISPLAY=:0).

A gyakorlatban egy munkakönyvtárat hoznak létre. (például ~/thunderbird) hová helyezik őket:

  • Un felügyelő.conf amely meghatározza az indítandó programokat: TigerVNC, easy-novnc, OpenBox és a fő alkalmazás, prioritásokkal, hogy a grafikus szerver az alkalmazás előtt induljon el.
  • Un menü.xml Az OpenBox konfigurálja az asztali menüt (fő alkalmazás, terminál, folyamatfigyelő htop-pal stb.).
  • Un többlépcsős Dockerfile amely az első szakaszban összeáll easy-novnc Go-val, és a második lépésben létrehozza a végső képet a Debianon, telepíti az OpenBoxot, a TigerVnc-t, a Supervisort, a konzol segédprogramokat, az alkalmazást (a példában a Thunderbirdöt), átmásolja a bináris fájlokat és a konfigurációkat, létrehoz egy nem root felhasználót és definiál egy állandó adatkötetet a /data.

A konténer alapértelmezett parancsát általában a supervisord-nek delegálják., elindítva, mint egy normál felhasználó a következővel: gosuAz adatmennyiség engedélyeinek módosítása után, a konténer indulásakor automatikusan elindul a VNC, a noVNC, az ablakkezelő és az alkalmazás, és Önnek csak az easy-novnc által elérhető HTTP portot kell elérnie.

Hogy robusztusabbá és felhasználóbarátabbá tegyük az internetetJó ötlet egy webszerver, például a Caddy elé helyezni, szintén egy konténerben, amely fordított proxyként működik a grafikus alkalmazásodhoz, alapvető hitelesítést biztosít (hashelt felhasználónév és jelszó), és opcionálisan elérhetővé tesz egy WebDAV-ot a fájlok eléréséhez. /data a helyi gépedről.

A megoldás összehangolása hálózatok, kötetek és Caddy segítségével

Az ilyen típusú telepítések rendszerezett tartása érdekében A szokásos megközelítés a saját Docker hálózat és egy vagy több adatmennyiség létrehozása:

  • Hálózat, például thunderbird-net, amelyet az összes kapcsolódó konténer megoszt.
  • Kötet thunderbird-data amely a grafikus alkalmazás felhasználói profilját és állandó adatait fogja tartalmazni.

A grafikus alkalmazás konténere Valami ilyesmivel indíthatod:

  • Politika --restart=always hogy az önállóan is talpra állhasson.
  • Kötetösszeállítás thunderbird-data:/data.
  • Internetkapcsolat thunderbird-net.
  • Azonosítható név (thunderbird-app(például), amelyet a Caddy a fordított proxyhoz fog használni.

Egy másik könyvtárban (pl. ~/caddy) Caddy képét felépítik a szükséges modulokkal (például a WebDAV bővítménnyel) és egy Caddyfile amely meghatározza:

  • Egy szerver a 8080-as porton.
  • Un reverse_proxy a thunderbird-app:8080 (vagy a port, amelyet a noVNC elérhetővé tesz).
  • További elérési utak a fájlok közötti navigáláshoz (/files) és WebDAV esetén (/webdav), mindkettő az adatmennyiség tartalmát szolgálja ki.
  • Egy blokk basicauth amely minden elérési utat véd egy felhasználóval és egy környezeti változókból beolvasott hashelt jelszóval.

A Caddy konténer létrehozásakorugyanaz a térfogat van összeszerelve thunderbird-data:/data, csatlakozik a hálózathoz thunderbird-net és a portja publikálva van (például -p 8080:8080) a gazdagépen. Ehhez csak a böngésződben kell megnyitnod a http://IP_DEL_SERVIDOR:8080Add meg a hitelesítő adataid, és kattints a Csatlakozás gombra a grafikus alkalmazás távoli használatának megkezdéséhez.

A hosszú távú karbantartás egyszerűAmikor frissítésre van szükség, leállíthatja és törölheti a konténereket, újraépítheti a lemezképeket az új verziókkal, majd újraindíthatja őket. docker run az adatmennyiség fenntartása, hogy a felhasználó beállításai és fájljai érintetlenek maradjanak.

Mindezen elemekkel (Docker Compose, Plesk, Portainer, VS Code, WSL 2, Caddy, noVNC…) Lehetőség van bármi beállítására az egyszerű háttérrendszer-telepítésektől kezdve a konténerbe csomagolt és böngészőn keresztül tökéletesen elérhető távoli asztali gépekig, kihasználva a gépednél sokkal nagyobb teljesítményű szervereket, és meglehetősen finoman kontrollálva a hálózatokat, a biztonságot, a tárhelyet és a frissítéseket.