Skip to content
VDS · Docker i kontejneri

Sopstveni registar slika

Kada ti treba sopstveni registar, kako da ga podesiš sa lozinkom i sertifikatom, koliko diska troši i kako da ga ne pretvoriš u deponiju starih slika.

Ažurirano 23. avgust 2026.

Registar je skladište slika. Sopstveni registar ti treba u tri slučaja: slike su privatne i ne smeju da napuste tvoju infrastrukturu, build-ovi se dešavaju često pa eksterni limiti za preuzimanje smetaju, ili isto postavljaš na više mašina.

Jednostavna opcija: 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"

Lozinku napravi ovako:

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

Ne izlaži port spolja: ispred registra ide veb server sa sertifikatom. Docker odbija da radi sa tuđim registrom preko HTTP-a — i s pravom, jer kroz njega na tvoje mašine stiže izvršni kod.

Rad sa registrom

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

Posle docker login, podaci za prijavu stoje u ~/.docker/config.json u čistom tekstu (base64 nije enkripcija). Na build mašinama napravi odvojen nalog sa pravom samo za čitanje.

Registar bez ograničenja veličine i bez čišćenja je najbrži način da se napuni disk. Svaki build dodaje slojeve, a brisanje taga ne oslobađa prostor: potrebno je sakupljanje smeća. Na VDS-1 sa 40 GB, registar aktivnog projekta će napuniti disk za par nedelja.

Čišćenje

Brisanje taga i potom sakupljanje smeća:

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

Moraš da zaustaviš registar dok sakupljanje smeća radi — inače paralelni push može da izgubi slojeve:

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

Podesi ovo kao zakazani posao jednom nedeljno i prati prostor na disku.

Alternativa: registar uz Git server

Ako si već podesio Forgejo ili Gitea, oni imaju ugrađeno skladište paketa, uključujući Docker slike. Ne treba ti odvojena usluga: pristup ide preko istih naloga, a slike su vidljive pored koda. Za male projekte ovo je zgodnije od samostalnog registry:2.

Česte greške

  • Registar je otvoren bez autorizacije. Kroz njega neko može da podmetne sliku koja će se postaviti na tvoju produkcijsku mašinu.
  • Tag latest umesto verzija. Registar prestaje da bude izvor reproduktivnosti: nije jasno šta je tačno postavljeno. Vidi ažuriranje kontejnera.
  • Skladištenje na istom disku kao baza podataka. Nagli skok push-eva pojede propusni opseg diska i uspori produkcijsku uslugu — vidi brzinu diska.
  • Direktorijum ./data nije u tvojim backup-ima. Izgubićeš sve slike za koje nemaš izvorne fajlove pri ruci. Vidi šta backup-ovati.