Bu makalede, Docker Kayıt Defteri (Docker Registry) nasıl kullanılacağı gösterilmektedir.

Neden Docker Kayıt Defteri'ne ihtiyacınız var?

Public Docker image'ları herhangi bir zamanda güncellenebilir. Önceki image ile aynı etikete sahip bir image güncellemesini durduracak hiçbir şey yoktur. Bu nedenle, Public Kayıt Defterine güveniyorsanız, her ortamın gerçekten aynı image'ları temel aldığına dair hiçbir garanti yoktur.

Image'ları doğrudan Public Registry'den kullanıyorsanız, bunları sisteminize indirmeli ve kendi kayıt defterinize yüklemelisiniz, böylece güncellemelerin yayınlanması üzerinde kontrol sahibi olursunuz.

Internete bağlı olmayan sunucular

Local Kayıt Defteri (Local Docker Registry) kullanmanın bir diğer gerekeli tarafı, eğer Apinizer çalışan sunucuların hub.docker.com'a erişimi yok ise patch (versiyon güncelleme) işlemlerini yapabilmeniz için ihtiyacınız var.

Kuruluma başlamadan önce ;

Docker kayıt defterinin CentOS 7 sunucunuza yüklenmesi ve yapılandırılması için bu adımları izleyin.

  • CentOS 7.4'teki docker dağıtım paketi, ekstra havuzda mevcuttur. CentOS 7 sisteminizde devre dışı bırakılmışsa etkinleştirmeniz gerekebilir.

Kurulum adımları

Kurulum

$ sudo yum -y install docker-distribution
POWERSHELL

Docker Kayıt Defterini yapılandırın

Docker kayıt defteri yapılandırma dosyası /etc/docker-distribution/registry/config.yml adresinde bulunur. YAML biçimindedir. Herhangi bir değişiklik yapmanız gerekirse, burada yapın. Örnek yapılandırma dosyası aşağıda gösterilmektedir:

version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry
http:
    addr: :5000
POWERSHELL


Varsayılan yapılandırma dosyasından:

  • /var/lib/ : kayıt defteri, docker image'larının depolanacağı dizindir.
  • Service:, tüm ağ arayüzlerinde 5000 numaralı bağlantı noktasına bağlanacak

SELinux'u etkinleştirdiyseniz, 5000 numaralı bağlantı noktasını kullanırken bir sorunla karşılaşabilirsiniz, SELinux'u devre dışı bırakmayı veya sorunlarla karşılaşırsanız izin verici moda getirmeyi düşünün.

Güvenlik duvarı etkinse ve çalışıyorsa, güvenlik duvarında bağlantı noktasına izin verin.

# firewall-cmd --add-port = 5000 / tcp - kalıcı
# firewall-cmd - yeniden yükle
POWERSHELL

Docker Kayıt Defterini başlatın

Şimdi hizmeti başlatabilir ve önyüklemede başlayacak şekilde ayarlayabilirsiniz.

$ systemctl start docker-distribution

$ systemctl enable docker-distribution
POWERSHELL


Docker dağıtım hizmetinin (docker-distribution) çalıştığını doğrulayın:

$ systemctl status docker-distribution

● docker-distribution.service - v2 Registry server for Docker
   Loaded: loaded (/usr/lib/systemd/system/docker-distribution.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-03-31 14:31:16 EDT; 2min 20s ago
 Main PID: 16262 (registry)
   CGroup: /system.slice/docker-distribution.service
           └─16262 /usr/bin/registry serve /etc/docker-distribution/registry/...
POWERSHELL

Kayıt Defteri'ni Docker Engine'e Ekleyin

Varsayılan olarak docker, docker kayıt defterine bağlanmak için https kullanır. Ancak, özellikle güvenilir bir ağ üzerindeyseniz, güvenli olmayan bir kayıt defterini kullanmak için kullanım örnekleri olabilir. Bu, dahili kullanım için CA imzalı sertifika ihtiyacını veya tüm docker düğümlerinde kendinden imzalı sertifikaya güvenmeyi ortadan kaldırır. Güvensiz Kayıt Defteri'ni Docker Engine'e eklemenin adımları aşağıda verilmiştir.

/etc/docker/daemon.json dosya içindeki tüm satırlar silinip aşağıdaki satır eklenir.

$ vi /etc/docker/daemon.json
{
 "insecure-registries" : ["dockerregistry.local:5000"]
 }

POWERSHELL


Çok Önemli

Yukarıdaki satırı /etc/docker/daemon.json docker registry'e bağlanacak tüm sunucular üzerinde yapılması gerekmektedir.


Artık kayıt defteri hazır olduğuna göre, docker image'larını ona aktarmaya başlayabilirsiniz. Bir DNS sunucunuz yoksa, ana bilgisayar adını IP Adresiyle eşlemek için /etc/hosts dosyasını kullanın.


# cat /etc/hosts

192.168.5.10 dockerregistry.local

Not: "insecure-registries" : ["192.168.5.10:5000"] bu şekilde de eklenebilir.

Önemli

Not : hostname yazlıyorsa, k8s cluster içindeki diğer makinelerinde host dosyalarında belirtilmesi gerekmektedir.


Yukarıdaki değişiklikleri yaptıktan sonra Docker'ı yeniden başlatın.

$ systemctl restart docker
POWERSHELL

Docker Kayıt Defteri Kullanımı

Öncelikle docker registry kurulmuş olan ortama image'ları indirilir.

$ sudo docker pull apinizercloud/manager:2020.09.01
POWERSHELL


Image'ı dockerregistry.local:5000 /manager:2020.09.01 olarak etiketleyin. Bu, mevcut image için ek bir etiket oluşturur. Etiketin ilk kısmı bir ana bilgisayar adı ve bağlantı noktası olduğunda, Docker bunu push sırasında bir kayıt defterinin konumu olarak yorumlar.

$ docker tag apinizercloud/manager:2020.09.01 dockerregistry.local:5000/manager:2020.09.01
POWERSHELL


Image'ı dockerregistry.local:5000/manager:2020.09.01 adresinde çalışan yerel kayıt defterine gönderin.

$ docker push dockerregistry.local:5000/manager:2020.09.01
POWERSHELL


Image yükleme başarılı olduysa, sonunda sha256 hash almalısınız. Aktarılan image'lar /var/lib/registry/docker/registry/v2/repositories dizini altında saklanır.

$ ls /var/lib/registry/docker/registry/v2/repositories
POWERSHELL

Örnek Kullanımlar

Örnek :  local registry'e pull edilen image'ı push etmek için. Manager, Worker ve Cache'lerin yüklemek için

Apinizer Image'ı yükleme

--- Manager ---
$ sudo docker pull apinizercloud/manager:2020.09.01

$ sudo docker tag apinizercloud/manager:2020.09.01 YOUR-IP:5000/manager:2020.09.01

$ sudo docker push YOUR-IP:5000/manager:2020.09.01


--- Worker ---
$ sudo docker pull apinizercloud/worker:2020.09.01

$ sudo docker tag apinizercloud/worker:2020.09.01 YOUR-IP:5000/worker:2020.09.01

$ sudo docker push YOUR-IP:5000/worker:2020.09.01


--- Cache ---
$ sudo docker pull apinizercloud/cache:2020.09.01

$ sudo docker tag apinizercloud/cache:2020.09.01 YOUR-IP:5000/cache:2020.09.01

$ sudo docker push YOUR-IP:5000/cache:2020.09.01
POWERSHELL


Örnek : .tar olarak alınmış bir apinizer image'nın registry'e yüklenmesi


Apinizer Image'ı yükleme

$ docker image load < apinizer-manager.tar

$ docker tag apinizer-manager:latest YOUR-IP:5000/apinizer-manager:latest

$ docker push YOUR-IP:5000/apinizer-manager:latest
POWERSHELL


Linux schell kodu ile image'ları  Local Docker Registry'e ekleme

$ vi pullApinizerImages.sh

v2 API ile image'n versiyonlarını listeleme

#!/bin/bash

localRepositoryUrl=YOUR-IP:5000

if [ "$localRepositoryUrl" == "$localRepositoryUrl" ]; then
    echo "Please enter your local Docker Repository URL"
else
    echo "Your Local Repository Url : "$localRepositoryUrl
fi


if [ $# -eq 0 ]; then
    echo "Please enter the version information as a parameter."
    exit
fi

echo 'Version = ' $1
version=$1

docker pull apinizercloud/manager:"$version"
 
docker tag apinizercloud/manager:$version $localRepositoryUrl/manager:$version
 
docker push $localRepositoryUrl/manager:$version
 
docker pull apinizercloud/worker:$version
 
docker tag apinizercloud/worker:$version $localRepositoryUrl/worker:$version
 
docker push $localRepositoryUrl/worker:$version
 
docker pull apinizercloud/cache:$version
 
docker tag apinizercloud/cache:$version $localRepositoryUrl/cache:$version
 
docker push $localRepositoryUrl/cache:$version

echo "Image pull operation completed." 
POWERSHELL


Kullanımı

v2 API ile image'n versiyonlarını listeleme

$ sh pullApinizerImages.sh 2020.10.02
POWERSHELL


Catalog bilgisi sorgulama

v2 API ile image'n versiyonlarını listeleme

$ curl http://YOUR-IP:5000/v2/_catalog

{
    "repositories": [
        "cache",
        "manager",
        "worker"
    ]
}
POWERSHELL


v2 API ile registry listeleme

$ curl http://YOUR-IP:5000/v2/manager/tags/list

{
    "name": "manager",
    "tags": [
        "2020.09.01"
    ]
}
POWERSHELL


k8s'e deploy edilirken image path

image: myregistry.local:5000/apinizer-manager:latest
POWERSHELL

Repository'deki image'lar silmek için

k8s'e deploy edilirken image path

$ cd /var/lib/registry/docker/registry/v2/repositories 
$ sudo rm -rf *
POWERSHELL

Local docker Registry kurarken dikkat edilmesi gereken bir diğer konu SSL.

https://github.com/Juniper/contrail-docker/wiki/Configure-docker-service-to-use-insecure-registry

docker image prune -a