Jedním z problémů počítačového programování je, že se neustále používají stejná jména pro různé účely. Například výraz namespace se používá mnoha různými způsoby. Často jsem zmatený, když lidé mluví o jmenných prostorech v Kubernetes. Někteří lidé například slyší tento termín a myslí si o virtuálních clusterech, ale když to slyším, myslím na jmenné prostory Linuxu používané s moduly a kontejnery. Podobně obrázek může odkazovat na obraz virtuálního počítače, obraz kontejneru nebo obraz OCI uložený v registru kontejnerů.
[ Také by se vám mohlo líbit: 7 zábavných funkcí pro přenos kontejnerů/obrázků pro Linux ]
Ve světě kontejnerů však neexistuje nadužívanější termín než kontejner .
Nedávno jeden uživatel vytvořil problém s Podmanem a vyjádřil svou frustraci nad touto terminologií:
Nejasná terminologie:obrázek vs. kontejner
Rozumím tomu, že obrázek je šablona pouze pro čtení, zatímco kontejner je věc pro čtení a zápis. Vždy. Pokud je tedy něco kontejner, pak to podman i buildah považují za kontejner. Když je něco obraz, pak to podman i buildah považují za obraz.
Volám buildah z --name abc scratch. obrázky buildah a obrázky podman mají stejný výstup a novou věc nepovažují za obrázek.
podman container ls nic nezobrazuje, takže nová věc není z pohledu podmanů kontejner.
kontejnery buildah však vrátí novou věc, takže nová věc je kontejner (s NÁZVEM KONTEJNERU=abc , NÁZEV OBRÁZKU=scratch , BUILDER=*=ano ID IMAGE ="").
Nová věc je tedy kontejner z perspektivy buildah, ale není to kontejner z pohledu podmanů. To je naprosto matoucí.
Popište prosím rozdíl mezi kontejnerem, pokud jde o buildah, a kontejnery, pokud jde o podman.
Myslím na kontejnery jako spouštění procesů v prostředí nebo něco, co je připraveno ke spuštění. Naproti tomu obrázky jsou potvrzené kontejnery, které jsou připraveny ke sdílení s ostatními za účelem vytvoření nových kontejnerů.
Kontejnerové motory, se kterými pracujeme – Podman, Buildah, CRI-O a Skopeo – všechny sdílejí stejný koncept obrázků.
Obrázky jsou definovány v kontejnerech/obrázcích a uloženy v různých úložištích nebo transportech, jako jsou registry kontejnerů, archivy Docker, archivy OCI, docker-daemon a kontejnery/úložiště. O těchto typech skladování nebo přepravy jsem psal v předchozím článku.
Většina lidí si myslí, že obrázky jsou umístěny v kontejnerech/úložištích nebo registrech kontejnerů. Ve zbytku tohoto popisu se zaměříme na kontejnery/sklad.
Mimochodem, Skopeo ve skutečnosti není kontejnerový motor, protože nemá žádnou koncepci kontejnerů. Místo toho se Skopeo zabývá pouze obrázky kontejnerů a jejich přesouváním mezi různými typy úložiště kontejnerů.
Kontejnerové/skladovací kontejnery
Knihovna kontejnerů/úložišť také poskytuje svůj vlastní koncept úložného kontejneru. Skladovací kontejnery jsou v zásadě meziskladovacím obsahem, který ještě nebyl potvrzen. Představte si to jako soubory na disku a nějaký JSON popisující obsah.
Podman, Buildah a CRI-O používají úložné kontejnery . Všechny tři kontejnerové motory mají také další specifická data.
Buildah kontejnery
Kontejnery Buildah zahrnují další obsah odkazující na různé příkazy, které tvoří Containerfile nebo Dockerfile.
Například Workingdir, proměnné Env a další data se používají k vytvoření obrazu kontejneru.
Kontejnery Podman
Podman má vlastní datové úložiště dat souvisejících s kontejnerem Podman. V databázi Podman je uloženo mnohem více dat než v databázi Buildah. Můžete si představit databázi Buildah jako podmnožinu databáze Podman.
Kontejnery CRI-O
CRI-O má také své vlastní datové úložiště pro popis svých kontejnerů.
Všechny tři nástroje se vyvíjely odlišně a mají různé představy a požadavky na vlastní kontejnery.
Například kontejnery CRI-O se vyvinuly se spoléháním se na jediného démona, který je řídí. Důraz je kladen na výkon a potřebu sdílet stovky/tisíce odpovědí na Kubernetes CRI za sekundu. Protože CRI-O ví, že je jediný, kdo se zabývá úložištěm dat, může využít výhod ukládání informací do paměti. CRI-O se nemusí starat o další procesy, které přicházejí a mění kontejnery bez jeho vědomí.
Na druhé straně společnost Podman potřebuje jednat s více uživateli svých kontejnerů současně. Musí se více spoléhat na zamykání systému souborů a zajistit, aby stovky spustitelných souborů Podman mohly spolehlivě sdílet stejné úložiště dat. Mluvili jsme o případném sloučení Podmanova datového úložiště do CRI-O, aby CRI-O a Podman mohli lépe spolupracovat, ale postupem času máme pocit, že riziko/přínos je těžké ospravedlnit sloučením.
Buildah byl také vyvinut jako nezávislý nástroj. Správci zatlačili zpět na převzetí nepotřebné váhy a složitosti datového úložiště Podman pro malý nebo žádný další přínos. Kontejnery Buildah mají jeden účel:vytvořit image kontejneru, zatímco většina kontejnerů Podman je spíše o spouštění aplikací a služeb. Kontejnery Buildah neobsahují všechny informace, které by Podman vyžadoval.
Jak by Podman zacházel s kontejnerem vytvořeným pomocí buildah from scratch
příkaz?
K těmto částečně vytvořeným nádobám bychom ještě potřebovali zacházet jinak. Podman je tedy vidí jako ekvivalentní nebo dokonce uvedené ve výchozím nastavení v podman ps
příkaz by vedlo uživatele ke zmatku.
Kompatibilita
Podman skutečně umí s těmito kontejnery pracovat.
Nejnovější verze Podman nyní mohou obsahovat seznam úložných kontejnerů dostupných v systému:
$ podman ps -a --external | grep buildah
578edf9430ee scratch buildah 13 days ago storage working-container
Tyto kontejnery můžete připojit a odpojit:
# podman mount working-container
/home/dwalsh/.local/share/containers/storage/overlay/a4f596beaabdc78efc7694a67d690097e327aa12bbc59165d011e62b646e93c0/merged
# podman unmount working-container
working-container
Můžete také odstranit tyto kontejnery:
$ podman rm working-container
working-container
Tyto kontejnery můžete také vytvořit pomocí podman build
. Tyto kontejnery jsou samozřejmě vytvořeny pouze dočasně během stavby. Protože tyto kontejnery Buildah nemají stejná data jako kontejner Podman, Podman je nemůže spustit a zastavit a podman ps
nezobrazuje je, když jsou spuštěné.
Podman má také podobnou schopnost pracovat s kontejnery CRI-O.
[ Naučte se základy používání Kubernetes v tomto bezplatném cheatu. ]
Sbalit
Pokud jde o pojem kontejner , kontext je často kritický. Pochopení rozdílu mezi použitím je zásadní. Pokud jde o naše kontejnerové nástroje, sdílíme většinu základního obsahu, úložiště a knihoven. Existují však oprávněné důvody, proč má každý nástroj mírně odlišné pojmy nebo definice nebo jejich kontejnery.