GNU/Linux >> Znalost Linux >  >> Linux

7 zábavných funkcí pro přenos kontejnerů/obrázků v Linuxu

Jedna skvělá věc na používání kontejnerových nástrojů, jako jsou Podman, Buildah, CRI-O a Skopeo, je to, že jsou založeny na stejné knihovně pro stahování a vkládání obrázků, což jsou kontejnery/obrázky. Často popisuji containers/image projekt jako knihovna pro kopírování obrázků mezi různými typy úložiště kontejnerů. Toto úložiště může být v registru kontejnerů, v kontejnerech/úložišti, jako objekty systému souborů, jako jsou adresáře nebo tarbally, a dokonce přímo v démonu Docker. Mechanismus pro přesun těchto obrázků kontejnerů mezi různými typy úložiště kontejnerů se nazývá transport . Jedna z nejméně srozumitelných funkcí containers/image jsou různé transporty, které podporuje.

Doprava

Obrázek je určen pomocí transport:ImageName formát. Pokud není zadán žádný přenos, docker (registr kontejnerů) transport se standardně používá ve všech nástrojích kromě Skopeo. Skopeo vyžaduje, aby uživatelé vždy nastavili přenos.

Jednou ze skvělých věcí, které Docker udělal, bylo vynalézt myšlenku registru kontejnerů , což je v podstatě webový server, který obsahuje obrázky kontejnerů. Docker.io, quay.io a Artifactory jsou příklady registrů kontejnerů. Inženýrský tým Docker definoval protokol pro stahování a odesílání těchto obrázků z registrů kontejnerů, který nazýváme docker doprava.

[ Mohlo by se vám také líbit: 12 průvodců Podman, jak začít s kontejnery ]

docker://docker-reference

Odkaz na obrázek je uložen ve vzdáleném registru obrázků kontejneru. Příklad:quay.io/podman/stable:latest . Odkaz může obsahovat název hostitele na konkrétní registr.

$ skopeo copy docker://docker.io/alpine dir:/tmp/alpine
$ podman run docker://registry.fedoraproject.org/fedora:latest echo hello

Pro Podman a Buildah, docker:// je výchozí transport. Pro pohodlí jej lze upustit:

$ podman pull registry.fedoraproject.org/fedora:latest

Při použití krátkého názvu pro stažení obrázku jako fedora , Podman a Buildah používají seznam registrů k vytvoření reference Docker a pak ji zavolají pomocí docker:// doprava.

Containers/image také podporuje mnoho dalších transportů pro kopírování a ukládání obrázků kontejnerů.

oci:cesta

oci transport exportuje/importuje obsah obrazu kontejneru do místního adresáře za předpokladu, že je obraz v souladu se specifikací rozvržení obrazu Open Container. Manifest a tarball vrstvy jsou exportovány do adresáře jako jednotlivé soubory.

$ skopeo copy oci:/tmp/myimage docker://registry.example.com/myimage
$ podman run oci:/tmp/fedora echo hello

adresář

dir transport vypíše obsah obrazu kontejneru do místního adresáře, opět za předpokladu, že obraz je v souladu s rozložením obrazu Docker. Manifest, tarball vrstvy a podpisy jsou exportovány jako jednotlivé soubory do adresáře. Toto je nestandardizovaný formát, primárně užitečný pro ladění nebo neinvazivní kontrolu kontejnerů. Je velmi podobný oci přenášet, ale ukládá soubory ve formátu staršího dockeru.

$ podman save --format docker-dir fedora -o /tmp/fedora
$ podman run dir:/tmp/fedora echo hello

archiv dockeru

Dalším způsobem, který inženýři Dockeru vyvinuli pro ukládání a přepravu obrázků kontejnerů, je použití tar . tarball obsahuje všechny soubory, které tvoří obrázek kontejneru. Tyto tarbally byly původně vytvořeny pomocí docker save a podman save příkazy. Mohou být načteny zpět do místního úložiště kontejnerového enginu pomocí docker load a podman load . container/image knihovna převádí tento archivní formát na transport, což umožňuje jeho přímé použití jinými příkazy jako podman run dir:/tmp/fedora.tag echo hello nebo buildah from dir:/tmp/fedora.tar

$ skopeo copy docker://registry.fedoraproject.org/fedora:latest docker-archive:/tmp/fedora.img
$ podman run docker-archive:/tmp/fedora.img echo hello

Upozornění :Pomocí docker-archive není téměř nikdy správná věc. Formát je velmi nehospodárný jak pro úložiště, tak pro I/O. Doporučil bych uživatelům spustit dočasný docker/distribution místo toho registru.

oci-archiv

Tento formát je podobný docker-archive , ale namísto původního formátu bude ukládat jeden obrázek ve formátu OCI. Cesta je obrázek v souladu se specifikací rozvržení obrázku Open Container v adresáři na zadané cestě a je označen tagem.

$ skopeo copy docker-archive:/tmp/fedora.img oci-archive:/tmp/fedora-oci.img
$ podman run oci-archive:/tmp/fedora-oci.img echo hello

démon docker

Jedna z nejlepších funkcí containers/image je podpora pro docker-daemon doprava. Docker a Podman nesdílejí stejné úložiště. Nemohou, protože Docker ovládá zamykání svého úložiště v rámci démona. Zatímco Podman, Buildah, CRI-O a Skopeo mohou sdílet obsah, používají souborový systém prostřednictvím containers/storage .

Podman a další nástroje mohou pracovat s docker-daemon úložiště nepřímo, prostřednictvím docker-daemon doprava. To umožňuje kontejnerovým enginům přímý přístup k obrázkům dříve načteným démonem Docker nebo obrázkům vytvořeným docker build . Můžete také přesunout obrázky vytvořené Buildah a Podmanem přímo do démona Docker.

Něco jako toto:

podman run docker-daemon:alpine echo hello

Poznámka :Podman vytahuje obrázek z démona Docker a ukládá obrázek do containers/storage a poté spuštění kontejneru. Nevyužívá přímo úložiště Docker. Aby Podman mohl komunikovat s Dockerem, musíme jej spustit jako root, protože démon Docker vyžaduje práva root.

$ sudo docker pull fedora
$ sudo podman run docker-daemon:docker.io/library/fedora echo hello

Pokud vytvoříte obrázek pomocí buildah , můžete obrázek odeslat přímo do docker-daemon :

# ctr=$(buildah from fedora)
# mnt=$(buildah mount $ctr)
# install -m 0744 start.sh $/mnt
# buildah commit $ctr docker-damon:myimage

Poznámka :I když je v pohodě používat docker-daemon přepravy, jako je tato, je to funkce poslední možnosti s velmi vysokými I/O a náklady na úložiště. Konsolidace procesu tak, aby běžel v jednom nebo druhém storage/ecosystem je téměř vždy lepší. Například by bylo lepší vytáhnout obrázek z démona Docker a pak použít pouze containers/storage pro jeho spuštění.

$ sudo podman pull docker-daemon:registry.fedoraproject.org/library/fedora
$ podman run fedora echo hello

kontejnery-úložiště

Finální „transport“ ve skutečnosti vůbec není transport, ale spíše mechanismus pro uložení obrazu do místního úložiště vytvořeného pomocí containers/storage knihovna. Formát docker-reference je podrobně popsán v transportu Docker.

$ skopeo copy docker://registry.access.redhat.com/ubi8:latest containers-storage:ubi8:latest

Buildah a Podman ve výchozím nastavení ukládají své obrázky do úložiště kontejnerů:

$ podman image pull ubi8

Výše uvedený příkaz Podman rozšiřuje krátké názvy pro ubi8 na registry.access.redhat.com/ubi8:latest a poté použije docker:// transport stáhnout z registry.access.redhat.com . Poté uloží obsah přímo do containers/storage .

$ buildah push docker://quay.io/myrepo/myimage

Příkaz Buildah výše se podívá do úložiště kontejneru a poté vloží obrázek pomocí docker:// přepravu do registru quay.io.

[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]

Závěr

containers/image knihovna poskytuje vynikající způsob přenosu obrázků kontejnerů mezi počítači a různými druhy úložiště. Je nedílnou součástí motorů kontejnerů a poskytuje některé opravdu skvělé funkce. Ponořte se prosím více do dopravy pomocí manuálové stránky pro přepravu kontejnerů.


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

  2. Jak vytvářet, zobrazovat a mazat kontejnery Docker v systému Linux

  3. Co je Docker (a Linux kontejnery?)

  1. Historie nízkoúrovňových runtime kontejnerů Linuxu

  2. Jak vypsat Docker kontejnery

  3. Jak vytvořit vlastní obrázek z kontejneru Docker

  1. Může docker běžet uvnitř linuxového kontejneru?

  2. Co je uvnitř obrázku/kontejneru Dockeru?

  3. Proč používáme základní obraz OS s Dockerem, když kontejnery nemají hostovaný OS?