docker vs lxc
Láttam, hogy többen használjátok a dockert. Van köztetek olyan, aki az lxc-t is ismeri? Ezek milyen viszonyban vannak egymással?
Annyi "tiszta", hogy a docker az kb. arról szól, hogy egy app/konténer és a konténer addig él, míg az applikáció. Az lxc konténerben több applikáció is futhat, valahol egy chroot és egy virtuális gép közt van.
Viszont amennyire emlékszem, az lxc konténerek update-elése belülről is mehet talán (bemegyek a konténerbe és mondjuk debian esetén egy apt-get upgrade-del letudom a dolgot), míg a docker esetében, ha jól értem, a karbantartóra kell várnom, hogy az image-et update-elje, csak utána tudom lerántani magamhoz a javított verziót.
Ez tényleg így van?
Ha így van, ez jó dolog éles környezetben, hogy esetleg több napos késéssel jön meg egy biztonsági javítás?
----
Mondjuk felmerültek bennem olyan apróságok is, hogy ha van egy webes applikációm, amihez tartozik web szerver, RDBMS, reverse proxy valami middleware (mondjuk egy komolyabb MQ szoftver), az kapásból négy-öt konténer, amiket már nem annyira egyszerű kézben tartani külön management szoftver nélkül.
(asszem, janoszen írta valahol, hogy ha kettőnél több konténer, akkor már kell valami management cucc föléjük)
■ Annyi "tiszta", hogy a docker az kb. arról szól, hogy egy app/konténer és a konténer addig él, míg az applikáció. Az lxc konténerben több applikáció is futhat, valahol egy chroot és egy virtuális gép közt van.
Viszont amennyire emlékszem, az lxc konténerek update-elése belülről is mehet talán (bemegyek a konténerbe és mondjuk debian esetén egy apt-get upgrade-del letudom a dolgot), míg a docker esetében, ha jól értem, a karbantartóra kell várnom, hogy az image-et update-elje, csak utána tudom lerántani magamhoz a javított verziót.
Ez tényleg így van?
Ha így van, ez jó dolog éles környezetben, hogy esetleg több napos késéssel jön meg egy biztonsági javítás?
----
Mondjuk felmerültek bennem olyan apróságok is, hogy ha van egy webes applikációm, amihez tartozik web szerver, RDBMS, reverse proxy valami middleware (mondjuk egy komolyabb MQ szoftver), az kapásból négy-öt konténer, amiket már nem annyira egyszerű kézben tartani külön management szoftver nélkül.
(asszem, janoszen írta valahol, hogy ha kettőnél több konténer, akkor már kell valami management cucc föléjük)
Az LXC illetve a Docker is
Az hogy te hogyan strukturalod az alkalmazasod, az a te dolgod, a kontener lehet egy teljes ubuntu image amiben tobb alkalmazast futtatsz, de akar egy darab binaris allomany, ami minden fuggoseget statikusan linkelve szallit.
Ha ubuntut hasznalsz mint "base" image, akkor az egy ubuntu, nem kell "varnod" semmire, akkor buildeled le ujra az alkalmazasod, amikor akarod (apt-get upgrade meg minden egyeb ugyanugy mukodik, mintha ott ulnel egy teljes erteku ubuntu elott). Folyamatos frissitgetes helyett (mellett) egyebkent inkabb erdemes megszabadulni a lehetseges tamadasi feluletektol.
Docker kontenerbe futas kozben is be tudsz kukkantani, es ha akarod tudod frissiteni, de minek veszodni ezzel, a kontenerek egyik nagy elonye, hogy "eldobhatoak", barmikor ujra kene oket buildelned (ami mar a frissiteseket is tartalmazza).
Igen, tobb kontener mar bonyolultabb tud lenni, de valoszinuleg egy docker-compose is tokeletesen megfelel a nagy atlagnak.
Köszi. Azért az, hogy mit
Azért az, hogy mit tudok tenni a docker konténerben, erősen függ ezek szerint az image-től is.
Amivel legutóbb próbálkoztam (talán python:3-alpine - de nem biztos), abban még ps sem volt, hogy a processzlistát megnézzem.
A támadási felületektől való megszabadulás alatt nem tudom, mit értesz... én úgy láttam, hogy "official image" van a legtöbb dologhoz, csak mit csinál aki mondjuk egy nginx konténert futtat és pon abban találnak valami veszélyes hibát?
Igen, az alpine-alapu
apk
-val fel tudsz tenni olyan dolgokat, amikre szukseged lehet (git
, etc).Ha egy kontener tele van mindenfele folosleges dolgokkal (pl. openssh szerver, amikor te egy sql adatbazist szeretnel csak futtatni), akkor az openssh egy tamadasi felulet. Ezt a felismertek a karbantartok is, ezert szoktak ezek az "official" image-ek meglehetosen lebutitottak lenni.
Erdemes megnezni egy-egy tenyleges base image
Dockerfile
-jat. Pl. itt egy ubuntu. Tenyleg annyi tortenik csak, hogy egy ures (FROM scratch
) kontenerbe kitomoritenek egy friss ubuntu image-et, nem rakosgatnak fel semmit extra dolgot.Az Alpine még jobb:
ADD rootfs.tar.xz /
CMD ["/bin/sh"]
Egyébként érdemes Dockert
Szerintem nem
Tök feleslegesnek tartom egy plusz réteg beékelését csak megszokásból.
Nézegettem én is, nem igazán
Közben annyit megnéztem, hogy
No majd ha nagy Alpine guru
Hát kicsi a valószínűsége,
A docker-ben elég szépen működget, fizikai vasra biztosan nem tenném, de háromszor meggondolnám azt is, hogy virtuális gépbe telepítsem. :)
Egyelőre még semmi, majd csak
Kérdeztem már régebben én is.
Docker management
Onnantól kezd érdekessé válni a helyzet, amikor mondjuk a web szerverből (vagy külön alkamazás - konténerből) egyszerre több példányt kell futtatni, terheléselosztással. Akkor kell fölé vmi load balancer.
Lxc-t nem ismerem, Dockerrel kapcsolatban pár dolgot azért tisztáznék.
Pl egy egyszerű LAMP szervert is meg lehet csinálni egyetlen konténerben is, de célszerű legalább a MySql szervert külön venni, akkor már lesz egy Apache-PHP konténered és egy MySql. Ha esélyes, hogy több példányt szeretnél majd az alkalmazásból, akkor máris kikerül a PHP is (pl fpm). A lényeg, hogy annyira érdemes szétbontani, ami a majdani éles üzemeltetés szempontjából a legoptimálisabb.
Futó Docker konténerbe is "be tudsz nézni", telepíteni / update-elni amit szeretnél, de amikor újra buildeled, csak az lesz benne, amit az image tartalmaz. Magyarul futásidőben ki tudod próbálni, amiket szeretnél, majd ha meg van a döntés, hogy mi hogy legyen, ezeket szépen beírkálod az image-be, rebuild és teszt.
Ahogy Bence is írta, az alpine image-ek fő tulajdonsága, hogy kicsik, mondjuk sok más image-re is igaz, hogy csak a legszükségesebb dolgokat tartalmazza.
Én leginkább Apache-PHP-MySql-Memcached-még pár "extra" konténereket használok, ezeknél is azt tapasztalom, hogy mondjuk egy
php:7.2-apache
- ból kiindulva a saját Dockerfile-om lesz 50 - 100 sor, mire minden számomra szükséges extension és beállítás is benne van. Szóval a "hivatalos" image-ek kiindulásnak nagyon jók, de többnyire kell hozzájuk tenni ahhoz, hogy neked is jó legyen.SZERK.: kimaradt az élettartam. :)
A Docker konténered addig "él", amíg le nem törlöd. Az image-ed úgyszintén, illetve ha változik az "őt" leíró dockerfile, akkor rebuild esetén változik az image és a konténer is.
Tehát csak rajtad múlik, hogy meddig "él", bármikor nyugodtan eldobhatod. (Ha csak egy konténert törölsz, a tárlolt image-ből pillanatok alatt létre lehet hozni újra, nem kell mindig nulláról buildelni, sőt, rebuild-kor is felhasználja az előző build során cachelt - és használható - köztes image-eket.)