Private Registry Kurulumu
Kendi private registry'nizi kurmak, imajları internetten çekip yerel ortamınıza push etmek veya .tar dosyasından yüklemek istediğinizde bu rehberi kullanın. Kurumsal Nexus veya Harbor kullanıyorsanız Nexus Kullanımı veya Harbor Kullanımı sayfalarına bakın.
CentOS 7.4'teki docker dağıtım paketi, ekstra havuzda mevcuttur. CentOS 7 sisteminizde devre dışı bırakılmışsa etkinleştirmeniz gerekebilir.
CentOS 7 üzerinde Registry Kurulumu
Docker Distribution paketini kurun:
sudo yum -y install docker-distribution
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'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
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/...
Node'larda Registry Erişimini Yapılandırma
Varsayılan olarak container runtime'lar registry'ye HTTPS ile bağlanır. Güvenilir bir ağ üzerindeyseniz güvenli olmayan (insecure) registry kullanabilirsiniz. Bu, dahili kullanım için CA imzalı sertifika ihtiyacını ortadan kaldırır.
Yapılandırmayı registry'den imaj çekecek tüm node'larda uygulayın. Node'larınızda kullanılan container runtime'a göre ilgili sekmeyi seçin.
- Containerd
- Docker
Root kullanıcıya geçip yapılandırma dosyasını açın:
sudo su
vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry] bölümüne registry tanımını ekleyin. Registry HTTP üzerinden yayın yapıyorsa endpoint http:// ile başlar:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."dockerregistry.local:5000"]
endpoint = ["http://dockerregistry.local:5000"]
Değişikliği uygulamak için containerd servisini yeniden başlatın:
systemctl restart containerd
systemctl status containerd
Root kullanıcıya geçip /etc/docker/daemon.json dosyasını düzenleyin:
sudo su
vi /etc/docker/daemon.json
Dosya içindeki tüm satırları silip aşağıdaki tanımı ekleyin:
{
"insecure-registries": ["dockerregistry.local:5000"]
}
Registry'ye hostname yerine IP ile erişiyorsanız tanım "insecure-registries": ["192.168.X.X:5000"] şeklinde de yazılabilir.
Değişikliği uygulamak için Docker servisini yeniden başlatın:
systemctl daemon-reload
systemctl restart docker
docker info
Hostname Tanımı
Bir DNS sunucunuz yoksa, hostname'i IP adresiyle eşlemek için /etc/hosts dosyasını kullanın:
cat /etc/hosts
192.168.X.X dockerregistry.local
Hostname kullanılıyorsa, Kubernetes cluster içindeki diğer makinelerin host dosyalarında da tanımlanması gerekir.
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.
Docker registry kurulmuş olan ortama image'ları indirin:
docker pull apinizercloud/apimanager:<APINIZER_VERSION>
Image'ı dockerregistry.local:5000/apinizercloud/apimanager:<APINIZER_VERSION> olarak etiketleyin. Bu, mevcut image için ek bir etiket oluşturur:
docker tag apinizercloud/apimanager:<APINIZER_VERSION> dockerregistry.local:5000/apinizercloud/apimanager:<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'ı yerel kayıt defterine gönderin:
docker push dockerregistry.local:5000/apinizercloud/apimanager:<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.
Aktarılan image'ları kontrol edin:
ls /var/lib/registry/docker/registry/v2/repositories
Diğer bileşenler (worker, cache, integration, apiportal) için aynı adımlar tekrarlanır. Tüm bileşenleri tek seferde yüklemek için aşağıdaki otomatik yükleme scriptini kullanabilirsiniz.
.tar Dosyasından Image Yükleme
.tar olarak alınmış bir Apinizer image'ının registry'ye yüklenmesi:
docker image load < apinizercloud-apimanager.tar
docker tag apinizercloud/apimanager:<APINIZER_VERSION> dockerregistry.local:5000/apinizercloud/apimanager:<APINIZER_VERSION>
docker push dockerregistry.local:5000/apinizercloud/apimanager:<APINIZER_VERSION>
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:
vi pullApinizerImages.sh
Script içeriği:
#!/bin/bash
localRepositoryUrl=dockerregistry.local:5000
if [ $# -eq 0 ]; then
echo "Please enter the version information as a parameter."
exit
fi
echo "Your Local Repository Url : $localRepositoryUrl"
echo "Version = $1"
version=$1
docker pull apinizercloud/apimanager:"$version"
docker tag apinizercloud/apimanager:$version $localRepositoryUrl/apinizercloud/apimanager:$version
docker push $localRepositoryUrl/apinizercloud/apimanager:$version
docker pull apinizercloud/worker:$version
docker tag apinizercloud/worker:$version $localRepositoryUrl/apinizercloud/worker:$version
docker push $localRepositoryUrl/apinizercloud/worker:$version
docker pull apinizercloud/cache:$version
docker tag apinizercloud/cache:$version $localRepositoryUrl/apinizercloud/cache:$version
docker push $localRepositoryUrl/apinizercloud/cache:$version
docker pull apinizercloud/integration:$version
docker tag apinizercloud/integration:$version $localRepositoryUrl/apinizercloud/integration:$version
docker push $localRepositoryUrl/apinizercloud/integration:$version
docker pull apinizercloud/apiportal:$version
docker tag apinizercloud/apiportal:$version $localRepositoryUrl/apinizercloud/apiportal:$version
docker push $localRepositoryUrl/apinizercloud/apiportal:$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://dockerregistry.local:5000/v2/_catalog
Örnek çıktı:
{
"repositories": [
"apinizercloud/apimanager",
"apinizercloud/worker",
"apinizercloud/cache",
"apinizercloud/integration",
"apinizercloud/apiportal"
]
}
Image Tag'lerini Listeleme
Belirli bir image'ın tag'lerini listelemek için:
curl http://dockerregistry.local:5000/v2/apinizercloud/apimanager/tags/list
Örnek çıktı:
{
"name": "apinizercloud/apimanager",
"tags": [
"<APINIZER_VERSION>"
]
}
Kubernetes Deployment Yapılandırması
Kubernetes'te Apinizer deploy dosyalarında private registry kullanmak için:
image: dockerregistry.local:5000/apinizercloud/apimanager:<APINIZER_VERSION>
Diğer bileşenler (worker, cache, integration, apiportal) için aynı path kalıbı kullanılır.
Repository Temizleme
Repository'deki image'ları silmek için:
cd /var/lib/registry/docker/registry/v2/repositories
sudo rm -rf *
Local Docker Registry kurarken dikkat edilmesi gereken bir diğer konu SSL'dir.
Daha fazla bilgi için: https://github.com/Juniper/contrail-docker/wiki/Configure-docker-service-to-use-insecure-registry
Kullanılmayan Image'ları Temizleme
Kullanılmayan image'ları temizlemek için:
docker image prune -a
İlgili Dokümanlar
- Container İmajları ve Registry — senaryo seçimi ve ortak imaj listesi
- Nexus Kullanımı — kurumsal Nexus senaryosu
- Harbor Kullanımı — kurumsal Harbor senaryosu
- Apinizer Sürüm Yükseltme — Yerel Registry — imajları registry'ye push etme ve
kubectl set image