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ı
Docker Distribution kurulumu
Docker Distribution paketini kurun:sudo yum -y install docker-distribution
Docker Kayıt Defterini yapılandırma
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ı:version: 0.1
log:
fields:
service: registry
storage:
cache:
layerinfo: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
Varsayılan yapılandırma dosyasından:
- /var/lib/registry: Docker image’larının depolanacağı dizindir
- Service: Tüm ağ arayüzlerinde 5000 numaralı bağlantı noktasına bağlanır
SELinux ve Güvenlik Duvarı yapılandırması
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
firewall-cmd --reload
Docker Kayıt Defterini başlatma
Hizmeti başlatın ve önyüklemede başlayacak şekilde ayarlayın:systemctl start docker-distribution
systemctl enable docker-distribution
Docker dağıtım hizmetinin çalıştığını doğrulayın:systemctl status docker-distribution
Örnek çıktı:
● 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/...
Kayıt Defteri’ni Docker Engine’e Ekleme
Aşağıdaki bilgi Apinizer kurulumunda Kubernetes 1.18.x ve Docker uygulamaları birlikte kurulduğu zaman kullanılacaktır.
Varsayılan olarak Docker, Docker kayıt defterine bağlanmak için HTTPS kullanır. Güvenilir bir ağ üzerindeyseniz, güvenli olmayan bir kayıt defterini kullanabilirsiniz. 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.
Docker daemon.json yapılandırması
/etc/docker/daemon.json dosyasını düzenleyin:vi /etc/docker/daemon.json
Dosya içindeki tüm satırları silip aşağıdaki satırı ekleyin:{
"insecure-registries" : ["dockerregistry.local:5000"]
}
Yukarıdaki satırı /etc/docker/daemon.json Docker registry’e bağlanacak tüm sunucular üzerinde yapılması gerekmektedir.
"insecure-registries" : ["192.168.X.X:5000"] bu şekilde de eklenebilir.
Hostname yapılandırması
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.X.X dockerregistry.local
Hostname yazılıyorsa, Kubernetes cluster içindeki diğer makinelerinde host dosyalarında belirtilmesi gerekmektedir.
Docker'ı yeniden başlatma
Değişiklikleri uygulamak için Docker’ı yeniden başlatın:
Docker Kayıt Defteri Kullanımı
Private Docker Registry’ye image’ları yüklemek ve yönetmek için aşağıdaki adımları izleyin.
Image'ı indirme
Docker registry kurulmuş olan ortama image’ları indirin:sudo docker pull apinizercloud/manager:<APINIZER_VERSION>
Image'ı etiketleme
Image’ı dockerregistry.local:5000/manager: olarak etiketleyin. Bu, mevcut image için ek bir etiket oluşturur:docker tag apinizercloud/manager:<APINIZER_VERSION> dockerregistry.local:5000/manager:<APINIZER_VERSION>
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.
Image'ı registry'ye gönderme
Image’ı yerel kayıt defterine gönderin:docker push dockerregistry.local:5000/manager:<APINIZER_VERSION>
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.
Repository kontrolü
Aktarılan image’ları kontrol edin:ls /var/lib/registry/docker/registry/v2/repositories
Örnek Kullanımlar
Manager, Worker ve Cache Image’larını Yükleme
Local registry’ye pull edilen image’ları push etmek için:
# Apinizer Image'ı yükleme
--- Manager ---
sudo docker pull apinizercloud/manager:<APINIZER_VERSION>
sudo docker tag apinizercloud/manager:<APINIZER_VERSION> <YOUR_IP>:5000/manager:<APINIZER_VERSION>
sudo docker push <YOUR_IP>:5000/manager:<APINIZER_VERSION>
--- Worker ---
sudo docker pull apinizercloud/worker:<APINIZER_VERSION>
sudo docker tag apinizercloud/worker:<APINIZER_VERSION> <YOUR_IP>:5000/worker:<APINIZER_VERSION>
sudo docker push <YOUR_IP>:5000/worker:<APINIZER_VERSION>
--- Cache ---
sudo docker pull apinizercloud/cache:<APINIZER_VERSION>
sudo docker tag apinizercloud/cache:<APINIZER_VERSION> <YOUR_IP>:5000/cache:<APINIZER_VERSION>
sudo docker push <YOUR_IP>:5000/cache:<APINIZER_VERSION>
.tar Dosyasından Image Yükleme
.tar olarak alınmış bir Apinizer image’ının registry’ye 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
Linux Shell Script ile Image’leri Local Docker Registry’e Ekleme
Otomatik Image Yükleme Scripti
Apinizer image’larını otomatik olarak local Docker registry’ye yüklemek için aşağıdaki script’i kullanabilirsiniz:
Script içeriği:
#!/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."
Kullanımı:
sh pullApinizerImages.sh <APINIZER_VERSION>
Registry API Kullanımı
Catalog Bilgisi Sorgulama
Registry’deki tüm repository’leri listelemek için:
curl http://<YOUR_IP>:5000/v2/_catalog
Örnek çıktı:
{
"repositories": [
"cache",
"manager",
"worker"
]
}
Image Tag’lerini Listeleme
Belirli bir image’ın tag’lerini listelemek için:
curl http://<YOUR_IP>:5000/v2/manager/tags/list
Örnek çıktı:
{
"name": "manager",
"tags": [
"<APINIZER_VERSION>"
]
}
Kubernetes Deployment Yapılandırması
Kubernetes’te Apinizer deploy dosyalarında private registry kullanmak için:
image: myregistry.local:5000/apinizercloud/manager:<APINIZER_VERSION>
Repository Temizleme
Repository’deki image’ları silmek için:
cd /var/lib/registry/docker/registry/v2/repositories
sudo rm -rf *
Kullanılmayan Image’ları Temizleme
Kullanılmayan image’ları temizlemek için: