GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi linuxovým kontejnerem a obrázkem?

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.


Linux
  1. Jaký je rozdíl mezi env a set (na Mac OS X nebo Linux)?

  2. Jaký je rozdíl mezi fsck a e2fsck?

  3. Jaký je rozdíl mezi „vyhledat“ a „najít“ v Linuxu?

  1. Jaký je rozdíl mezi adduser a useradd?

  2. Jaký je rozdíl mezi voláním knihovny a voláním systému v Linuxu?

  3. Jaký je rozdíl mezi `su -` a `su --login`?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Jaký je rozdíl mezi příkazem locate a find v Linuxu

  3. Jaký je rozdíl mezi vyrovnávací pamětí a mezipamětí v Linuxu?