Kontejnery nemají vlastní jádro (běží pod jádrem hostitelského systému). Kontejner v Linuxu je jenom skupina procesů, které jsou izolované od ostatních procesů v systému. Možná znáte chroot – to je kontejner na úrovni souborového systému. Nějaký adresář v systému určíte jako kořenový adresář pro nějaký proces – a ten proces pak vidí jako kořenový adresář zvolený adresář a nemůže se dostat „výš“. (Samozřejmě pokud výš nevedou třeba pevné odkazy.) Kontejnery dělají to, že takhle oddělí skupinu procesů i v dalších oblastech – síťově, procesy (procesy ve skupině nevidí procesy mimo skupinu), uživatele atd. Přibližně si to můžete představit tak, že jádro zařídí, že určitá skupina procesů vidí systém tak, jako kdyby na počítači běžely jen tyto procesy, a vše ostatní je před nimi schované. (Ve skutečnosti to není tak jednoduché a dá se určit, co které procesy uvidí.)
V kontejneru si teoreticky můžete spustit jeden proces a bude to fungovat. Linuxové aplikace jsou ale většinou dělané tak, že používají sdílené knihovny a další aplikace. Takže když chcete spustit nějakou aplikaci v kontejneru, potřebujete, aby ten proces v souborovém systému, který vidí, měl i potřebné knihovny a další aplikace. Můžete mu poskytnout to, co máte ve svém systému. Ale kontejnerové technologie jako Docker nebo PodMan dělají to, že nainstalují bokem aplikaci a vše, co potřebuje. Takže ta instalace není závislá na vašem prostředí, ale vše potřebné si nese s sebou. Vy si tak nemusíte zaneřádit svůj systém věcmi, které nepotřebujete (potřebuje je jenom ta aplikace), a můžete pro tu aplikaci používat třeba knihovny v jiných verzích, než máte na svém systému.
No a když potřebujete aplikaci a všechny její závislosti, můžete si to poskládat ručně. Ale přesně tohle přece dělají linuxové distribuce. Takže se to velice často dělá tak, že vezmete nějakou hotovou distribuci, do ní si nainstalujete požadovanou aplikaci a její závislosti – a pak celý ten souborový systém vezmete a použijete ho pro kontejner. A to je to, čemu se říká, že máte „OS v kontejneru“. Tj. jádro máte pořád z vašeho počítače, ale soubory uvnitř toho kontejneru jste vytvořil pomocí nějaké distribuce – abyste se nemusel starat o závislosti.
Zmiňovaný Alpine Linux se často používá proto, že je to sama o sobě malá distribuce, takže v to kontejneru nemáte moc balastu. Když použijete nějakou velkou distribuci, ta už v základu (ještě než nainstalujete libovolný program) nainstaluje spoustu knihoven a utilit, které pak v tom kontejneru ve skutečnosti nebudou potřeba, jenom tam zabírají místo.
Ale dělají se i kontejnery „z čisté vody“, kdy si tam prostě ručně dáte ty soubory, které potřebujete. Pokud máte staticky slinkovanou binárku, která nemá žádné závislosti, stačí vám ta jediná binárka – pak je zbytečné k ní tahat nějakou distribuci. A nebo ta aplikace závisí na omezeném množství knihoven, tak si ten obraz vytvoříte ručně.