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