Azure üzerinde container’ları barındırmak için kullanabileceğiniz özel bir saklama alanı olarak tanımlayabileceğimiz Azure Contaner Registry (ACR), açık kaynak Docker Registry 2.0 tabanlı bir yönetilebilen docker registry servisidir. ACR’ı Azure Kubernetes Service, App Service, Batch ve Service Fabric gibi Azure servisleri ve Kubernetes, DC/OS ve Docker Swarm gibi orchestration sistemleri ile birlikte de kullanabilirsiniz.
ACR’a geçmeden önce; hazır bir imaj kullanmak yerine biraz daha gerçeğe yakın olması için Ubuntu üzerinde çalışan bir ASP.NET Core uygulamasını içeren bir container imajı hazırlayalım. Bunun için Docker Container Üzerinde Çalışan Masaüstü Uygulamasını Host İşletim Sistemi Üzerinden Nasıl Kullanabiliriz? ‘de yer alan dockerfile’da VS Code ile ilgili kısımları çıkartıp yerine yeni bir ASP.NET Core uygulaması oluşturma kodları ekleyeceğiz. Özetle Ubuntu üzerine .NET Core SDK kurup, yeni bir ASP.NET Core uygulaması oluşturup çalıştıracağız.
.NET Core SDK kurulumunu buraya eklemiyorum ancak yapacağımız uygulamaya ait dockerfile dosyasının tamamına buradan ulaşabilirsiniz.
Dockerfile içerisinde .NET Core SDK kurulumu sonrasında kaynak dosyaları için mshowto, uygulamanın çalışması için de web adında 2 klasör oluşturuyoruz. Sonra mshowto klasörü içerisine dotnet new mvc komutu ile yeni bir mvc projesi oluşturup dotnet publish komutu ile ReleaseOutput klasörüne publish ediyoruz. Son olarak da ReleaseOutput içeriğini web klasörü altına kopyalıyoruz ve mshowto klasörünü siliyoruz (Resim-1)
Resim-1
Çalışma klasörünü de web olarak ayarladıktan sonra, uygulamamız 5000 portundan çalışacağı için 5000 portunu açıyoruz (expose) ve web uygulamamızı çalıştırıyoruz. Burada url tanımı yapmamın sebeplerinden biri hep http (5000) hem de https (5001) olarak çalışmasını istememem ve kestrel çalıştığında ipv6 ile ilgili olarak alacağı “Unable to bind to http://localhost:5000 on the IPv6 loopback interface: ‘Cannot assign requested address’.” uyarısından kurtulmak.
Resim-2
Dockerfile’ın olduğu klasöre geldikten sonra docker build -t mshowtoapp . komutu ile imajı oluşturduktan sonra docker run -d -p 80:5000 mshowtoapp komutu ile de container’ı çalıştırıyorum. Resim-3‘te göreceğiniz gibi ASP.NET Core uygulamamız container üzerinde çalışıyor.
Resim-3
İmajı oluşturduk, çalıştığını da test ettikten sonra sıra Azure üzerinde Container Registry oluşturma işlemine geldi. Portal üzerinden arama çubuğuna “container” yazarak hızlıca ulaşabilirsiniz (Resim-4)
Resim-4
Container registry oluştururken Resim-5‘de göreceğiniz gibi klasik olarak isim, resource group, location gibi seçeklerin yanında Admin erişimi ve SKU (Basic seçtiğim için bazı özellikler devre dışı kalacak) seçimi bulunuyor.
Resim-5
Settings altında kaynağı oluştururken Admin Enable seçtiğim için registry adıyla aynı isimde bir admin kullanıcısı ve 2 adet şifre görebileceğiz (Resim-6). Eğer disable olarak seçerseniz de buradan tekrar aktif hale getirebilirsiniz. Yukarıda bahsettiğim devre dışı kalan ve sadece Premium SKU’da yer alan özelliklerden de kısaca bahsetmekte fayda var:
- Replication: Adından da anlaşılacağı üzere registry’nizi bölgesel replikasyon yaparak farklı bölgelerden yapılacak kullanımlarda en yakın bölgedeki registry’nin kullanılmasını sağlayabiliyorsunuz. Ayrıca her bölgeye tek tek push etmenize de gerek yok, replikasyonu ACR halledebiliyor.
- Content Trust: Henüz preview olan bu özellik ile sadece imzalı imajların registry’ye eklenmesini sağlayabilirsiniz.
Resim-6
Access keys altında yer alan username ve password bilgilerini, Resim-7‘de göreceğiniz gibi PowerShell üzerinden docker login komutu ile
<registry_adı>.azurecr.io adresine login olmak için kullanıyoruz.
Resim-7
Login işlemini başarıyla tamamladıktan sonra mshowtoapp olarak isimlendirdiğimiz local imajımızı, docker tag komutu ile Azure üzerindeki repository’mize tagliyoruz. Son olarak da docker push komutu ile ACR’e gönderiyoruz.
Resim-8
Docker push komutu network hızınıza göre biraz zaman alabilir. İşlem tamamlandıktan sonra Azure portal üzerinden Container Registry/Repositories altında container imajını görebilirsiniz (Resim-9).
Resim-9
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
https://docs.microsoft.com/en-gb/azure/container-registry/
https://github.com/mertyeter/aspnetcoreonubuntu/blob/master/dockerfile
TAGs: Azure, Azure Portal, Yazılım Geliştiriciler için Azure, Azure Container Registry, ACR, PowerShell, Docker, Containers, Dockerfile, Linux, Ubuntu, .NET, .NET Core, ASP.NET, MVC