( enpassant | 2017. 04. 12., sze – 16:26 )

Egy kicsit próbálok segíteni a Docker megértésében.
Egy konténerben általában egy programot csomagolnak be az összes szükséges függőségével és konfigurációjával, de azért kívülről is tovább konfigurálható marad.
Az így összecsomagolt programot könnyen elindíthatod több példányban (akár egy gépen belül is), ezek egymástól elkülönülten (sandbox) fognak futni, mintha külön gépeken mennének.
Nagyon kicsi a plusz erőforrás igénye, alig több, mintha natívan futna az adott program a gépen.
Nagyon jó a fejlesztőknek, mert nem kell törődniük a cél (production) gépen futó egyéb környezettel, mert a szükséges környezetet ők állíthatják össze.
Emiatt nagyon jó az üzemeltetőknek is, mert szintén nem kell törődniük az egyes programok összeférhetőségével.
Az alap operációs rendszernek, ami a docker-be kerül, általában valami nagyon kis erőforrás igényűt választanak, pl. AlpineOS.
Pl. van egy JVM alapú web-es alkalmazásod, amihez kell mondjuk MongoDB. Ekkor becsomagolod a webes alkalmazásod egy olyan csomagba, amiben már benne van a JRE is, így önállóan futni képes. MongoDB-ből van gyári, akár használhatod azt is, de készíthetsz sajátot is. Elindítod a MongoDB-s csomagot (bekonfigurálva az adatbázis helye a gépen), majd elindítod a webprogram csomagot.
Ha több példányban akarod futtatni (minden kliensednek saját program és adatbázis), akkor indíthatsz több mongodb csomagot és több webprogram csomagot.
Ha skálázni akarod a programodat és úgy is van megírva, hogy lehet, akkor egyszerűen elindítasz pl. egy haproxy docker csomagot, majd a webprogramodból annyi példányt, amennyit akarsz (a haproxy-ba beregisztrálva). Így ha jönnek be sorban a kérések, akkor a haproxy szétdobja őket a futó programok között. Ha egyik programod lehal, akkor a többi szépen kiszolgálja a kéréseket.
Röviden és nagy vonalakban ennyi.