Skip to content
VDS · Docker a kontajnery

Vlastný image registry

Kedy potrebuješ vlastný registry, ako ho nastaviť s heslom a certifikátom, koľko zaberá disku a ako ho nepremeniť na skládku starých imageov.

Aktualizované 23. augusta 2026

Register je úložisko obrázkov. Vlastný potrebuješ v troch prípadoch: obrázky sú súkromné a nesmú opustiť tvoju infraštruktúru, buildy prebiehajú často a limity externého sťahovania prekážajú, alebo nasadzuješ tú istú vec na viacero strojov.

Jednoduchá možnosť: registry:2

services:
  registry:
    image: registry:2
    restart: unless-stopped
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_STORAGE_DELETE_ENABLED: "true"
    volumes:
      - ./data:/var/lib/registry
      - ./auth:/auth:ro
    ports:
      - "127.0.0.1:5000:5000"

Heslo vytvoríš takto:

mkdir -p auth
docker run --rm --entrypoint htpasswd httpd:2 -Bbn deploy 'long-password' > auth/htpasswd
docker compose up -d

Port nevystavuj navonok: pred register patrí webový server s certifikátom. Docker odmieta spolupracovať s cudzím registrom cez HTTP — a právom, veď cez neho sa na tvoje stroje dostáva spustiteľný kód.

Práca s ním

docker login registry.example.com
docker tag myapp:1.5.0 registry.example.com/myapp:1.5.0
docker push registry.example.com/myapp:1.5.0
docker pull registry.example.com/myapp:1.5.0

curl -u deploy https://registry.example.com/v2/_catalog
curl -u deploy https://registry.example.com/v2/myapp/tags/list

Po docker login sú prihlasovacie údaje v ~/.docker/config.json v čistom texte (base64 nie je šifrovanie). Na build strojoch vytvor samostatný účet s právami len na čítanie.

Register bez limitu veľkosti a bez čistenia je najrýchlejšia cesta k zaplnenému disku. Každý build pridáva vrstvy a zmazanie tagu neuvoľní miesto: potrebuješ garbage collection. Na VDS-1 so 40 GB zaplní register aktívneho projektu disk za pár týždňov.

Čistenie

Zmazanie tagu a následný garbage collection:

docker compose exec registry registry garbage-collect \
  --delete-untagged /etc/docker/registry/config.yml

Počas garbage collection musíš register zastaviť — inak súbežný push môže stratiť vrstvy:

docker compose stop registry
docker compose run --rm registry registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
docker compose start registry

Nastav si to ako plánovanú úlohu raz za týždeň a sleduj miesto na disku.

Alternatíva: register pribalený ku Git serveru

Ak už máš nastavený Forgejo alebo Gitea, majú vstavané úložisko balíkov vrátane Docker obrázkov. Samostatnú službu nepotrebuješ: prístup ide cez tie isté účty a obrázky vidíš vedľa kódu. Pre malé projekty je to pohodlnejšie než samostatný registry:2.

Časté chyby

  • Register je otvorený bez autorizácie. Niekto cez neho môže podstrčiť obrázok, ktorý sa nasadí na tvojom vlastnom produkčnom stroji.
  • Tag latest namiesto verzií. Register prestáva byť zdrojom reprodukovateľnosti: nie je jasné, čo presne je nasadené. Pozri aktualizácie kontajnerov.
  • Úložisko na tom istom disku ako databáza. Nárazový prírastok pushov zožerie priepustnosť disku a spomalí produkčnú službu — pozri rýchlosť disku.
  • Adresár ./data nie je v zálohách. Stratíš všetky obrázky, ku ktorým nemáš poruke zdroje. Pozri čo zálohovať.