Docker Registry – własne repozytorium obrazów Dockera

Istnieje możliwość modyfikowania oraz zapisywania obrazów Dockera, a następnie wysyłanie ich np. do Docker Huba. Wersja darmowa tego serwisu jest dość mocno ograniczona. W sytuacji gdy w posiadaniu jest własny serwer można użyć alternatywy w postaci Docker Registry.

Na początek klika instrukcji, które być może przydadzą się w pierwszej kolejności. Warto też zamiast „localhost:5000” używać właściwej domeny serwera np. „docker-jacek.pl:5000” oczywiście jeżeli dana domena istnieje i wskazuje na serwer z otwartym portem 5000.

Jeżeli jest potrzeba utworzenia TAGu o innej nazwie to można wykonać:
docker tag ubuntu localhost:5000/my-srv
gdzie repozytoria „ubuntu” i „localhost:5000/my-srv” będą jednym obrazem. Podmiana „ubuntu” na „localhost:5000/my-srv:latest” w pliku „docker-compose.yml” i restart serwisu docker-compose restart nazwa_serwisu.

Usunięcie niepotrzebnego repozytorium obrazu:
docker rmi ubuntu:latest

Przed wysłaniem obrazu wypadałoby zapisać zmiany:
docker commit 4a1ee2a2db83 localhost:5000/my-srv
gdzie „4a1ee2a2db83” to „CONTAINER ID”, które można podejrzeć za pomocą komendy docker ps -a.

Konfiguracja Basic-Auth – mechanizmu logowania się do Docker Refgistry

Instalacja niezbędnego oprogramowania:
apt install apache2-utils

Generowanie pliku z autoryzacją dla „uzytkownik1” po wywołaniu poniższego trzeba będzie podać hasło np. „haslo1”.
htpasswd -Bc access.passwd uzytkownik1

Weryfikacja poprawności utworzonego loginu i hasła.
htpasswd -vb access.passwd uzytkownik1 "haslo1"

Uruchamianie Docker Registry

Uruchomienie oczywiście za pomocą docker-compose:
version: "3.7"
services:
  registry:
    restart: always
    image: registry:2
    ports:
      - 5000:5000
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/cert.pem
      REGISTRY_HTTP_TLS_KEY: /certs/privkey.pem
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/access.passwd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    volumes:
      - ./registry/data:/var/lib/registry
      - ./registry/auth:/auth
      - ./certs/cert.pem:/certs/cert.pem
      - ./certs/privkey.pem:/certs/privkey.pem

Wysyłanie obrazu do repozytorium

Logowanie a następnie wysłanie obrazu do repozytorium odbywa się za pomocą komend:
docker login localhost:5000
docker push localhost:5000/my-srv

Problemy logowania

• Podczas logowania z poziomu klienta (może to być host lokalny) pod Ubuntu 20.04 może wystąpić błąd
Error saving credentials: error storing credentials – err: exit status 1, out: `Cannot autolaunch D-Bus without X11 $DISPLAY`

Rozwiązaniem problemu jest instalacja „gnupg2” i „pass”.
apt -V install gnupg2 pass

• Inny problem dotyczący certyfikatu
docker registry „x509: certificate signed by unknown authority”

W tej sytuacji trzeba podpiąć CA. Dla certyfikatu od Let`s Encrypt wystarczy wskazać „fullchain.pem” zamiast „cert.pem”. W innym przypadku należy połączyć dwa pliki: właściwy certyfikat z certyfikatem CA
cat certificate.crt intermediate-certificates.pem > domain.crt