Docker vs. Config management

Fórumok

Egy ideje ismerkedem a Dockerrel, de nem igazán sikerült dűlőre jutnom vele, hogy igazából miért is lenne nekem jó.
Az első problémám, hogy konfiguráció menedzsment eszközökkel (Puppet, SaltStack, etc) ugyanúgy kényelmesen tudom kezelni a környezeteket akár Dockerrel. A második pedig, hogy vannak vele IO problémák, ha az alkalmazásom például használ MySQL-t/MariaDB-t, akkor érzékelhetően visszaesik a performancia, annak így pedig nem látom értelmét, hogy az alkalmazás környezetének egy részét konténerekbe pakolom, a másik fele meg marad a hoszt gépen.

Ha valakinek van mélyrehatóbb tapasztalata a témában, azt szívesen meghallgatnám.

Előre is köszönöm!

Hozzászólások

A dockert arra szánták, hogy a szervereiden futó alkalmazásokat el tudd szeparálni egymástól. Pl.: Apache, Smtp. A lényeg, hogy ha feltörik az egyiket, akkor csak az egy szolgáltatást tudtak megtámadni. Másik oldalról meg támadás esetén kuka a konténer és indítasz másikat még ki nem javítod a hibát.Az adatbázis részéről nincs tapasztalatom.

Az SMTP (nem a POP3/IMAP szerver, csak az SMTP!) tök jól elvan egy konténerben. Nem kell neki tárolnia tartósan semmit, ha van queue annak a tartalmát bukhatod, de megoldható, hogy csak üres queue-val dobd el a konténert. Sima ügy.

Az apache is teljesen okés, a konténerbe rakod a www tartalmát. Ha valamit változtatni akarsz a www tartalmán, akkor új konténert csinálsz és a régit kicseréled az újra. Ez is sima ügy.

Ezek speciel megoldható példák és még jók is. Persze vannak nehézségek (pl. hova logoljanak ezek a démonok), de megoldhatóak.

Volt 100+ gépem, és simán ment az összesnek/egy csoportnak/egy gépnek a tetszőleges átkonfigurálása, átállítása más feladatra, meg tudtam mondani hogy pl. redis-ből melyik verzióval jöjjön föl a kiszolgáló, legyen-e mellette például nginx vagy sem, stb.
Igaz ez még fizikai gépekkel működött, de vm-ekre is össze lett rakva hasonló (nem tudom, hogy mi lett a sorsa annak a megoldásnak, mert eljöttem attól a cégtől) - igaz, ezekben az OS mindenütt azonos alaprendszert takart (bár simán lehetett volna tetszőleges számú különböző alaprendszer is), az egyes alkalmazások (patch-ek) viszont "önhordóak" voltak egy-egy saját, read-only(!) könyvtáron belül, az adataikat egy rw-ben csatolt külön területen tárolva.

A Docker igazi előnyei csak bizonyos típusú alkalmazásoknál jönnek elő, ott is csak akkor, ha bizonyos típusú munkafolyamatok mentén szerveződik a fejlesztés és az üzemeltetés.

Mire gondolok pontosabban?

Az alkalmazás legyen horizontálisan skálázható, működjön úgy, hogy sok kicsi, önálló gépre szétosztva működőképes, illetve lehetőségek szerint a node-ok számának növelésével közel lineárisan növekedjen az áteresztőképesség. Ezzel a klasszikus egygépes alkalmazások marha nagy része kiesik, nem optimális Docker-ben futtatni (bár lehet, de minek).

Az alkalmazás egy-egy node-ja legyen állapotmentes, ne akarjon semmilyen adatot önállóan tárolni. Ezzel a klasszikus relációs adatbázisok, mint a MySQL vagy az Oracle szépen kiesnek, ezeket sem célszerű Docker-ben futtatni (bár szintén lehet).

(Megjegyzés: fejlesztői környezetben, ahol nem zavar, ha az adatbázisodat időnként egyszerűen eldobod, ezek a limitációk úgymond nem számítanak, ezért ott lehet érdemes ilyenekkel szívózni, csak éles rendszerre ne így akard átvinni a dolgokat.)

Az alkalmazást ne zavarja, ha egy-egy node-ját "csak úgy" kikapcsolod és beraksz a helyére egy újat. Kiesik minden, ami nem áll le/indul el legfeljebb pár másodperc alatt, ezekre megint nem ideális a Docker (persze működhet).

A fejlesztési folyamat legyen olyan, hogy az artifact, ami eredményeképpen létrejön, hozzon létre egy új Docker image-et. Ha .war fájlokat kell belekalapálni a Docker-be telepített JBoss-ba, akkor a Docker inkább hátráltatni fog, nem segíteni. Ez egy csomó üzemeltetéssel kapcsolatos terhet ró a fejlesztőkre, amit sokszor inkább nem kérnének, de emiatt bukják a Docker előnyeinek nem-fejlesztéssel-kapcsolatos részét.

Az üzemeltetés legyen olyan, hogy elfogadja, a programok hibásak, és néha jobban megéri egyszerűen újraindítani őket, mint kivizsgálni hogy mi volt a hiba és megoldani azt. Ez nagyon-nagyon nem intuitív szokott lenni az üzemeltetők körében.

Mindemellett az üzemeltetés ne átadott fekete dobozként kezelje a fejlesztések eredményeit, hanem értse, hogy minek kellene történnie bennük, illetve mi történik bennük. Ennek az első felét általában az üzemeltetők nem kérik, a második fele kapcsán meg eléggé gyerekcipőben jár még a Docker.

Szóval akkor mégis, mire jó? Mit lehetne futtatni benne?

Arra jó, hogy egységes kereteket adjon a fejlesztésnek és az üzemeltetésnek, hogy közelebb hozza őket egymáshoz, bizonyos aspektusokat standardizáljon.

Arra is jó, hogy a nagyon kellemes tulajdonságokkal rendelkező alkalmazások (horizontálisan skálázható, állapotmentes, adatokat nem tároló, eldobható/cserélhető node-okból álló, jól monitorozható stb.) alkalmazások egy ideális környezetben fussanak. Ilyen alkalmazás nem sok van, de egy elég jó, erős példa egy webes alkalmazás, amelynek a frontendje állapotot nem tárol, a backendje pedig valami jófajta NoSQL adatbázis.

Ehhez tök jó a Docker. Ritka az ilyesmi...

"Szóval akkor mégis, mire jó? Mit lehetne futtatni benne?"

Én is sokat agyaltam rajta. Egy erőltetett példát találtam:
- Adatbázist az OP adja
- Apache-ot az OP csinálja
- A WWW mappát, benne egy webes alkalmazással Dockerben adom át az ügyfélnek.
- Verziókövetés úgy megy, hogy új docker tölthető le.

Kicsit erőltetett. Gombhoz a kabátot...

+1, de inkább ott van előnye, ahol a "fejlesztő" az adott rendszerben elérhető komponenseknél korszerűbbet/újabbat/mást szeretne - azt szépen odacsomagolja a vackai mellé, és kész.
Az, hogy egy konténerben milyen komponensek vannak, azoknak a frissítése hogyan viszonyul a futtató OS-ben lévő motyókhoz, meg úgy általában kinek a felelőssége naprakészen tartani biztonsági szempontból az egész kócerájt... Nos, ez még eléggé képlékeny, mondhatni éles üzemi körülmények között nem biztos, hogy szeretnék ilyen "statikusra buildelt" lomot látni...

Személy szerint látok benne fantáziát, bár még productionban nem használjuk, de szándékunkban áll elsősorban webes alkalmazásoknál. Jelenleg Openvz + SaltStack a preferált környezet.

Gyakorlatilag a docker = openvz + provisioning + néhány dokumentált API és automatizmus lxc alapokon (szemben az openvz-vel, ami nincs a hivatalos kernelfában).

Először is a konténerek eldobása nem szükségszerű, de van helyzet amikor ez hasznos funkció...

Docker előnye a szabványosodás, ezáltal más által készített (preferáltan a hivatalos kiadók) alkalmazások interfészelhetők egymással illetve könnyen lehet építeni a más munkájára, s csak a hozzáadott értékkel kell foglalkozni.

Szerintem az alábbiak a kulcspontok (hangsúlyozom mindent meg lehet oldani kézzel, de az egyszerűség, szabványosítás és persze a hype a lényeg szerintem -utóbbi miatt sok okos ember foglalkozik vele így még jobbá válik-):
- host egy vagy több mappája beadható a guest-be, mintha az övé lenne, így az adatok valójában a hoston vannak... ezáltal bármikor kicserélhető is (pl ubuntu -> centos váltás kell, hogy ugyan az a verzió maradjon és legyen security frissítés az adott libraryhoz... stb)
- reláció hozható létre (név + portok átadása környezeti változókban) egy vagy több konténer között így bonyolult struktúra leképezhető ezáltal (legyen egy vagy több gépen futó megoldás mögötte) -tipikusan több különböző verziójú, fejlesztésű alkalmazások interfészelése
- előzőhöz tartozóan környezetek könnyű létrehozása/törlése (teszt környezet, fejlesztői környezet, hiba vadászásához környezet stb)
- könnyű csere lehetősége (megfelelő tervezés esetén)

docker szemlélete elsősorban alkalmazás orientált... azaz nem az a lényeg, hogy fusson az operációs rendszer sok alkalmazással (valamint milyen oprendszer fut) és majd azon elindít egy kiemelt alkalmazást, hanem hogy a futtatni kívánt lehetőleg egy alkalmazás fusson, mindegy min és hogyan, csak szabályzottan legyen az alkalmazáshoz az interfész (valamilyen hálózati porton keresztül)

Ezért is látom első sorban a hasznosítási lehetőségeit hálózati alkalmazásoknál pl moduláris webalkalmazások...

Miert kellene ujra generalni a Docker image-t, ha valtoztatni kell az adaton? Dinamikus adatot erdemes a hoston tarolni, mig minden szoftvert, konfiguraciot Docker-ben. Pl Java War is mehet kulso volume-ba, nem kell miatta ujrageneralni semmit.

https://docs.docker.com/userguide/dockervolumes/

Ajanlom elolvasasra a -v kapcsolot.

MySQL is mukodik igy, amig csak egy Docker hasznalja. Az elony, hogy mindenhol ugyanaz a verzio lesz MySQL-bol. Ami miatt lassu lehetett a MySQL az a konfiguracio a host-hoz kepest, elvileg hoznia kell a nativ teljesitmenyt: minimalis a veszteseg az UFS miatt.

Az üzemeltetés legyen olyan, hogy elfogadja, a programok hibásak, és néha jobban megéri egyszerűen újraindítani őket, mint kivizsgálni hogy mi volt a hiba és megoldani azt.

Mindemellett az üzemeltetés ne átadott fekete dobozként kezelje a fejlesztések eredményeit, hanem értse, hogy minek kellene történnie bennük, illetve mi történik bennük.

a Docker hasznalata vagy mellozese szempontjabol ugyan tokmindegy, nem is ertem, hogy kerult a felsorolasba, de fontosnak tartom megjegyezni, hogy ezek egymasnak ellentmondo viselkedesmintak, amik rengeteg kart okoznak es olyan helyeken szoktak megjelenni, ahol a fejlesztok felelosseg nelkul villazzak at a kodot a keritesen.

igazad van, en nem voltam egyertelmu. az uzemeltetoktol nem varhatod el, hogy ne erdekelje oket, ha valami lerohad, masreszt meg ne kezeljek fekete dobozkent. pontosabban elvarhatod, csak nem megy.

A http://www.infoq.com/articles/devops-team-topologies oldalrol emelnek ki ket reszletet:
The SRE team is willing to take on all Production responsibility (on-call, incident response, etc.) as long as stringent operational criteria are met by the software produced by the Dev team.
es
suitability: organizations with a high degree of maturity or rigorousness with respect to operational excellence

ahol van SRE, ott sem az SRE miatt mukodnek ezek a dolgok, hanem mert a fejlesztok es uzemeltetok kozti "szerzodes" jol van definialva.

Nekem az jött le, hogy...

Nézzük ezt a 3 réteget: OS->futtatókörnyezet->alkalmazás

Ha két alkalmazást akarsz futtatni, amiknek eltérő (akár egymást kölcsönösen kizáró) futtatókörnyezet kell, akkor azt gondolhatnád, hogy több OS példány kell, lehet pl. virtualizálni. Nagy divat ez, például SharePoint telepítés arról szól, hogy telepítesz egy tucat szervert, X darabon fut egy frontend IIS (és más semmi), Y darabon fut egy caching szerver (és más semmi), darabon MSSQL (és más semmi), stb. Ebben elég sok az erőforráspazarlás.

És akkor jön a konténer, ami eggyel fentebb, a futtatókörnyezet szintjén vág. Kicsit olyan, mint a virtualizálás, de nem az egész OS-t virtualizálja, kevesebbet eszik, de az alkalmazásnak mindegy, hogy mi fut alatta. Plusz még annyi előnye van, hogy idejében megfogták és szabványosították.

Van olyan (ritkán), hogy egy SW gyártó egy teljes VM image-et ad oda neked, hogy tessék, ez itt a SW/appliance/akármi. Ez egy fekete doboz, vagy hozzáférsz és tudod frissíteni a benne levő OS-t, vagy nem, túl nagy a mérete, sok erőforrást eszik, stb. Egy konténeres alkalmazást több praktikus okból könnyebben lehet terjeszteni.

--

És rossz esetben egy adott funkcionalitást megvalósító komponensből m darab konténer esetén m+1 darab van a rendszerben - mert az alap OS-ben is lehet más verzió. Tartsd naprakész állapotban a motyót... Ha egy libet le akarok cserélni a konténerben, akkor buildeljem újra, dobjam ki a régit, indítsam el az újat... Ha egy példány valósítja meg az adott funkciót, akkor príma módon szolgáltatáskiesés minden frissítés...

Ezt a lib frissítés miatti szolgáltatáskiesést egy példány esetén nem értem. Ennek mi köze a konténeresdihez? A libet a futó progi alatt nem tudom kicserélni, hiszen épp használva van, hiába települt az új. Ha jól értem, a konténeren belüli telepítés (pl. yum/apt-get) után egy docker commit (+esetleg push), valamint stop és run kell az újraindításhoz. Ez miben más, mint VM-ben vagy fizikai vason újraindítani a cuccot?

Egy ideje ismerkedem a Dockerrel, de nem igazán sikerült dűlőre jutnom vele, hogy igazából miért is lenne nekem jó.

akkor talan erdemes lenne a docker oldalan a bemutatkozo rizsat elolvasni...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

Mindig azt szoktam mondani, hogy ha valakiben felmerul a kerdes, hogy miert is jo neki a Docker, akkor 99.99% esellyel nem jo neki a Docker.

Hatalmas hype van korulotte (ld. Gartner Hype Cycle), rengeteg eszkoz hianyzik ahhoz, hogy normalisan lehessen hasznalni, es az uzleti igenyek nagy reszere nem ez a megfelelo megoldas. Weboldalakra, webalkalmazasokra egy mikroszkoppal merheto reteget kiveve nem tulzottan alkalmas. Ha hatalmas "felhos" alkalmazasokat irsz, ahol fel-le skalazol a mindenfele komponensekbol, nincs permanensen igenyelt darabszam, akkor lehet ilyesmivel jatszani.

Jo pelda lenne erre pl egy build cluster, ahol a kulonbozo jobtipusoknak kulonbozo fele Docker containerek indulnak es minden job egy-egy containerben fut izolalva. De ehhez kell egy scheduler, ami megalmodja, hogy mikor mibol mennyi kell, stb stb. Ez nem annyira trivialis.

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT

Mert a Docker nem egy virtualizacios technologia, hanem egy frontend mar letezo virtualizaciok folott (pl. LXC). Egy csomo minden amit egy statikus VM-tol elvarsz, nem teljesul a Dockernel. Igy peldaul a statikus IP cim kiosztast vagy a fix hostneveket ugy kell beletuszkolni kulon. Ha meg statikus VM-nek hasznalod, akkor mi ertelme Dockert hasznalni? Hasznalj kozvetlenul LXC-t vagy KVM-et vagy amit szeretnel. Semmi elonye nem lesz a Dockernek.

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT

"Ha meg statikus VM-nek hasznalod, akkor mi ertelme Dockert hasznalni?"

Nekem ezek a tippeim: Sokkal olcsóbb üzemeltetni (1 kernel példány, nincs virtualizáció). Két VM lassabban kommunikál, mint 2 konténer a kevesebb TCP/IP stack miatt. Kevés helyet foglal (az image-ek a rétegelés miatt csak egyszer vannak fizikailag jelen, így pl. két CentOS alapú image csak 1 CentOS-t tartalmaz.) Gyors újraindítani. A commit/push/pull miatt könnyű karbantartani.

De lehet, hogy tévedek, nincs gyakorlati tapasztalatom.

Sokkal kevesebb erőforrást használ egy Docker, mint egy önálló VM. A VM-nek kell "dedikált" CPU és RAM, a Docker pedig osztozik.

Egy 4GB RAM-mal szerelt Ubuntu is képes 30-50 docker-t futtatni, míg VM-ből talán az erőforráspazarló VirtualBox fut el rajta, abban max 2 VM.

Fu, nagy itt a keveres. Mint irtam, a Docker nem egy onallo virtualizacios technologia, csak egy frontend letezo technologiak ele. Defaultbol (!) a Linux kernelbe epitett LXC tamogatast hasznalja, de kepes mas virtualizacios technologiat is hasznalni.

Ha csak arra akarod hasznalni, hogy osztozz eroforrasokon, az LXC pont ezt csinalja, a Docker sajatos mukodese nelkul.

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT

"Docker nem egy onallo virtualizacios technologia"

Igen, eddig azért eljutottam. Nagyjából tudom, mi az az LXC, namespaces, cgroups.

"de kepes mas virtualizacios technologiat is hasznalni."

Képes vagy csak képes lenne, ha lenne más is?

Viszont az alap kérdés nem az volt, hogy a Docker front-end-e vagy sem, hanem az, hogy mi a haszna úgy alapvetően a konténeresdinek. Erre próbáltam pár lehetséges választ találni, nyilván megfelelő tapasztalat híján nem feltétlenül sikerült.

Kepes. Vannak mindenfele konnektorok hozza. Hogy mennyire mukodnek, azt nem tudom, en csak LXC-vel teszteltem, de nem voltam hasra esve tole.

Mi haszna a konteneresdinek? - Gyk minden alkalmazasnak indithatsz sajat kontenert tul nagy overhead nelkul. Limitalhatod az eroforrasokat, de nem kotelezo. Ha erdekel, akkor szivesen megmutatom privatban, en hogy hasznalom. (Marmint az LXC-t, nem a Dockert.)

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT

Publicban is megmutathatnád, én is LXC-t használok. Nekem azért szimpatikus a Docker, mert könnyen lehet minimális overhead-del működő konténert csinálni, amit aztán a fejlesztők reprodukálni tudnak a saját gépükön is.
A Docker már megy Windows/OSX alatt is, a Docker Compose is hamarosan jön Windowsra.

-----
„Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben.”
rand() a lelke mindennek! :)
Szerinted…

"A Docker már megy Windows/OSX alatt is"

Van egy olyan rossz érzésem, hogy a Windows még mindig nem állt át Linux kernelre. Ezért a Docker Machine pl. VirtualBox-ba dobhat be egy kis Linuxot, hogy abban futtassa a konténereket. A semminél több, de nem egyszerűbb akkor már inkább alapból Linuxon dolgozni? Persze ennél sokkal többet tud a Docker Machine, de akkor sem látom az igazi értelmét.

Nekem egyszerűbb, de nem mindenkinek. Nem megyek bele abba a flame-ba, hogy minden fejlesztő egységes környezetet használjon, mert nem mindig oldható meg.
Valóban használ Virtualboxot ilyen esetben, de nem mindegy, hogy ezt neked kell összelőni, vagy megy magától.

-----
„Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben.”
rand() a lelke mindennek! :)
Szerinted…

az lxc sem virtualizacio, hanem egy kontener technologia, igy a dockert sem egy vm-mel kell osszevetni.

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

A dockert az az LXC, ami hordozhato, de eredetileg arra talaltak ki, hogy futtatsz benne egy parancsot es kesz. Bar mi egesz szep kis IaaS rendszereket alakitottunk/alakitunk ki benne. Csak kell hozza mondjuk supervisord vagy monnit, vagy akarmi hasonlo.

Nekunk bejott.

Én úgy látom elég sok itt a félreértés. A Docker arra jó, hogy nagy mennyiségben tud olyan alkalmazásokat futtatni, melyek webalkalmazások és/vagy nagyon jól skálázódó alkalmazások. Valamint üzemeltetésben van egy nagyon nagy előnye: amikor jönnek a különböző fejlesztők különböző verziójú és egymással pl nem kompatiblis, vagy egy rendszeren nem jól viselkedő libekkel, különböző PHP/Perl/Python/Ruby stb verziókkal küldik az alkalmazásaikat, amiket az ügyfél/diviziók/stb számára futtatni KELL és old meg... Nem csak hype ez, hanem egy teljesen az élet szülte megoldás. A megvalósítás persze hordoz hátrányokat, gyorsan fejlődik, alakul még. Ami a rkt akart választ adni, ők is észbe kaptak, és elkezték modulárisra alakítani a rendszert. Van már multi-host networking, régen is lehetett erre megoldást találni, még 1.7 és 1.8 előtt is.

Akik az állományok, www tartalom, mail stb miatt aggódtak, azoknak mondanám ,hogy van volume management, amivel akár a lokális vagy becsatolt könyvtárakat is lehet a rendszernek átadni. Az 1.8-tól már stabil(nak mondott) plugin/driver alapú volume managementtel pedig lehet mindenféle storaget használni, pl Ceph-et, EMC megoldásait stb. Eddig is volt lehetőség, még a swarm/compose/stb megoldás előtt a Flocker-rel, stb kezelni az "utazó" volume-okat. És lehetne folytatni. Attól, mert a magyar felhasználásra - mivel nincs meg a kultúrája - nem a legmegfelelőbb, attól még ez jó megoldás.

Az meg, hogy ezt üzemeltetni nehéz, IP kiosztásokat stb hogy kezeljük, azoknak pedig a figyelmébe ajánlom, hogy a Dockert nem az 1-2-3 fizikai szerveres környezetekre találták ki. Kit zavar, hogy más az IP éppen? A hostnevhez tartozó IP-t lehet frissíteni belső DNS-ben, lehet elé tenni ADC-t, vagy sima reverse proxykat. És igen, ezt össze kell állítani, meg kell tervezni, meg kell csinálni. Még, aztán már egyre több kész megoldás is van erre.

"egymással pl nem kompatiblis, vagy egy rendszeren nem jól viselkedő libekkel, különböző PHP/Perl/Python/Ruby stb verziókkal küldik az alkalmazásaikat" - lovon fordítva ülés esete. Normális helyen van fejlesztésekre vonatkozó elvárás a használható szoftververziókra nézve is, és nem az n+1. szoftvergányoló beszállító határozza meg, hogy mit használ, hanem a megrendelő írja elő, hogy a motyónak adott szoftverkörnyezetben kell működnie. Ilyen alapon egy fejlesztő jöhetne azzal, hogy neki tessen DOS-os futtatókörnyezetet adni Clipperrel meg dBase-zel, mert az ő alkalmazása azon fut, a másik meg mondhatná, hogy a cucc, amit szállít, az a.out bináris, és olyan környezetre van szüksége... Aztán a biztonságos üzemeltetés meg nagyívben le lesz sz@rva, mert a beszállító (szotvergányoló) marhára nem fog az általa szállított konténerben lévő komponensek biztonsági frissítéseivel foglalkozni, hanem kijelenti, hogy semmit sem szabad változtatni/frissíteni benne. És ha gáz van, akkor lehet, hogy az ő valagát is fogják rugdalni, de hogy az üzemeltetők lesznek a rúdaszpirin szopott végén, az 100...

Normális helyen van fejlesztésekre vonatkozó elvárás a használható szoftververziókra nézve is, és nem az n+1. szoftvergányoló beszállító határozza meg, hogy mit használ, hanem a megrendelő írja elő, hogy a motyónak adott szoftverkörnyezetben kell működnie

LOL :-) Most akkor vagy nagyon keves normalis hely van, vagy te nem talalkoztal meg olyan (sajnos) eletszagu helyzettel, hogy csak azert kell egy gepre mysql es postgresql is, mert az ugyfel egyik web fejlesztoje ezt szereti, a masik meg azt.

De fejlesztoi oldalrol nezve is nagyon jo a docker, mert nem kell 10 fajta linux disztrot figyelemmel kiserned (kernel verzio, lib-ek, c fordito verziok, csomagnevek, fuggosegek, stb.), hanem kiszemelsz 1 disztrot, csak azzal az 1-gyel dolgozol, aztan az eredmenyt szallitod, es mindenki boldog...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

Nem egy helyen volt szerencsém belső szabályzatokat írni, illetve véleményezni a külső és belső fejlesztésekkel kapcsolatos elvárások témakörében. És érdekes módon mindenütt előírható volt, hogy milyen komponensek és azoknak mely verziói elvártak, elfogadottak és mi az, ami nem használható.
Tény, hogy az olcsó péhápépistike-szintű kódgányolók ott nem rúgtak labdába, viszont az üzemeltetés és az IT-biztonsági területnek sem kellett hanyattsz0pnia magát, a karácsonyfának kinéző rendszerek miatt.
Ahol ez nem vihető keresztül, ott a rendszerek evolúciója helyett az entrópiája fog rettenet mértékben növekedni, ami semmilyen szempontból sem jó.

"fejlesztoi oldalrol nezve is nagyon jo a docker, mert nem kell 10 fajta linux disztrot figyelemmel kiserned" - megrendelőként már bocs, de sz@rom le a szállító nyűgjét: én fizetek, megmondom, mire és mit csináljon meg. Ha tudja, megcsinálja, ha nem, akkor köszviszlát, másé a meló. Egyébként meg nem kell 10-et, elég kettőt, esetleg hármat (pl. RHEL5/6, esetleg 7, az új fejlesztéseknél); bár ha valamilyen Java-s appszerveres dologról van szó, ott a szívás java a Java-ból következik, azt meg tényleg marha nehéz verzióról verzióra támogatni.
Megértem, hogy a fejlesztő a legutolsó utáni verziót szeretné használni, viszont a megrendelő meg óvatos duhajként inkább maradna a stabil, jól bevált, és mondjuk még 2-3-5 évig támogatott főverziók mellett - érthető okból.

És érdekes módon mindenütt előírható volt

mindenutt ... amivel te talalkoztal. Mas meg massal volt kenytelen talalkozni. De ertem a hatranyait a dolognak, csak van, amikor meg van mondva, mit kell szeretni.

megrendelőként már bocs, de sz@rom le a szállító nyűgjét: én fizetek, megmondom, mire és mit csináljon meg. Ha tudja, megcsinálja, ha nem, akkor köszviszlát, másé a meló.

biztos van olyan termek, amelynel megteheted, de olyan is, amelyiknel nem.

Megértem, hogy a fejlesztő a legutolsó utáni verziót szeretné használni, viszont a megrendelő meg óvatos duhajként inkább maradna a stabil, jól bevált, és mondjuk még 2-3-5 évig támogatott főverziók mellett - érthető okból.

fyi: pont erre jo a docker ;-) Mondjuk az RHEL 5/6 ebbol a szempontbol nem jo pelda, mert csak az RHEL 7-et tamogatja. De a megrendelonek az ujabb RHEL foverziokkal szembeni vaerziojat csokkentheti, hogy a kontener gyartoja az egesz kontenert supportalja...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

Öööö... ez nem egészen így van. Nagyon sokszor a megrendelő egy terméket vesz, aminek van egy függősége, amire annak szüksége van (adatbázis típus, java verzió, stb.). Ha ezen rendszerek szépen elszeparálva futnak, az szerintem nagyjából rendben is van, üzemeltető szempontból én ezt nyugisabbnak érzem, mint amikor a különböző verziójú könyvtárakat kell
egymáshoz reszelni, egy VM-en belül.

Ha mindenfélét szabad összevásárolni, akkor abból káosz lesz. A megrendelőnek alapvető érdeke (lenne), hogy a vásárlás során is figyelembe vegye a meglévő infrastruktúrát, a rendelkezésre álló, belső támogatással bíró platformokat és eszközöket. Belső támogatás nem csak az, hogy van már olyan és van vele tapasztalat, hanem azt is, hogy a meglévő infrastruktúrába, illetve annak a fejlesztési irányvonalába illeszkedő.
Ha van egy központi webkiszolgáló, akkor ott célszerűen PHP, RDBMS, meg mondjuk authentikácó témában meg lehet, és meg is kell határozni, hogy mi használható, és ha például egy Ruby-s motyóval jön valaki, akkor az üzemeltetési területtel közös döntés kérdése, hogy felvehető-e a Ruby a rendszer használható komponensei közé vagy sem.

Döntés kérdése, hogy beillesztik-e az adott terméket/eszközt a többi rendszer mellé/közé, vagy sem (dobozos termék), illetve megveszik-e az adott fejlesztő idejét/munkáját, ha az nem tud/nem akar a megrendelő által előírt eszközökkel/környezetben/környezetre fejleszteni.

legtöbbször csak odavágják, hogy tessék, itt van ez az alkalmazás, üzemeltesd...

azzal egyutt, hogy sokszor tenyleg ez van, kijarna a szivlapat annak, akitol ez elhangzik...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

Ha emberszámba veszik az üzemeltetést, akkor van egy szép lista arról, hogy milyen eszközök/komponensek használata kötelező, mi az, ami elfogadható, és mi az, ami tiltott. Ezek adják magukat: ha valamelyik skatulyába belefér az adott motyó, akkor aszerint kell eljárni, ha meg egyikbe sem, akkor goto 10, ahol a skatulyákat készítik, és eldönteni, hogy melyikbe kerüljön bele.

Ahol az üzemeltetés, illetve az architektura fejlesztéséért/jövőjéért felelős terület nélkül döntenek arról, hogy mit használnak, oda én is kiosztanék egy pár szívlapátos simogatás, csak amolyan nevelő célzattal :)

Mindketten úgy beszéltek a "fejlesztésről" és az "üzemeltetésről", mint két, egymástól független társaságról, amelyek amúgy passzióból egymást szívatják. Ha ilyen környezetet tapasztaltok magatok körül, akkor ott ne próbálkozzatok Docker-rel, csalódás lesz.

Kis olvasnivaló:

http://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-…

Teljesen más preferenciáik vannak a fejlesztőknek, mint az éles üzemi rendszereket üzemeltetőknek - holott mindkét oldal stabil motyót szeretne, ami a tapasztalatok alapján Docker esetében nem minden esetben valósul meg - és az még a jobbik eset, ha valamelyik területnek van némi tippje arra nézve, hogy miért instabil az egész kóceráj...

Tetszőleges DevOps könyvben egyik elsődleges problémaként azt emelik ki, hogy az üzem állandóságra törekszik, a fejlesztés meg változtatásokra, így kibékíthetetlen az alapvető ellentét közöttük, pont ezért jó a DevOps márkanév alatt a nagyon szorosan együttműködő üzemeltetés és fejlesztés.

Eleg sok helyen kell legacy szoftvereket uzemeltetni ilyen-olyan okbol kifolyolag. Ott a lib verziokkal tudnak elofordulni erdekes dolgok.

Egyebkent a kontenerezesnek van egy masik elonye is: konnyebb mozgatni az alkalmazasokat, hiszen csak attolod a kontenert egy masik vasra es uccu neki. IP cim es minden ugyanaz, had szoljon.

--
Pásztor János
Sole Proprietor @ Opsbears
Development Lead @ IXOLIT

nem tudsz elszakadni a VM koncepciotol :-) A docker kontenerizaciojanak kisebb az overhead-je, igy ha eddig 1 gepen volt egy komplett alkalmazas stack-ed, akkor ugyanugy maradhatsz 1 db hoston ugy, hogy a stack minden komponense egy kulon kontenerben fut...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

azert ad a docker 1-2 pluszt is: http://stackoverflow.com/questions/17989306/what-does-docker-add-to-lxc…, ill. az sem mindegy mennyi melo ugyanazt elkesziteni lxc-vel ill. docker-rel...

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

az OP felvetesere reagalva:
a konfiguracio-menedzsment egyik legnagyobb problemaja, hogy a gyakorlatban nem eleg jol definialt a kiindulasi pont, amire epitesz, hiszen nem eletszeru minden egyes rendszercsomagot CM-ben kezelni. emiatt nem ritka, hogy egy nem menedzselt csomag kepes a fejere allitani amugy mukodo rendszereket. erre szuletett megoldaskent pl. a Vagrant, amivel garantalni lehet, hogy - ha nem is irtuk le pontosan a kornyezetet CM-ben - ket, egymastol fuggetlen gepen ugyanazt az allapotot allitsuk elo a fejlesztoknek.
a Docker par szempontbol elter: egyreszt az UnionFS hasznalata miatt konnyebb osszeallitani a rendszert es kevesebb helyet foglal, masreszt az LXC miatt nincs virtualizalas, csak izolacio, ami gyorsabb, persze mas kerdes, hogy a halozati reteg ebbol a sebessegbol mennyit vesz vissza.

a kontener ilyen szempontbol Maggi kocka (ez legyen az alap), es a te munkamenetedhez passzoloan valaszthatod, hogy utana Puppettel vagy massal rakod ra az alkalmazast, vagy az is egy kontenerreteg lesz, vagy hogy Dockerfile-t adsz a fejlesztonek es/vagy a CM repo cimet. ismerek olyan helyet, ahol az eles alkalmazas is Docker alol fut, mert igy egyseges a pipeline, de olyat is, ahol csak a fejlesztok hasznaljak es tole fuggetlen deploy van VM-ekbe.