Nexus Repository Manager 3'ü Depo Olarak Kullanma Serisi 3 — Docker Images

Ahmet Cokgungordu
4 min readJul 1, 2019

--

Kurulum

Tek bir docker komutu kullanarak Nexus 3'ün nasıl kurulduğunu ve çalıştırdığını görmek için bu serinin ilk bölümü olan Nexus Repository Manager 3'ü Depo Olarak Kullanma Serisi 1 — Kurulum ve Maven Artifacts yazısını inceleyin.

Nexus’u Docker Deposu Olarak Yapılandırma

Yapılacaklar kısaca şu şekilde;

  • Kendi oluşturduğumuz Docker Image’ler için private(hosted) bir depo yaratacağız,
  • Docker Hub deposuna erişim sağlayan bir proxy depo yaratacağız,
  • Bu depoların tümünü tek bir URL altında sağlamak için bir grup deposu oluşturacağız.

Oluşturmak istediğiniz her yeni depo için yeni bir blob store açmak önerilmektedir. Bu şekilde, her depo için veriler ‘/nexus-data’(Docker container içinde)da farklı bir klasörde olacaktır.

Varsayılan olarak, Docker Client’lar HTTPS kullanarak depo ile iletişim kurar. Bu örnekte HTTP ile yapılandıracağız. Çünkü sertifikaya veya onu nasıl edineceğine dair bilgiye daha sonraki yazılarda değineceğim.

Dikkat edilmesi gereken bir nokta, Docker deposunda 2 farklı port ile iletişim kuracağız. Docker Hub deposu olan Proxy deposundan Image çekmek için 8082'yi ve Kendi oluşturduğumuz Docker Image’leri içeren Private deposundan Image’leri almak ve Private depoya Image koymak için 8083'ü kullanacağız.

Docker’ın eski sürümlerinde bazı sorunlar yaşanıldığından 1.12.6 ve sonraki sürümlerde çalışmanızı tavsiye ediyorum.

Önceki yazılarda olduğu gibi, Nexus ayağa kalktığında ‘default’ adında blob oluşturulmuş ve örnek olması için repository altında bazı depoların yaratılmış olduğunu göreceksiniz. Öncelikle repoların hepsini blob’larıyla birlikte oluşturmak için siliyoruz. Sonra ise ‘default’ blob tanımlanmış yolu da siliyoruz.

Bütün repository’ler için önce blob oluşturup sonra repository’lerini yaratacağız. Örnek olması açısından ilkinin tanımını yapalım.

İlk yaratağımız Private depomuz için örnek blob tanımı aşağıdaki gibidir.

Private Repo

Ekibinizin oluşturduğu Docker Image’leri için kulanılacak depodur.

Yeni bir Docker(hosted) deposu oluşturun ve aşağıdaki gibi yapılandırın:

Proxy Repo

Resmi olarak Docker Hub’dan indirdiğiniz her şeyi proxy olarak sunan bir depodur. Aynı bağımlılığı bir daha indirmek istediğinizde Nexus’ta önbellekten verilir.

Yeni bir Docker(proxy) deposu oluşturun ve aşağıdaki gibi yapılandırın:

Group Repo

Bu depo, yukarıdaki tüm depoları gruplandırmamız içindir. Bu sayede client’larda indirme/deploy yapılabilmesi için tek bir URL sağlanacaktır.

Yeni bir Docker(group) deposu oluşturun ve aşağıdaki gibi yapılandırın:

İhtiyacınız kadar depo oluşturabilir (diğer public depolara proxy’ler gibi) ve hepsini grup deposu altında toplayabilirsiniz.

Bu adım, Nexus 3'ü Docker deposu olarak kullanmak için isteğe bağlıdır. Çünkü daha sonra bahsedeceğim gibi pull ve push yapmak için proxy ve hosted depolara bağlı kalabiliriz.

İstemciyi ve Projeyi Nexus Deposunu Kullanacak Şekilde Yapılandırma

Reponuzla etkileşimde bulunmak için yapmanız gereken ilk şey, makinenizdeki Docker Daemon’u HTTPS yerine HTTP ile çalışmayı kabul edecek şekilde yapılandırmaktır.

Bu yapılandırmanın tam olarak nasıl yapılacağı kullanacağınız işletim sisteminize bağlıdır, bu nedenle dockerd belgelerini kontrol etmelisiniz. Örneğin RHEL’de bu içeriği /etc/docker/daemon.json içine koyuyoruz.

{
"insecure-registries": [
"your-repo:8082",
"your-repo:8083"
],
"disable-legacy-registry": true
}

Bunu ayarladıktan sonra Docker Daemon’u yeniden başlatmanız gerekir (sudo systemctl restart docker).

Windows veya Mac’te, deamon’unuzu aşağıdaki sekmeden yapılandırmalısınız:

Şimdi, makinenizden aşağıdaki depolara login olmanız gerekiyor:

docker login -u admin -p admin123 your-repo:8082docker login -u admin -p admin123 your-repo:8083

Bu ~/.docker/config.json içinde aşağıdaki gibi bir entry yaratacaktır:

{
"auths": {
"your-repo:8082": {
"auth": "YWRtaW46YWRtaW4xMjM="
},
"your-repo:8083": {
"auth": "YWRtaW46YWRtaW4xMjM="
}
}

Deponuzdan Image çekmek için aşağıdaki isteği kullanacaksınız(8082 nolu bağlantı noktası kullanılıyor)

docker pull your-repo:8082/httpd:2.4-alpine

Kendi Private deponuza Image push etmek için, Image’de repoyu gösteren bir etiketle taglemeniz gerekir. Bu biraz garip görünebilir, çünkü Docker taglerini Git tagleriyle aynı şekilde düşünecek olursanız farklı olduğunu göreceksiniz(8083 numaralı bağlantı noktasının kullanıldığına dikkat edin):

docker tag your-own-image:1 your-repo:8083/your-own-image:1docker push your-repo:8083/your-own-image:1

Deponuzdan kendi Image’inizi pull için aşağıdaki komutları kullanabilirsiniz:

docker tag your-own-image:1 your-repo:8082/your-own-image:1# ordocker tag your-own-image:1 your-repo:8083/your-own-image:1

Her iki port ta işe yarayacak. 8083 numaralı bağlantı noktasının kullanılması doğrudan hosted depoya bağlanacaktır. 8082 numaralı bağlantı noktasının kullanılması ise, hosted repoyu içeren group reposuna bağlanacaktır. Bazı formlarda makinelerinizde yinelenen görüntüleri önlemek için bağlantı noktasını 8083'e ayarlamanızı önermekteler. Buna bağlı olarak, kendi Image’lerinizi çekmek için bağlantı noktasını 8083'e ayarladıysanız, group repo oluşturmayı atlayabilirsiniz gibi bir sonuç çıkarımında bulunabilirsiniz.

--

--