Docker Registry instellen op Rocky Linux 8/AlmaLinux 8
Een Docker-registry is een opslag- en contentdistributiesysteem dat benoemde Docker-images bevat, beschikbaar in verschillende getagde versies. Gebruikers die Docker gebruiken, werken met een registry door de commando's docker push en docker pull te gebruiken. Soms is het zinvol om Docker-images op een lokale registry op te slaan in plaats van ze naar Docker Hub te pushen. In deze gids gaan we een Private Docker Registry op Rocky/AlmaLinux 8 opzetten, beveiligd met een Let’s Encrypt SSL-certificaat.
Je bespaart veel bandbreedte voor een groot team en houdt de afbeeldingen die je niet openbaar wilt maken veilig. Het maken van een lokale Docker-register is een kwestie van een paar stappen volgen. Voor de installatie van Docker op verschillende distributies verwijzen we naar Hoe Docker CE op Linux-systemen te installeren.
Installeer Docker Engine
We hebben Docker Engine nodig om de registry-service uit te voeren. Werk uw systeem bij voordat u het installeert.
sudo yum -y updateVoer de onderstaande opdrachten uit om Docker CE te installeren.
sudo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo Installeer vervolgens de Docker CE-pakketten en de Compose-plug-in.
sudo yum -y install docker-ce docker-ce-cli containerd.io
Als je Docker als een niet-root gebruiker wilt gebruiken, kun je nu overwegen om je gebruiker toe te voegen aan de groep „docker”:
sudo usermod -aG docker $USER
newgrp dockerVoer het onderstaande commando uit om de geïnstalleerde versie van Docker te zien.
$ docker --version
Docker version 26.1.3, build b72abbbStart en schakel de Docker-service in:
sudo systemctl enable --now dockerStatus moet actief zijn:
$ 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 ~]#Genereer Let’s Encrypt SSL-certificaten
Zoals eerder beloofd zullen we Let's Encrypt SSL-certificaten gebruiken om onze Docker Registry-setup op Rocky/AlmaLinux te beveiligen.
Installeer de tool certbot die gebruikt zal worden om een Let’s Encrypt-certificaat aan te vragen.
sudo yum -y install epel-release
sudo yum -y install certbotVerzoek om een SSL-certificaat:
export DOMAIN="registry.domain.com"
export EMAIL="[email "
certbot certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiringVerwachte uitvoer van het genereren van certificaten:
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-leJe certificaten worden opgeslagen onder /etc/letsencrypt/live/
/etc/letsencrypt/live/registry.domain.com/fullchain.pem
/etc/letsencrypt/live/registry.domain.com/privkey.pemWaar :
- fullchain.pem ⇒ gecombineerd bestand
cert.pemenchain.pem - chain.pem ⇒ tussenliggend certificaat
- cert.pem ⇒ SSL-servercertificaat (inclusief publieke sleutel)
- privkey.pem ⇒ bestand met privésleutel
Docker-register uitvoeren op Rocky Linux/AlmaLinux 8
Je kunt de Docker-registry met SSL of zonder SSL uitvoeren. We zullen laten zien hoe je de Docker-registry met beide methoden kunt draaien.
Maar maak eerst een map aan die de Docker-registryafbeeldingen zal bevatten:
sudo mkdir /var/lib/docker/registryEen lokale Docker-registry draaien zonder SSL
docker run -d -p 5000:5000 \
--name docker-registry \
--restart=always \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2Een lokale Docker-register uitvoeren met SSL
Maak een directory en plaats certificaten op de host:
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.pemMaak een Docker Registry-container:
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:2Vervang registry.domain.com door de subdomeinnaam van je register.
Het zal de registry:2 docker-afbeelding downloaden als deze niet bestaat en een container aanmaken
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
ed960bd27529be26e7ef728027844a62b0731b08bafdbbf63dea328dac46e024Controleer de status van de container:
# 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-registryOm afbeeldingen naar de Registry Container-server te pushen, stel het als volgt in:
$ curl https://$DOMAIN:5000/v2/_catalog
{"repositories":[]}Als SELinux is ingeschakeld, kunt u een probleem ondervinden bij het gebruik van poort 5000. Overweeg SELinux uit te schakelen of op permissive-modus te zetten als u problemen ondervindt.
Als firewalld is ingeschakeld en actief, sta de poort toe in de firewall.
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reloadOnveilige register toevoegen aan Docker Engine
Standaard gebruikt Docker https om verbinding te maken met het Docker-register. Maar er kunnen situaties zijn waarin het gebruik van een onveilig register gewenst is, vooral als je op een vertrouwd netwerk zit. Dit elimineert de noodzaak voor een door een CA ondertekend certificaat voor intern gebruik of om een zelfondertekend certificaat op alle Docker-knooppunten te vertrouwen. Hier zijn de stappen om een onveilig register toe te voegen aan de Docker Engine.
Voor Ubuntu Xenial, bewerk /etc/docker/daemon.json en werk de sleutel “insecure-registries” bij. Bijvoorbeeld.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Bewerk het bestand /etc/docker/daemon.json, bijvoorbeeld.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Voor Ubuntu Trusty, bewerk het bestand /etc/default/docker en werk DOCKER_OPTS bij, bijvoorbeeld
DOCKER_OPTS='--insecure-registry registry.domain.com:5000'Start vervolgens de Docker-engine opnieuw
sudo systemctl restart dockerDocker-afbeeldingen naar de lokale registry pushen
Nu de register klaar is, kun je beginnen met het pushen van docker-images ernaartoe. Als je geen actieve DNS-server hebt, gebruik dan het /etc/hosts-bestand om de hostnaam aan het IP-adres te koppelen.
$ sudo vim /etc/hosts
192.168.1.23 registry.domain.comIk zal de nieuwste ubuntu Docker-image van Docker Hub downloaden en naar mijn lokale Docker-register pushen.
$ 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:latestLabel de afbeelding als registry.domain.com:5000/ubuntu. Dit maakt een extra label voor de bestaande afbeelding. Wanneer het eerste deel van het label een hostnaam en poort is, interpreteert Docker dit als de locatie van een registry bij het pushen.
docker tag ubuntu $DOMAIN:5000/ubuntuDuw de afbeelding naar de lokale registry die draait op 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: 943Als het uploaden van de afbeelding succesvol was, zou je aan het einde de sha256-hash moeten krijgen. Gepushte afbeeldingen worden opgeslagen in de directory /var/lib/registry/docker/registry/v2/repositories.
$ ls /var/lib/docker/registry/docker/registry/v2/repositories/
ubuntuDit is dezelfde methode die je zult gebruiken om aangepaste Docker-images te pushen. Om Docker-images naar het lokale register te downloaden, gebruik je het commando:
$ docker pull registry-hostname:500/image:tag
#E.g
$ docker pull registry.domain.com:5000/ubuntuIn mijn volgende gids zal ik het configureren van een nginx-proxy behandelen voor toegang tot de repository via https.
Je kunt ook een kijkje nemen bij Install Docker UI manager – Portainer