A felhőalapú technológiákra váltás egy izgalmas kihívás - ha tudod miként kezdj neki! Ebben a cikkben szeretném megosztani...
ASP.NET 5: Docker konténerben Linuxon
Gulyás Gábor“Microsoft loves Linux”, szokták mondani. Az elmúlt évben egyre többször hallhattuk ezt a kijelentést. És talán nem is olyan meglepő, hogy ennek a szeretetteljes kapcsolatnak az egyik gyermeke a Linuxon futtatható ASP.NET lett. Lássuk, hogy miként tudjuk ezt az együttműködést megoldani a Dockerrel!
Mi az a Docker?
Mielőtt még belefognánk abba, hogy Linux rendszerünket jól tele pakoljuk mindenféle csomaggal és egy halom kódot legépeljünk, ismerkedjünk meg először a Docker és a konténer fogalmakkal. Legegyszerűbb módja ennek pedig az, ha megértjük a mögöttes problémát, amire megoldást adnak ezek a technológiák. Szoftverfejlesztőként minél több projektben vettünk részt eddig, annál nagyobb az esélye hogy előfordult már velünk az az eset, amikor az ügyfél rendszeréből hiányzott valami komponens, amire az alkalmazásunk épít. Legyen az a PHP esetében egy mcrypt, esetleg egy asztali alkalmazásnál a .NET keretrendszer, bármi.
A Docker egy olyan technológia, mely alkalmazásunkból egy olyan csomagot – úgynevezett konténert – hoz létre, mely nem csak a kódunkat, de egy teljes futtatókörnyezetet is magába foglal. Ezzel az alkalmazásunk nem csak hogy egyszerűen mozgathatóvá válik különböző gépek között, de bizonyos mértékben izoláltabb környezetet is kapunk. A virtuális gépekkel (VM) ellentétben azonban van egy nagy előnye ezeknek a konténereknek, melyet a következő képen láthatunk.
Virtuális gép (VM)
A virtuális gépek esetében – bal oldalt – egy teljes operációs rendszert futtatunk virtualizált környezetben. Fel kell telepítenünk rá minden szoftvert, keretrendszert, amire csak szükségünk lehet, az alkalmazást pedig ebben a virtuális gépben (VM) fogjuk futtatni. Ezzel a megoldással könnyen búcsút mondhatunk rengeteg szabad memóriának a gazdarendszerben.
Docker
A Docker – jobb oldalt – ezzel szemben a gazdarendszer erőforrásait használja fel, az alkalmazások pedig futtatókörnyezetükkel és függőségeikkel együtt, izoláltan működnek – persze nem olyan mértékben, mint egy virtuális gép esetében, ugyanis a rendszerhez bizonyos formában hozzáférnek ezek a környezetek.
Mindkét technológiának megvan a maga előnye és hátránya, azonban alkalmazások futtatására és kitelepítésére a Docker egy jóval hatékonyabb megoldásnak bizonyulhat.
Docker telepítése
Követelmények
A Docker jelenleg csak 64 bites Linux szerverekre telepíthető, azonban a készülőben lévő és Technical Preview stádiumban elérhető Windows Server 2016 már szintén támogatja a konténeres technológiát. A cikkben egy Ubuntu 15.10-es rendszerre fogjuk telepíteni, de a hivatalos dokumentációban található leírás rengeteg másik disztribúcióra is, mint például Debian, Red Hat, vagy SUSE.
A 64 bites rendszeren kívül a másik kitétel, hogy rendszerünk legalább 3.10-es kernelen fusson, ugyanis a Docker Engine olyan technológiákra épül, melyeket ettől a verziótól fölfele támogatnak csak a Linuxok. A kernel verziót a következő parancs hozza elő:
[ecko_code_highlight language=”shell”]$ uname -r
4.2.0-16-generic[/ecko_code_highlight]
Új apt források megadása
Hogy a Linux disztribúciónknak megfelelő Docker Engine kerüljön letöltésre az apt-get által, konfiguráljunk be egy új forrást. Ehhez a következő parancsokat kell beépelnünk:
[ecko_code_highlight language=”shell”]$ apt-get update
$ apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv –keyserver hkp://p80.pool.sks-keyservers.net:80 –recv-keys 58118E89F3A912897C070ADBF76221572C52609D[/ecko_code_highlight]
Egy tetszőleges szövegszerkesztővel – mint például a nano -, hozzuk létre és szerkesszük az [ecko_code_highlight language=”shell”]/etc/apt/sources.list.d/docker.list[/ecko_code_highlight] útvonalon elérhető állományt, töröljük ki a tartalmát – ha volt benne valami – és a rendszertől függően a következőt írjuk bele:
- Ubuntu 12.04 (LTS): deb https://apt.dockerproject.org/repo ubuntu-precise main
- Ubuntu 14.04 (LTS): deb https://apt.dockerproject.org/repo ubuntu-trusty main
- Ubuntu 15.10: deb https://apt.dockerproject.org/repo ubuntu-wily main
A Docker más Ubuntu rendszereket nem támogat, így mindenképpen ezen verziók egyikével kell rendelkeznünk!
Mentsük el a fájlt, majd haladjunk tovább a következő parancsokkal:
[ecko_code_highlight language=”shell”]$ apt-get update
$ apt-get purge lxc-docker
$ apt-cache policy docker-engine[/ecko_code_highlight]
Telepítés
Ha minden követelménynek eleget tesz rendszerünk és beállítottuk az apt-hoz a forrásokat, telepíthetjük a Docker Engine-t:
- Frissítsük be először is az elérhető csomagokról szóló információkat.
[ecko_code_highlight language=”shell”]$ sudo apt-get update[/ecko_code_highlight] - Telepítsük a Docker Engine-t.
[ecko_code_highlight language=”shell”]$ sudo apt-get install docker-engine[/ecko_code_highlight] - Indítsuk el a docker daemon-t.
[ecko_code_highlight language=”shell”]$ sudo service docker start[/ecko_code_highlight] - Ellenőrizzük, hogy a docker megfelelően elindult-e.
[ecko_code_highlight language=”shell”]$ sudo docker run hello-world[/ecko_code_highlight]
A parancs lefuttatásával egy image fájlt töltünk le a Docker központi tárából, ami a fenti képen látható szöveget fogja kiírni számunkra. Néhány hasznos tanácsot is kapunk tőle, hogy merre is induljunk kezdőként.
ASP.NET a Linuxon
Miután meggyőződtünk róla, hogy a Docker Engine működik, írjuk be a következő parancsot:
[ecko_code_highlight language=”shell”]docker run -d -t -p 8080:5004 cicorias/dockermvcsample2[/ecko_code_highlight]
Ha minden számláló végigment, mindent letöltöttünk, akkor navigáljunk a szerverünkön a 8080-ás portra a böngészőből és – ha mindent jól csináltunk – a következőt fogjuk látni:
Nem, ez nem egy statikus oldal, ez valóban egy ASP.NET alapú oldal, amit mi éppen most a Linux rendszerünkről futtatunk!
A továbbiakban
A Docker működtetése nem egyszerű, erre rá kellett jönnöm az első próbálkozásaim során, így egyelőre érdemes az eddig olvasottakat megemészteni, kicsit ismerkedni magával a technológiával, esetleg belenézni a dokumentációba. A cikk következő részében bemutatom, hogy mik is azok a képfájlok a Docker-ben (amikből kettőt is letöltöttünk egyébként próbálkozásaink során), valamint hogy miként készíthetünk sajátot egy ASP.NET MVC alkalmazásból.
Mit gondoltok? Futtatni fogtok .NET oldalakat Linux-on ezek után? 😉