We DOcker
2014. június 9.
by balo
A probléma
A fejlesztés és üzemeltetés feladata sosem volt élesen elkülöníthető, bármennyire is szeretik a fejlesztők és rendszergazdák kölcsönösen egymásra hárítani a felelősséget.
Minden rendszergazda szembesült már a rémálommal, amikor egy szerveren többféle alkalmazást kellett futtatni. A legtöbb esetben ezek függőségei távolról sincsenek összehangolva, így szinte folyamatos a küzdelem a library verziókkal és mellékhatásokkal.
Másik gyakran előkerülő probléma komplex alkalmazásoknál a fejlesztők lokális környezetének kialakítása. Gondoljunk csak arra, hogy a megfelelő Java (Oracle vs OpenJDK vs IBM) és annak pontos verziójának beszerzése, különféle adatbázisok és egyéb komponensek telepítése akár egy napos művelet is lehet... Az olyan nagyvállalatok, mint például a Google, saját Ubuntu disztribúcióval oldja meg a problémáit. Ez óriási overhead, amit nem mindenki engedhet meg magának. A fentiekhez szorosan kapcsolódó hiba, amit szerintem már mindenki hallott vagy mondott legalább egyszer: "Nálam működött".
A megoldás
Az utóbbi néhány évben a fenti problémákat virtualizációval és ún. microservice-kkel igyekeztek orvosolni, nagyrészt csak az éles futó rendszerekben, ahol az ezeket menedzselő rendszereket beüzemelték. A fejlesztéseknek köszönhetően a virtualizáció overheadje jelentősen csökkent, de még mindig nem elhanyagolható a natívan futó alkalmazásokhoz képest. A másik két problémára is csak félmegoldást nyújt, hiszen ehhez a fejlesztői gépeken is virtuális gépet kellene futtatni, ami kényelmetlen és sok erőforrást használ.
Ekkor jött a Docker és kiütéssel győzött. A Docker egy linux konténer technológia, amivel egy operációs rendszeren belül elszeparálhatunk futtatókörnyezeteket, teljes értékű virtualizáció nélkül. A Linux kernelbe került új funkciók tették lehetővé az alkalmazások fejlesztésének, buildelésének és terjesztésének új korszakát (pl. cgroups).
Dockerfile
-ok segítségével specifikálhatjuk a konténer környezetét - például az operációs rendszert -, telepíthetünk és konfigurálhatunk alkalmazásokat, meghatározhatjuk a futtató felhasználót és még sok mást. Ezekből image-ket generálhatunk, amikből aztán bármennyi konténer példányt indíthatunk. Nem fogom teljesen bemutatni, mert a hivatalos leírásánál én sem tudnám jobban elmagyarázni. Tessék elolvasni :)
Fun fact, de épp ma adták ki az 1.0-ás, első stabil verzióját (több ezren már eddig is használták éles környezetekben). Érdemes elolvasni, hogy 15 hónap alatt honnan hová jutott el ez a nyílt forráskodú projekt.
On March 20, 2013, we released the first version of Docker. After 15 months, 8,741 commits from more than 460 contributors, 2.75 million downloads, over 14,000 “Dockerized” apps, and feedback from 10s of 1000s of users about their experience with Docker, from a single container on a laptop to 1000s in production in the cloud
A fenti statisztikából látszik, hogy jelenleg is sokan használják, de az is, hogy messze még a lehetőségek vége. A RedHat épp most dolgozik azon, hogy az OpenShift PaaS (Platform as a service) rendszerébe integrálva a felhasználók még könnyebben futtathassák az alkalmazásaikat. Érdemes elolvasni azt is, hogy a fejlesztőcsapat hogyan használja a Dockert fejlesztéséhez.
Hogyan használjuk mi?
A Profil és Körök egy komplex üzleti alkalmazás fájlokkal, adatbázissal, JavaEE alkalmazással és Wildfly szerverrel, illetve hamarosan egy Node.js frontenddel. A fejlesztéshez a belépési küszöböt az elmúlt évben jelentősen csökkentettük (tavaly volt még egy LDAP storage is!), de az újoncok még így sem boldogultak a környezettel.
Bármennyire hirdetik, hogy a Docker egyszerű, tapasztalatból tudhatjuk, hogy semmi sem az :) Pár napot eltöltöttem a szoftver szoros társaságában, de végül összeállt a Profil és Körök alkalmazásunk fejlesztői környezete 3 Docker image formájában. Egy shared data volume a perzisztens adatoknak, egy PostgreSQL szerver és a Wildfly alkalmazásszerver. Az eredmény megtekinthető a repóban, némi dokumentáció társaságában.
Biztos vagyok benne, hogy még lehetne javítani, alakítani rajtuk, de egy bíztató kezdet. Ha valaki készít egy seeds.sql fájlt, némi minimális adattal, akkor nem csak a körtagok, hanem bárki könnyedén be tud kapcsolódni a fejlesztésbe. :)
Egy potenciális jövőképben a körtagok kialakítják a continuous integration, continuous delivery környezeteket és talán élesben is használják majd a technológiát. A lehetőségek száma végtelen. Ha tetszik, amit csinálunk és megjött hozzá a kedved, akkor megtalálsz minket IRC-n.