Nahoru
 

Kontejnery a virtualizace

Při vývoji softwaru v týmu často narážíme na problém, že každý člen ve svém operačním systému používá různé verze nástrojů a služeb (např. jiné verze kompilátorů atd.). To může vést k řadě nepříjemných problémů, které se většinou obtížně řeší a zdržují od práce. Naštěstí jsou pro nás řešením kontejnery.

Kontejner je standartní jednotka softwaru umožňující běh aplikace v různých běhových prostředích. Jinými slovy, kontejner izoluje software od prostředí, na kterém běží a tím pádem docílí stejného chování na různých strojích. Není tedy potřeba všude, kde chceme, aby aplikace běžela, doinstalovat konkrétní verze potřebných nástrojů. Mimo výše uvedený problém s verzemi nástrojů kontejnery řeší spoustu dalších nepříjemností (více v článku 6 creative ways to solve problems with linux containers and docker).

Princip fungování kontejneru

Při vytváření kontejneru pro naší aplikaci se uloží její běhové prostředí společně se všemi potřebnými binárními soubory (knihovny apod.), závislostmi a konfiguracemi. Máme pak jeden ucelený balík, který ke svému spuštění vyžaduje pouze nějaký program, který umí s daným typem kontejneru pracovat.

Nejznámějšími nástroji pro práci s kontejnery jsou Docker, Kubernetes nebo Fragate.

Rozdíl mezi virtuálním strojem a kontejnerem

Z výše uvedeného popisu a jiných definic dostupných na webu lze snadno zaměnit pojmy virtuální stroj a kontejner. Obě dvě technologie mají za úkol vytvářet speciální prostředí pro aplikace a izolovat jejich běh. Pojďme si ukázat rozdíl těchto dvou technologií na příkladu:

Mějme server, na kterém běží tři virtuální stroje. Tento server má hypervisor (technologie umožňující spravovat virtuální stroje), skrz který spustí tři oddělené virtuální stroje, jež mají vlastní operační systém. V něm poté spouštíme naše aplikace. Nástroje a služby, na nichž jsou aplikace závislé, musíme zajistit na každém operačním systému jednotlivých virtuálních strojů. Jednotlivé virtuální stroje pracují se serverem skrze hypervisor.

Schémá tří běžících virtuálních strojů
Obrázek č. 1: Schéma tří běžících virtuálních strojů

Na druhé straně mějme tři kontejnery běžící na nějakém serveru. Na serveru funguje jeden operační systém a služba pro práci s kontejnery. Jelikož je běhové prostředí aplikací určeno v kontejnerech, nepotřebujeme nastavovat operačnímu systému žádné závislosti a spuštění bude fungovat. Jednotlivé kontejnery sdílí a pracují přímo s jádrem operačního systému serveru.

Schéma tří běžících kontejnerů
Obrázek č. 2: Schéma tří běžících kontejnerů

Kontejnery jsou oproti virtuálním strojům daleko odlehčenější a užívají méně zdrojů. Jejich velikost je typicky v desítkách megabajtů, kdežto virtuální stroje zabírají řádově více. Pro řešení problémů pouze pro běh aplikací na různých typech operačních systémů se stejným jádrem se kontejnery hodí daleko více než virtuální stroje.

Bezpečnost

Vzhledem k přímému přístupu kontejnerů k jádru operačního systému nastává otázka, zda je jejich spuštění bezpečné. Přeci jen jádro operačního systému nabízí daleko více možností než hypervisor. Společnosti poskytující kontejnerové služby naštěstí berou bezpečnost vážně a věnují ji spoustu energie.

Často (např. Docker) kontejnerové služby nabízejí podpisovou infrastrukturu, kde každý kontejner lze podepsat a zvýšit tím jeho důvěryhodnost. Je to stejné jako u podpisu jakékoliv jiné aplikace. Na nedůvěryhodné (nepodepsané) kontejnery bude uživatel upozorněn.

Zároveň s podpisy můžeme v kontejnerových službách najít skenovací řešení pro hledání zranitelnosti jednotlivých kontejnerů. Dokonce existují i speciální služby soustředící se právě na tento typ zabezpečení (mezi ně můžeme zařadit třeba Twistlock).

Kontejnery nám umožňují zabalit aplikaci společně s konkrétními závislostmi na operačním systému. Jejich využití a poptávka po nich neustále roste. Nejedná se o stejný typ technologií jako jsou virtuální stroje, ačkoliv zde lze najít mnoho podobností. Z bezpečnostního hlediska se zdají být na první pohled velice zranitelné, avšak díky tomu, že společnosti vyvíjejí nemalé úsilí právě k zabezpečení se nemusíme bát je používat.

Pokud se chcete dozvědět více o tom, jak kontejnery fungují, neváhejte shlédnout následující video.

Zdroje: