V tomto příspěvku vám ukážu, jak používat Quay.io k hostování obrázků kontejnerů a jak se vyhnout nadměrnému zdanění registru kontejnerů omezením zbytečných požadavků na obrázky. Používám Buildah, Skopeo a Quay.io, ale tipy na omezení stahování obrázků budou fungovat s jakýmkoliv registrem kontejnerů, který můžete použít.
Na konci listopadu 2020 začal Docker Hub omezovat nebo omezovat počet obrázků kontejnerů, které můžete stahovat anonymně nebo jako Free Docker Hub uživatel. Pokud jste anonymní uživatel, můžete vytáhnout pouze 100 obrázků kontejneru za 6 hodin. Pokud jste uživatelem Free Docker Hub, můžete natáhnout 200 obrázků kontejneru za 6 hodin.
Když provádíme funkční testování kontejnerových nástrojů, na kterých pracujeme, jako jsou Buildah a Podman, tento limit obecně nepředstavuje problém. Když například vytváříte obrázek kontejneru pomocí souboru Containerfile a poté testujete výsledný kontejner, abyste viděli, jak se chová poté, co na něm spustíte konkrétní příkazy, obvykle vytáhnete obrázek hlavního kontejneru zadaný v FROM instrukce v Containerfile jednou. Pokud později znovu sestavíte kontejner od začátku, obvykle znovu použijete již stažený obrázek kontejneru, a proto nenarazíte na pult. V tomto scénáři škrcení nezpůsobuje žádnou bolest, ale vždy je v mé mysli.
Počáteční snížení interakcí Docker Hub
Našli jsme však místo, kde jsme narazili na škrcení na Docker Hub. Ed, můj kolega a jeden z vedoucích QE kontejnerového motoru, pro to vytvořil velmi pěkné řešení. Nejprve trochu pozadí. Před několika měsíci Ed snížil počet případů, kdy jsme načítali obrazy kontejnerů, které používají testy Buildah Continuous Integration (CI), opětovným použitím mezipaměti, kterou již vytvořil Podman. Předtím Buildah CI zneužíval chudé alpine
obrázek kontejneru, který se nachází v Docker Hub na docker.io/library
bez konce, spolu s fedora
, busybox
a několik dalších různých obrázků kontejnerů, které je mnohokrát táhnou. Toto schéma předběžného načítání, které Ed vypracoval, nejen urychlilo naše testy, ale také nám umožnilo snížit šířku pásma, kterou jsme používali na Docker Hub.
Navzdory těmto změnám začal Buildah CI v listopadu několikrát denně selhávat s touto chybou:Dosáhli jste limitu rychlosti stahování . Dosažení limitu rychlosti bylo způsobeno tím, kolikrát naše testy CI každý den proběhly. Přestože předběžné načítání snížilo počet, kolikrát Buildah CI potřebovalo k natažení obrázků, CI stále naráželo na omezení Docker Hub.
[ Mohlo by se vám také líbit: Jak implementovat jednoduchý osobní/soukromý registr bitových kopií kontejneru Linux pro interní použití ]
Řešení škrcení
Řešení, které Ed dodal, využívá flexibilitu Buildah a kontejnerové nástroje v repozitáři Containers na GitHubu. Nejprve si Ed vytvořil bezplatný účet na quay.io, zkopíroval tam obrázky a zveřejnil je. Ed si vybral quay.io, protože tam ukládáme spoustu obrázků kontejnerů a je to pro nás výhodné. Přesto to mohlo být místní úložiště obrázků kontejnerů nebo úložiště jiné společnosti.
Jako bonus, quay.io není omezeno jako Docker Hub.
Pomocí nástroje Skopeo zkopírujte počáteční obrázek
Řekněme, že váš projekt vyžaduje alpine
a centos:8
snímky. Začali byste vytvořením bezplatného účtu na quay.io s názvem myquayaccountname . Na hostiteli s nainstalovaným Skopeo byste pak spustili:
skopeo login -u myquayaccountname quay.io
skopeo copy --all docker://docker.io/library/alpine:latest docker://quay.io/myquayaccountname/alpine:latest
Poté opakujte a nahraďte alpine:latest
s centos:8
a tak dále pro všechny potřebné obrázky.
Nakonfigurujte quay.io
Obrázky jsou nyní na quay.io, ale ve výchozím nastavení jsou soukromé. Chcete-li je zveřejnit, přihlaste se zpět do webového uživatelského rozhraní quay.io a klikněte na název každého obrázku. Tím se dostanete na novou stránku s podrobnostmi o obrázku. Klikněte na ikonu ozubeného kola v dolní části levého navigačního panelu a vyhledejte možnost Zveřejnit tlačítko a stiskněte jej. Budete muset potvrdit OK a poté opakujte pro všechny obrázky s růžovou ikonou zámku.
V našem případě Ed první věc, kterou udělal, bylo stáhnout obrázky kontejnerů, které používáme, z Docker Hub a umístit je do úložiště obrázků kontejneru libpod na quay.io, které vytvořil.
Nakonfigurujte registry.conf pro zrcadlení
Problém omezení jsme vyřešili přesunem těchto obrázků. Nyní jsme však měli problém se změnou stovek, ne-li tisíců odkazů testů na tyto obrázky, aby CI stáhla z quay.io/libpod
spíše než docker.io/library
. Tato potřebná změna byla dokonalou ukázkou flexibility, kterou kontejnerové nástroje poskytují. Ed to řešil relativně malou změnou v konfiguraci, místo aby globálně měnil všechny testy.
Zde je to, co Ed vymyslel. Když Buildah hledá obrázek kontejneru, není napevno zakódován tak, aby se dal stáhnout z docker.io. Místo toho čte /etc/containers/registries.conf a určuje, ze kterého úložiště bitových kopií kontejneru má Buildah stahovat.
Ed jednoduše změnil tento soubor tak, že quay.io/libpod
je kontaktován vždy, když testy hledaly docker.io/library
. Pomocí našeho příkladu výše byste přidali následující řádky do /etc/containers/registries.conf
na všech systémech, kde chcete používat mezipaměť:
toml
[[registry]]
prefix=" docker.io/library"
location=" quay.io/myquayaccountname"
Všechny následující podman pull alpine
příkazy se načítají z vašeho zrcadla. Změnu, kterou Ed pro Podmana provedl, můžete vidět zde v této žádosti o stažení.
Chcete-li dále zvýraznit schopnosti zrcadlení v projektu kontejnerů/obrázků, který Buildah používá, můžete nastavit zrcadlení pro obrázky kontejnerů, které vám umožní stáhnout starý název z jiného registru. Zrcadlení bylo původně přidáno pro podporu odpojených prostředí. Prostředí bez připojení k internetu se softwarem, jako je OpenShift, často nemohou stahovat obrázky z nelokálních registrů, takže uživatelům umožňujeme zrcadlit obrázky v interních registrech, aniž by museli měnit software.
Zde je úryvek s dalšími informacemi z containers-registries.conf
soubor, který je součástí container/image
projekt:
$ man containers-registries.conf
Remapping and mirroring registries
The user-specified image reference is, primarily, a "logical" image name, always
used for naming the image. By default, the image reference also directly specifies
the registry and repository to use, but the following options can be used to redi‐
rect the underlying accesses to different registry servers or locations (e.g., to
support configurations with no access to the internet without having to change
Dockerfiles, or to add redundancy).
Upozornění :Tento postup vytvoří jednorázovou kopii obrázků kontejneru. Váš obrázek v mezipaměti magicky nevyzvedne bezpečnostní opravy zaslané na docker.io. (Ani nezachytí náhodný vandalismus, jako jsou odstraněné binární soubory nebo jiné převratné změny – nenechte mě začít.)
Další práce
S ohledem na upozornění je nyní údržba obrazu na vás a můžete zvážit přidání příkazů Skopeo ke zkopírování obrazu na začátek vaší testovací procedury. Dalším možným řešením je povolení veřejného zrcadla, jako je Google Cloud Registry (GCR), nebo možná další úprava registries.conf
soubor pro nastavení více zrcadel. A co je ještě lepší, toto se pravděpodobně skvěle hodí pro příkaz skopeo-sync, protože má pěkné CLI a lze jej použít se souborem YAML, který nabízí širokou škálu konfiguračních možností.
[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]
Sbalit
Existují různé způsoby, jak vyřešit zavedený škrtící Docker Hub, ale metoda, kterou Ed použil, byla rychlá, bezbolestná a rychle vrátila naše CI zpět online. Nyní, když máme prostor pro dýchání, můžeme pracovat na úplnějším řešení.
S touto změnou již testy Buildah nepřekračují limit a nezasahují do omezení z Docker Hub, takže problém s omezením je vyřešen.