Docker Registry

Oğuz ŞAHİN
Turk Telekom Bulut Teknolojileri
4 min readAug 13, 2022

Selamlar,

Bu yazımda sizlere docker local repostry yani docker registry yapısını oluşturmayı anlatacağım.

Eğer docker ile alakalı merak ettiğiniz temel konular var ise temelden ele aldığım docker ve bileşenleri isimli makele setimi okumanızı tavsiye ederim.

Şimdiden keyifli okumalar dilerim.

Docker registry nedir?

Konteynerların oluşturmak için kullanılan image’ ların depolandığı alandır. Docker üzerinde eğer bir container oluşturmak istenildiği zaman varsayılan (default) olarak direk docker hub üzerinde o image paketini inidirip local docker listeye ekler. Docker registry demek image deposu demektir. Eğer docker hub registry olarak kullanmak istenmez ve kendi docker registry oluşturulmak istendiği zaman kullanılmak istenilen docker image’ lar bu local docker registry sunucusuna save edilir ve kullanılmak istenildiği zaman buradan pull edilir. Docker hub üzerinde kendi image oluşturabileceğiniz gibi bunu ister herkese açık halde tutarsınız herkes kullanır isterseniz de belli kullanıcı tanımlarsınız sadece sizin o tanımladığınız kullanıcı image’ ı kullanabilir.

Neden docker registry tercih ederiz?

  • Eğer yapınızda kendi Docerfile’ ınızı kendiniz oluşturup build edip bir imagee oluşturuyor iseniz sizin kontrolünüzde olan bir repoya paketlerinizi yükleyebilirsiniz. Bu sayede içerisinde şirkete özel olan bilgiler korunmuş olacaktır.
  • Yapınız kapalı bir network ise ve veri güvenliği sizin için önem arz ediyor ise internete tüm sunucularınızı çıkarıp onların kontrollerini yapmaktanda docker image ihtiyacı olan tüm sunucular sizin kendi kontrolünüzde olan içerideki docker local repoya erişip oradan tüm paketlerini yükleyebilirler.
  • Gereksiz yere firewall, waf v.b. gibi güvenlik katmanlarını yormamış olursunuz.
  • Dockerfile üzerinden oluşan image’ larınızı veya docker hub üzerinden indirip kendiniz üzerinde geliştirmeler eklemeler yaparak onları şirket yapınızın standartlarına göre tag ‘ leyerek custom image’ larınızı saklayabilirsiniz.
  • Docher hub üzerinden çekilen paketlerde yapınızın güvenlik modellerinden geçip paketin yüklenmesi için geçen süre yerine paketi kendi iç yapınızdan çok kısa sürede yükleme yapabilirsiniz. Bunun gibi birçok özellikleri bulunmaktadır docker registry kullanımını tercih etmemizin.

Aşağıdaki şekilde bir docker public/private registry işleyişi anlatılmaktadır. Docker hub veya docker registery üzerinden bir image çekileceği zaman aynı işlemler yapılmaktadır.

Docker registry kurulumu

Docker registery aslında bir container üzerinde hizmet vermektedir. Bir container üzerinde hizmet verdiği için ilgili host üzerinde docker kurulu olması gerekmektedir.

a) Eğer docker kurulu değil ise aşağıdaki şekilde docker kurulumu yapılır.

#sudo apt install docker.io
#sudo systemctl enable docker
#sudo systemctl start docker

b) Docker kurulduktan sonra start edilir ve artık bir container oluşturabilecek durumdayız. Bu oluşturacağımız container registery olacağı için ilgili registry imajı docher hub üzerinden çekilir. Docker registery 5000 portunu kullanmaktadır.

Docker kurulu olan hostun 5000 portu registry olacak container’ ın 5000 portuna yönlendirilir. (Eğer docker network modelleri konusunda merak ettiklerin varsa docker container network modelleri isimli makelemi okumanı öneririm.)

Container ismine registry girildi.

restart policy always olarak tanımlandı. Bu sayede container eğer manuel olarak olmamak şartıyla stop olursa otomatik olarak tekrar ayağa kalkacak. Ancak manuel olarak elle durdurulur ise ya docker servisi restart edilince ayağa kalkar yada ilgili container elle manuel start edilince ayağa kalkar.

#docker run -d -p 5000:5000 --restart=always --name registry registry:2

c) Docker registert test edilmesi için docher hub üzerinden örnek bir image pull edilir. Daha sonra o image registry sunucusuna save edilip registry’ den ilgili container’ lara pull edilip registry çalıştığı kontrol edilir.

#docker pull ubuntu:20.04

Docker hub üzerinden indirilen image local_docker_registry_ip:5000/my-ubuntu olarak bir etiket verilir ve daha sonra push edilmek istenildiği zaman direk ilgili konuma yollanır.

#docker tag ubuntu:20.04 local_docker_registry_ip:5000/my-ubuntuNOT: local_docker_registry_ip = sizin docker kurulu olan host ipsi. Dışarıdan erişim sizin hostunuzun 5000 portuna gelecek oradan da ilgili registry container' ın 5000 portuna iletilmiş olacak.

Ubuntu 20.04 ait olan imaj local_docker_registry_ip adresine yollanır.

#docker push local_docker_registry_ip:5000/my-ubuntu

İlk başta docher hub üzerinden indirilen ubuntu:20.04 image silinir. Bu şekilde kendi kurduğumuz registry üzerinden pull edeceğiz.

#docker image remove ubuntu:20.04

Silinen image push ettiğimiz local registryden pull ediliyor.

#docker pull local_docker_registry_ip:5000/my-ubuntu

Oluşturulan registry sunucusundan ubuntu20.04 versiyonu my-ubuntu ismiyle çekilir ve yüklenir. Local docker registry başarılı bir şekilde çalışmaktadır.

NOT: Eğer intranet (kapalı network) bir yapıda çalışılıyor ise docker sunucuların local registry üzerinden pull ederken güvenmesi için her bir hostun ilgili dosyasına eklenmesi gereken bir parametre vardır. Eklenmesi gereken parametre hem windows hemde linux os için aşağıdaki gösterilmiştir. Bu eklemelerden sonra docker servisi restart edilmesi gerekmektedir.

Windows sunucularda oluşturulacak dosya ve içerisine eklenecekler;

#C:\ProgramData\docker\config\daemon.json
{
"allow-nondistributable-artifacts": ["
local_registry_ip:5000"]
}

Linux sunucularda oluşturulacak dosya ve içerisine eklenecekler;

#vi /etc/docker/daemon.json
{
"allow-nondistributable-artifacts": ["
local_registry_ip:5000"]
}

Umarım sizler için faydalı ve keyifli bir içerik olmuştur.

Bir sonraki makalemde görüşmek dileğiyle…

Kolay gelsin.

Kaynakça

ŞAHİN, O. (2019). Container ve Kubernetes Bileşenlerinin İşleyişi ve Sistem Yöneticilerine Olan Faydaları. Ankara: Hoca Ahmet Yesevi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Yüksek Lisans Dönem Projes

--

--