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 update

Docker 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 docker

Yü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 b72abbb

Docker hizmetini başlatın ve etkinleştirin:

sudo systemctl enable --now docker

Durum ç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 certbot

SSL 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-expiring

Beklenen 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-le

Sertifikalarınız /etc/letsencrypt/live/ altında kaydedilecektir

/etc/letsencrypt/live/registry.domain.com/fullchain.pem
/etc/letsencrypt/live/registry.domain.com/privkey.pem

Nerede :

  • fullchain.pem ⇒ birleşik dosya cert.pem ve chain.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/registry

SSL 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:2

SSL 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.pem

Bir 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:2

registry.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
ed960bd27529be26e7ef728027844a62b0731b08bafdbbf63dea328dac46e024

Konteyner 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-registry

Gö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 --reload

Docker 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 docker

Docker 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.com

Docker 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:latest

Gö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/ubuntu

Gö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: 943

Eğ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/
ubuntu

Bu, ö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/ubuntu

Bir 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