Konfiguracja rejestru Docker na Rocky Linux 8/AlmaLinux 8
Rejestr Docker to system przechowywania i dostarczania treści, który przechowuje nazwane obrazy Docker, dostępne w różnych wersjach oznaczonych tagami. Użytkownicy korzystający z Dockera wchodzą w interakcję z rejestrem za pomocą poleceń docker push i docker pull. Czasami sensowne jest przechowywanie obrazów Docker w lokalnym rejestrze zamiast wysyłania ich do Docker Hub. W tym przewodniku skonfigurujemy prywatny rejestr Docker na Rocky/AlmaLinux 8 zabezpieczony certyfikatem SSL Let’s Encrypt.
Zaoszczędzisz dużo przepustowości dla dużego zespołu i zadbasz o bezpieczeństwo obrazów, których nie chcesz udostępniać publicznie. Utworzenie lokalnego rejestru Dockera polega na wykonaniu kilku kroków. Aby zainstalować Dockera na różnych dystrybucjach, odwołaj się do Jak zainstalować Docker CE na systemach Linux.
Zainstaluj Docker Engine
Do uruchomienia usługi rejestru potrzebny jest Docker Engine. Zaktualizuj system przed jego instalacją.
sudo yum -y updateUruchom poniższe polecenia, aby zainstalować Docker CE.
sudo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo Następnie zainstaluj pakiety Docker CE i wtyczkę Compose.
sudo yum -y install docker-ce docker-ce-cli containerd.io
Jeżeli chcesz używać Dockera jako użytkownik niebędący rootem, powinieneś teraz rozważyć dodanie swojego użytkownika do grupy „docker”:
sudo usermod -aG docker $USER
newgrp dockerUruchom poniższe polecenie, aby zobaczyć zainstalowaną wersję Dockera.
$ docker --version
Docker version 26.1.3, build b72abbbUruchom i włącz usługę Docker:
sudo systemctl enable --now dockerStatus powinien być uruchomiony:
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2024-07-13 19:53:19 UTC; 4s ago
Docs: https://docs.docker.com
Main PID: 17832 (dockerd)
Tasks: 7
Memory: 30.4M
CGroup: /system.slice/docker.service
└─17832 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Jul 13 19:53:19 rocky8.cloudspinx.com systemd[1]: Starting Docker Application Container Engine...
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.316260221Z" level=info msg="Starting up"
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.340012039Z" level=info msg="Loading containers: start."
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.621507107Z" level=info msg="Loading containers: done."
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.644692641Z" level=info msg="Docker daemon" commit=8e96db1 containerd-snapshotter=false storage-driver=overlay2 versio>
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.644783862Z" level=info msg="Daemon has completed initialization"
Jul 13 19:53:19 rocky8.cloudspinx.com dockerd[17832]: time="2024-07-13T19:53:19.671038318Z" level=info msg="API listen on /run/docker.sock"
Jul 13 19:53:19 rocky8.cloudspinx.com systemd[1]: Started Docker Application Container Engine.
[root@rocky8 ~]#Generuj certyfikaty SSL Let’s Encrypt
Jak obiecano wcześniej, użyjemy certyfikatów SSL Let's Encrypt, aby zabezpieczyć naszą konfigurację rejestru Docker działającą na Rocky/AlmaLinux.
Zainstaluj narzędzie certbot, które będzie używane do uzyskania certyfikatu Let’s Encrypt.
sudo yum -y install epel-release
sudo yum -y install certbotWniosek o certyfikat SSL:
export DOMAIN="registry.domain.com"
export EMAIL="[email "
certbot certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiringOczekiwany wynik generowania certyfikatów:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for registry.computingforgeeks.com
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/registry.computingforgeeks.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/registry.computingforgeeks.com/privkey.pem
Your cert will expire on 2021-07-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-leTwoje certyfikaty zostaną zapisane w /etc/letsencrypt/live/
/etc/letsencrypt/live/registry.domain.com/fullchain.pem
/etc/letsencrypt/live/registry.domain.com/privkey.pemGdzie :
- fullchain.pem ⇒ połączony plik
cert.pemichain.pem - chain.pem ⇒ certyfikat pośredni
- cert.pem ⇒ Certyfikat serwera SSL (zawiera klucz publiczny)
- privkey.pem ⇒ plik klucza prywatnego
Uruchom rejestr Docker na Rocky Linux/AlmaLinux 8
Możesz uruchomić rejestr Dockera zarówno z SSL, jak i bez niego. Pokażemy, jak możesz uruchomić rejestr Dockera przy użyciu obu metod.
Ale najpierw utwórz katalog, który będzie przechowywał obrazy rejestru Dockera:
sudo mkdir /var/lib/docker/registryUruchamianie lokalnego rejestru Docker bez SSL
docker run -d -p 5000:5000 \
--name docker-registry \
--restart=always \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2Uruchamianie lokalnego rejestru Docker z SSL
Utwórz katalog i umieść certyfikaty na hoście:
export DOMAIN="registry.domain.com"
mkdir /certs
sudo cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem /certs/fullchain.pem
sudo cp /etc/letsencrypt/live/$DOMAIN/privkey.pem /certs/privkey.pem
sudo cp /etc/letsencrypt/live/$DOMAIN/cert.pem /certs/cert.pemUtwórz kontener Docker Registry:
docker run -d --name docker-registry --restart=always \
-p 5000:5000 \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
-v /certs:/certs \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2Zamień registry.domain.com na nazwę poddomeny swojego rejestru.
Pobierze obraz docker registry:2, jeśli nie istnieje, i utworzy kontener
Unable to find image 'registry:2' locally
2: Pulling from library/registry
ddad3d7c1e96: Pull complete
6eda6749503f: Pull complete
363ab70c2143: Pull complete
5b94580856e6: Pull complete
12008541203a: Pull complete
Digest: sha256:bac2d7050dc4826516650267fe7dc6627e9e11ad653daca0641437abdf18df27
Status: Downloaded newer image for registry:2
ed960bd27529be26e7ef728027844a62b0731b08bafdbbf63dea328dac46e024Sprawdź stan kontenera:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed960bd27529 registry:2 "/entrypoint.sh /etc…" 28 seconds ago Up 27 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp docker-registryAby przesłać obrazy do serwera rejestru kontenerów, ustaw jak poniżej:
$ curl https://$DOMAIN:5000/v2/_catalog
{"repositories":[]}Jeśli masz włączony SELinux, możesz napotkać problem z używaniem portu 5000. Rozważ wyłączenie SELinux lub ustawienie go w trybie permisywnym, jeśli napotkasz problemy.
Jeżeli firewalld jest włączony i działa, pozwól na ruch przez ten port w zaporze.
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reloadDodaj niepewny rejestr do silnika Docker
Domyślnie Docker używa https do łączenia się z rejestrem Docker. Jednak mogą wystąpić sytuacje, w których użycie niebezpiecznego rejestru jest uzasadnione, zwłaszcza jeśli znajdujesz się w zaufanej sieci. Eliminowane jest w ten sposób konieczność posiadania certyfikatu podpisanego przez CA do użytku wewnętrznego lub zaufania samopodpisanego certyfikatu na wszystkich węzłach Docker. Oto kroki, jak dodać niebezpieczny rejestr do silnika Docker.
Dla Ubuntu Xenial edytuj /etc/docker/daemon.json i zaktualizuj klucz „insecure-registries”. np.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Edytuj plik /etc/docker/daemon.json, np.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Dla Ubuntu Trusty edytuj plik /etc/default/docker i zaktualizuj DOCKER_OPTS, np.
DOCKER_OPTS='--insecure-registry registry.domain.com:5000'Następnie uruchom ponownie silnik Dockera
sudo systemctl restart dockerWysyłanie obrazów Dockera do lokalnego rejestru
Teraz, gdy rejestr jest gotowy, możesz zacząć przesyłać do niego obrazy dockera. Jeśli nie masz aktywnego serwera DNS, użyj pliku /etc/hosts, aby zmapować nazwę hosta na adres IP.
$ sudo vim /etc/hosts
192.168.1.23 registry.domain.comPobiorę najnowszy obraz ubuntu z Docker Hub i wypchnę go do mojego lokalnego rejestru Dockera.
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
345e3491a907: Pull complete
57671312ef6f: Pull complete
5e9250ddb7d0: Pull complete
Digest: sha256:cf31af331f38d1d7158470e095b132acd126a7180a54f263d386da88eb681d93
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latestOznacz obraz jako registry.domain.com:5000/ubuntu. Tworzy to dodatkowy tag dla istniejącego obrazu. Gdy pierwsza część tagu to nazwa hosta i port, Docker interpretuje to jako lokalizację rejestru podczas przesyłania.
docker tag ubuntu $DOMAIN:5000/ubuntuWypchnij obraz do lokalnego rejestru działającego pod registry.domain.com:5000/ubuntu
$ docker push $DOMAIN:5000/ubuntu
Using default tag: latest
The push refers to repository [registry.domain.com:5000/ubuntu]
2f140462f3bc: Pushed
63c99163f472: Pushed
ccdbb80308cc: Pushed
latest: digest: sha256:86ac87f73641c920fb42cc9612d4fb57b5626b56ea2a19b894d0673fd5b4f2e9 size: 943Jeśli przesyłanie obrazu zakończyło się sukcesem, na końcu powinieneś otrzymać hash sha256. Wysłane obrazy są przechowywane w katalogu /var/lib/registry/docker/registry/v2/repositories.
$ ls /var/lib/docker/registry/docker/registry/v2/repositories/
ubuntuTo ta sama metoda, której użyjesz do przesyłania własnych obrazów Dockera. Aby pobrać obrazy Dockera z lokalnego rejestru, użyj polecenia:
$ docker pull registry-hostname:500/image:tag
#E.g
$ docker pull registry.domain.com:5000/ubuntuW moim następnym przewodniku omówię konfigurowanie proxy nginx do uzyskiwania dostępu do repozytorium przez https.
Możesz również rzucić okiem na Instalację menedżera interfejsu Docker – Portainer