Modul 7 — Virtualizace a kontejnery: Docker

33. Registry a distribuce image (Docker Hub, privátní registry)

Jak jsou image pojmenovány a verzovány, jak je publikovat na Docker Hub a jak provozovat vlastní privátní registry.

Odhadovaná délka studia: 50 minut · Stav: nehotovo

Technologie: Docker

Úvod a kontext

Sestavený Docker image je k ničemu, pokud ho nemůže použít nikdo jiný
než stroj, na kterém byl vytvořen. Registry je server, který image
ukládá a distribuuje — obdoba Gitu pro zdrojový kód, jen pro binární
artefakty kontejnerů. Tato lekce vysvětluje, jak jsou image
pojmenovány, jak je nahrát na veřejný Docker Hub a jak si postavit
vlastní privátní registry pro interní použití ve firmě.

Teorie

Anatomie jména image

Plné jméno image má tvar:

[registry-host[:port]/]jmenny-prostor/nazev-image[:tag]

Příklady:

  • nginx:1.25 — oficiální image bez explicitního registry hostu (Docker
    Hub je výchozí), bez jmenného prostoru (oficiální knihovna).
  • mycompany/backend:1.4.0 — image v jmenném prostoru mycompany na
    Docker Hubu.
  • registry.firma.cz:5000/team/backend:1.4.0 — image v privátním
    registry běžícím na registry.firma.cz:5000.

Pokud tag vynecháte, Docker automaticky doplní :latest — to je ale
jen konvence, ne technická záruka nejnovější verze. latest je
prostý název tagu jako kterýkoliv jiný a v produkci se mu doporučuje
vyhýbat
— nasazení podle latest není reprodukovatelné (nevíte
přesně, jaký obsah jste nasadili, a příští docker pull může přinést
jinou verzi). Produkční nasazení má vždy cílit na konkrétní verzovaný
tag, ideálně i s ověřením přes digest (kryptografický hash obsahu
image, sha256:...), který je na rozdíl od tagu neměnný.

Docker Hub a přihlášení

Docker Hub (hub.docker.com) je výchozí veřejný registry. Postup
publikování:

docker login                       # přihlášení účtem na Docker Hub
docker build -t mycompany/backend:1.4.0 .
docker push mycompany/backend:1.4.0

Kdokoliv pak může image stáhnout příkazem docker pull mycompany/backend:1.4.0. Veřejné repozitáře jsou zdarma, privátní
repozitáře na Docker Hubu mají v bezplatném tarifu omezený počet.

Privátní registry

Firmy typicky nechtějí interní image na veřejném Docker Hubu (byť
soukromém repozitáři třetí strany) a provozují si vlastní registry.
Nejjednodušší varianta je oficiální open-source image registry:

docker run -d -p 5000:5000 --name registry \
  -v registry-data:/var/lib/registry \
  registry:2

Poté se s ním pracuje stejně jako s Docker Hubem, jen s explicitním
hostname a portem v názvu image:

docker tag mycompany/backend:1.4.0 localhost:5000/backend:1.4.0
docker push localhost:5000/backend:1.4.0
docker pull localhost:5000/backend:1.4.0

V produkci se privátní registry provozuje s TLS certifikátem (jinak
Docker odmítne k němu bez dalšího nastavení přistupovat) a
autentizací (htpasswd, nebo napojení na LDAP/OAuth) — bez TLS a auth
by kdokoliv s síťovým přístupem mohl nahrávat i stahovat interní
image. Větší organizace často místo holého registry:2 používají
plnohodnotná řešení jako Harbor, GitLab Container Registry
(zabudovaný do GitLabu) nebo spravované cloudové registry (AWS ECR,
Google Artifact Registry, Azure Container Registry) — ty navíc
přidávají bezpečnostní skenování image, řízení přístupu po projektech a
politiky retence starých verzí.

Tagovací strategie

Běžná praxe je nastavit CI pipeline tak, aby při každém buildu
vytvořila image se dvěma tagy: jedním neměnným (např. commit hash nebo
sémantická verze 1.4.0) a případně pohyblivým (latest nebo
staging) pro pohodlné odkazování na "aktuální" verzi v neprodukčním
prostředí. Produkční nasazení ale vždy odkazuje na neměnný tag.

Praktický příklad

Kompletní tok od buildu po nasazení z privátního registry:

# 1. build s verzovaným tagem
docker build -t backend:1.4.0 .

# 2. přetagování pro cílový registry
docker tag backend:1.4.0 registry.firma.cz:5000/team/backend:1.4.0

# 3. přihlášení k privátnímu registry
docker login registry.firma.cz:5000

# 4. nahrání
docker push registry.firma.cz:5000/team/backend:1.4.0

# 5. na produkčním serveru: stažení konkrétní verze podle digestu
docker pull registry.firma.cz:5000/team/backend@sha256:3f29a6...

Poslední krok ukazuje nasazení podle digestu — i kdyby někdo omylem
znovu napushoval jiný obsah pod stejný tag 1.4.0, nasazení podle
konkrétního digestu zůstane nezměněné a reprodukovatelné.

Shrnutí

Registry je server pro ukládání a distribuci image, analogie Gitu pro
binární artefakty. Jméno image kóduje registry host, jmenný prostor,
název a tag; produkční nasazení by mělo cílit na konkrétní verzovaný
tag nebo digest, nikoliv na latest. Docker Hub je výchozí veřejná
volba, firmy pro interní image typicky provozují vlastní registry
(jednoduchý registry:2, nebo plnohodnotné Harbor/GitLab
Registry/cloudové registry) s TLS a autentizací.

Kontrolní otázky

  1. Z čeho se skládá plné jméno Docker image a co se stane, když tag
    vynecháte?
  2. Proč se latest nedoporučuje pro produkční nasazení a čím ho
    nahradit?
  3. Jaký je rozdíl mezi nasazením podle tagu a podle digestu?
  4. Mini cvičení: spusťte lokálně registry:2 na portu 5000, stáhněte
    libovolný veřejný image (např. alpine), přetagujte ho na
    localhost:5000/alpine:test a nahrajte ho do svého lokálního
    registry příkazem docker push.

Lekce na sebe nejsou zamčené — libovolnou lekci můžete otevřít i označit jako hotovou v jakémkoliv pořadí.