Rocky Linux 8/AlmaLinux 8 üzerinde Docker Registry Kurulumu
Docker kayıt defteri, farklı etiketlenmiş sürümlerle mevcut olan adlandırılmış Docker imajlarını barındıran bir depolama ve içerik dağıtım sistemidir. Docker kullanan kullanıcılar, bir kayıt defteriyle docker push ve docker pull komutlarını kullanarak etkileşimde bulunur. Bazen Docker imajlarını Docker hub'a göndermek yerine yerel bir kayıt defterinde saklamak daha mantıklıdır. Bu kılavuzda, Let's Encrypt SSL Sertifikası ile güvence altına alınmış Özel Docker Kayıt Defterini Rocky/AlmaLinux 8 üzerinde kuracağız.
Büyük bir ekip için çok fazla bant genişliğinden tasarruf edersiniz ve kamuya açık olmasını istemediğiniz resimleri güvende tutarsınız. Yerel bir Docker kaydı oluşturmak birkaç adımı takip etmekle ilgilidir. Farklı dağıtımlarda Docker kurulumu için Linux Sistemlerinde Docker CE Nasıl Kurulur bölümüne bakabilirsiniz.
Docker Motorunu Yükle
Kayıt hizmetini çalıştırmak için Docker Engine'e ihtiyacımız var. Kurmadan önce sisteminizi güncelleyin.
sudo yum -y updateDocker CE'yi yüklemek için aşağıdaki komutları çalıştırın.
sudo curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo Daha sonra Docker CE paketlerini ve Compose eklentisini yükleyin.
sudo yum -y install docker-ce docker-ce-cli containerd.io
Docker'ı root olmayan bir kullanıcı olarak kullanmak istiyorsanız, artık kullanıcıyı "docker" grubuna eklemeyi düşünmelisiniz:
sudo usermod -aG docker $USER
newgrp dockerYüklü docker sürümünü görmek için aşağıdaki komutu çalıştırın.
$ docker --version
Docker version 26.1.3, build b72abbbDocker hizmetini başlatın ve etkinleştirin:
sudo systemctl enable --now dockerDurum çalışıyor olmalıdır:
$ 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 ~]#Let’s Encrypt SSL Sertifikaları Oluştur
Daha önce söz verildiği gibi, Rocky/AlmaLinux üzerinde çalışan Docker Kayıt Defteri kurulumumuzu güvence altına almak için Let’s Encrypt SSL Sertifikalarını kullanacağız.
Let’s Encrypt sertifikası talep etmek için kullanılacak certbot aracını kurun.
sudo yum -y install epel-release
sudo yum -y install certbotSSL sertifikası talebi:
export DOMAIN="registry.domain.com"
export EMAIL="[email "
certbot certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiringBeklenen sertifika oluşturma çıktısı:
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-leSertifikalarınız /etc/letsencrypt/live/ altında kaydedilecektir
/etc/letsencrypt/live/registry.domain.com/fullchain.pem
/etc/letsencrypt/live/registry.domain.com/privkey.pemNerede :
- fullchain.pem ⇒ birleşik dosya
cert.pemvechain.pem - chain.pem ⇒ ara sertifika
- cert.pem ⇒ SSL Sunucu sertifikası (açık anahtarı içerir)
- privkey.pem ⇒ özel anahtar dosyası
Rocky Linux/AlmaLinux 8 üzerinde Docker kayıt defteri çalıştırın
Docker kayıt defterini SSL ile veya SSL olmadan çalıştırabilirsiniz. Docker kayıt defterini her iki yöntemle de nasıl çalıştırabileceğinizi göstereceğiz.
Ama önce, Docker kayıt defteri görüntülerini tutacak bir dizin oluşturun:
sudo mkdir /var/lib/docker/registrySSL olmadan Yerel Docker kayıt defteri çalıştırma
docker run -d -p 5000:5000 \
--name docker-registry \
--restart=always \
-v /var/lib/docker/registry:/var/lib/registry \
registry:2SSL ile Yerel Docker kayıt defteri çalıştırma
Dizin oluşturun ve sertifikaları sunucuya yerleştirin:
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.pemBir Docker Registry konteyneri oluşturun:
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:2registry.domain.com öğesini kayıt defteri alt alan adınızla değiştirin.
Eğer mevcut değilse registry:2 docker imajını indirecek ve bir konteyner oluşturacaktır
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
ed960bd27529be26e7ef728027844a62b0731b08bafdbbf63dea328dac46e024Konteyner durumunu kontrol et:
# 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-registryGörüntüleri Registry Container sunucusuna göndermek için aşağıdaki gibi ayarlayın:
$ curl https://$DOMAIN:5000/v2/_catalog
{"repositories":[]}Eğer SELinux etkinse, 5000 numaralı portu kullanırken bir sorunla karşılaşabilirsiniz; sorun yaşarsanız SELinux'u devre dışı bırakmayı veya izin verici (permissive) moda geçirmeyi düşünebilirsiniz.
Eğer firewalld etkinse ve çalışıyorsa, güvenlik duvarında ilgili portu açın.
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reloadDocker Motoruna Güvensiz Kayıt Defteri Ekle
Varsayılan olarak, Docker docker kayıt defterine bağlanmak için https kullanır. Ancak, özellikle güvenilen bir ağ üzerindeyseniz, güvenli olmayan bir kayıt defteri kullanma durumu olabilir. Bu, dahili kullanım için CA tarafından imzalanmış bir sertifikaya ihtiyaç duyma veya tüm Docker düğümlerinde kendi kendine imzalanmış sertifikaya güvenme gereğini ortadan kaldırır. İşte Docker Motoruna Güvensiz Kayıt Defteri eklemenin adımları.
Ubuntu Xenial için, /etc/docker/daemon.json dosyasını düzenleyin ve “insecure-registries” anahtarını güncelleyin. Örneğin.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Dosyayı düzenleyin /etc/docker/daemon.json, örneğin.
{
"insecure-registries" : ["registry.domain.com:5000"]
}Ubuntu Trusty için, /etc/default/docker dosyasını düzenleyin ve DOCKER_OPTS değerini güncelleyin, örneğin
DOCKER_OPTS='--insecure-registry registry.domain.com:5000'Sonra Docker motorunu yeniden başlatın
sudo systemctl restart dockerDocker imajlarını yerel kayıt defterine itmek
Artık kayıt defteri hazır olduğuna göre, docker imajlarını buraya göndermeye başlayabilirsiniz. Eğer aktif bir DNS sunucunuz yoksa, ana bilgisayar adını IP adresine eşlemek için /etc/hosts dosyasını kullanın.
$ sudo vim /etc/hosts
192.168.1.23 registry.domain.comDocker hub'dan ubuntu en son docker imajını indirip yerel Docker kaydama göndereceğim.
$ 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:latestGörseli registry.domain.com:5000/ubuntu olarak etiketleyin. Bu, mevcut görsel için ek bir etiket oluşturur. Etiketin ilk kısmı bir ana bilgisayar adı ve port olduğunda, Docker bunu göndermede bir kayıt defterinin yeri olarak yorumlar.
docker tag ubuntu $DOMAIN:5000/ubuntuGörüntüyü registry.domain.com:5000/ubuntu adresinde çalışan yerel kayda ittirin
$ 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: 943Eğer görsel yükleme başarılı olduysa, sonunda sha256 hash almanız gerekir. Gönderilen görseller /var/lib/registry/docker/registry/v2/repositories dizini altında depolanır.
$ ls /var/lib/docker/registry/docker/registry/v2/repositories/
ubuntuBu, özel docker imajlarını göndermek için kullanacağınız aynı yöntemdir. Yerel kayıt defterine docker imajlarını indirmek için şu komutu kullanın:
$ docker pull registry-hostname:500/image:tag
#E.g
$ docker pull registry.domain.com:5000/ubuntuBir sonraki rehberimde, depoya HTTPS üzerinden erişim için nginx proxy yapılandırmasını ele alacağım.
Docker UI yöneticisini yüklemeye de göz atabilirsiniz – Portainer