Güvenli Yerel Docker Registry Kurulumu

Docker registry docker images’larının depolandığı sistemdir. Docker images’larını pull ile çekip, push ile de gönderip paylaştığımız sistemdir. Hali hazırda docker resmi olarak https://hub.docker.com/ dan binlerce özel yada genel, kullanıma açtığı images’lar bulunmaktadır. Bizlerde bu sistemi kullanmaktayız.

Docker hub gibi sadece yerel ağınızda kullanıma açmak isteyebileceğiniz bu sistemi aşağıdaki yöntem ile kurup kullanabilirsiniz.

Registry için biz ubuntu kullanacağız ve docker kurulumun yapılmış olduğunu farz ederek registry kurulumuna geçiyoruz.

Örnek domain olarak “fatlan.com” kullanılmıştır.

Kuruluma geçmeden önce güvenli kurulum olduğu için ssl sertifikalarınız(domain.crt, domain.key) mevcut olmalıdır. Bu sertifika authority confirmed olabilir yada self sign olabilir. Burada önemli olan kısım domain.crt dosyasının içinde ilk olarak domain sertifika key’i akabinde kök sertifika key’i olmalıdır. Yoksa registry’e images push ettiğinizde “x509: certificate signed by unknown authority” hatası alırsınız.

Sertifikalarınızı “/certs” klasörünün altına taşıyın.

> sudo mkdir /certs

Ardından “mkdir” komutu ile “/mnt/registry-repo” klasörünü oluşturun. Biz registry için images store olarak bu directory kullanacağız. Sizler bu kısımda “/mnt/registry-repo” dizini farklı bir disk yada partition olarak seçip, mount edip daha geniş bir alana olarak kullanabilirsiniz.

> sudo mkdir /mnt/registry-repo

Ardından aşağıdaki komutla docker registry’i kuralım.

> sudo docker run -d –restart=always –name registry -v /certs:/certs -v /mnt/registry-repo:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2

Registry container’ımızın çalıştığını “sudo docker ps -a” komutu ile kontrol edelim.

Şimdi kurulumu doğrulamak için pull ve push yöntemlerini de dahil ederek test edelim. Ayrıca https://docker.fatlan.com/v2/_catalog adresinden de kontrol edebilirsiniz, tabi siz kendi belirlediğiniz domain name‘i girmelisiniz.

İlk önce hello-world images’ını docker hub’tan pull edelim.

> sudo docker pull hello-world

Ardından bize özel olması için tag atayalım.

> sudo docker tag hello-world docker.fatlan.com/my-hello-world

Şimdi yerel registry’ımıza push ile gönderelim.

> sudo docker push docker.fatlan.com/my-hello-world

Son olarak bu images’ımızı yani kendi yerel registry’ımızdan pull edelim ve bitirelim.

> sudo docker pull docker.fatlan.com:443/my-hello-world

Ubuntu16/CentOS7/RedHat7 Customize The docker0 Bridge ile Kurulum

Şimdiki makalemizde özelleştirilmiş network ile Docker kurulumunu ele alacağız. Öncesinde neden böyle birşeye ihtiyaç duyabileceğimizden bahsedeyim, hemde başımdan geçen durumu da anlatmış olurum.

Bildiğiniz gibi Docker kurulumda docker0 bridge‘inin default ip range‘i olarak 172.17.0.1/16‘yı vererek kurulum gerçekleştirmektedir. Bu durumda sizin bağlantı sağladığınız lokal ağ tercihini hali hazırda 172 li subnet ise kurulum aşamasında Docker Run olduğunda bağlantınız koparacak ve bir daha uzaktan bağlantı sağlayamayacaksınız. Benim başımada böyle bir durum geldi, lokal ağım 172 li /24 subnet’indeydi ve /16 lı subnet benim subnet’i yuttuğundan, çakışma gerçekleşti ve bağlantımı kopardı. Bu durumda konsol aracılığı ile sizin kendi belirlediğiniz subnet ile kurulum yapmanız gerekli yada subnet’i editlemelisiniz. Ben aşağıdaki göstereceğim yöntemle “systemd” kullanarak istediğim ortamı ayağa kaldırdım. Şimdi sırasıyla Ubuntu16’da ve Centos7/RedHat7 de bunu nasıl yapabiliriz, buna değinelim.

*Ubuntu16 da customize subnet ile Docker kurulumu

İlk önce “etc/systemd/system/” altına “docker.service.d” dizinini, “mkdir” komutunu kullanarak oluşturalım.

> sudo mkdir /etc/systemd/system/docker.service.d

İkinci olarak “/etc/systemd/system/docker.service.d/” altına “docker.conf” dizinini “touch” komutunu kullanarak oluşturalım.

> sudo touch /etc/systemd/system/docker.service.d/docker.conf

Ardından “docker.conf” dosyasının içine bir editör aracılığı(vim) ile aşağıdaki gibi doldurup, kaydedin.

docker.conf
[Service]

ExecStart=

ExecStart=/usr/bin/dockerd -H fd:// --bip=10.10.100.1/24

 

Gerekli systemd ayarlamalarını yaptık ve şimdi normal akışında kurulumu yaparak işlemleri tamamlayacağız.

Önce, resmi Docker repository için GPG anahtarını sisteme ekleyelim.

> curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

Ardında Docker repo’sunu ekleyelim.

> sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

Şimdi repolarımızı güncelleyelim.

> sudo apt-get update

Ve şimdi aşağıdaki komutla Docker’ı kuralım.

> sudo apt-get install -y docker-ce

Ardından gerekli kontrolleri sırasıyla yapıp, işlemlerimizi teyit edelim.

*CentOS7/RedHat7 da customize subnet ile Docker kurulumu

Gene “systemd” yi kullanarak işlemleri gerçekleştireceğiz.

İlk önce “etc/systemd/system/” altına “docker.service.d” dizinini, “mkdir” komutunu kullanarak oluşturalım.

> mkdir /etc/systemd/system/docker.service.d

İkinci olarak “/etc/systemd/system/docker.service.d/” altına “docker.conf” dizinini “touch” komutunu kullanarak oluşturalım.

> touch /etc/systemd/system/docker.service.d/docker.conf

Ardından “docker.conf” dosyasının içine bir editör aracılığı(vim) ile aşağıdaki gibi doldurup, kaydedin.

docker.conf
[Service]

ExecStart=

ExecStart=/usr/bin/dockerd --bip=10.10.100.1/24

Gerekli systemd ayarlamalarını yaptık ve şimdi normal akışında kurulumu yaparak işlemleri tamamlayacağız.

Docker’ı kurmadan önce aşağıdaki komutla gerekli paketleri indirip, kuralım.

> yum install yum-utils device-mapper-persistent-data lvm2 -y

Ardında Docker repo’sunu ekleyelim.

> yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

Şimdi aşağıdaki komutla Docker’ı kuralım.

> yum install docker-ce –y

Docker kurulduktan sonra sevisi çalıştırmak ve enable etmek lazım. Aşağıdaki komut ile yapabilirsiniz.

> systemctl enable docker.service

> systemctl start docker.service

Status’ ile son durumu kontrol edelim.

> systemctl status docker.service

Ardından gerekli kontrolleri sırasıyla yapıp, işlemlerimizi teyit edelim.

Bu arada servisi daha önceden kurduysanız “systemd” yapılandırmasını yaptıktan sonra aşağıdaki komutları çalıştırdığınızda sizin belirlediğiniz subnet overwrite olacak.

> systemctl daemon-reload

> systemctl restart docker.service