ASP.Net Core Uygulaması için Docker İmajı Hazırlamak – Production

Bir önceki makalemizde her ne kadar geliştirdiğimiz Asp.Net uygulaması için Docker imajı hazırlamış olsak da, hatırlarsanız imaj dosyamız içerisinde kaynak kodlarımızda yer alıyordu. Container’ımız ilk başladığında kaynak kodlar derlenerek çıktısı çalıştırılıyordu. Gerçek hayat senaryolarında isterler biraz farklı olabilir, en azında üretim ortamınıza kaynak kodlarınızın bulunduğu bir imaj atmak istemeyeceğinizi düşünüyorum. Bu sebeple, bu makalemde önceki örneğimizden devam ederek içerisinde sadece derlenmiş dosyalarımızın olduğu bir Docker imajı oluşturacağız.

Öncelikle bir önceki makalede oluşturduğumuz proje dizinimize giderek aşağıdaki komut yardımıyla projemizi publish edelim;

dotnet publish

Bu komut projemizi derleyerek çıktılarını bin/Debug/netcoreapp1.0/publish klasörü altına atacaktır.

Bir sonraki adımda daha öncede otomatik olarak oluşturulmuş olan Dockerfile dosyasını düzenlememiz gerekiyor;

FROM microsoft/dotnet:latest
COPY bin/Debug/netcoreapp1.0/publish/ /app/
WORKDIR /app
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "EnterprisecodingDockerApp.dll"]

Bir önceki versiyonundan farklı olarak bu defa sadece publish klasörü altındaki dosyaların Docker imajına kopyalanmasını istiyoruz. Container başlatıldığında ise standart dotnet run komutu yerine doğrudan app klasörü altındaki EnterprisecodingDockerApp.dll dosyasının başlatılmasını istiyoruz. Sizin projeniz için dll adı farklı olabilir, buraya kendi projenizin çıktı dll’ini yazmanız önemli.

Ardından, proje dizininde çalıştıracağımız aşağıdaki komut yardımıyla güncellenmiş haliyle Docker imaj dosyamızı oluşturalım;

docker build -t enterprisecoding-docker-app .

Son olarak da aşağıdaki komut ile docker container’ımızı başlatabiliriz;

docker run -it -p 5000:5000 enterprisecoding-docker-app

docker run komutu ile Docker container'ını başlatabilirsiniz

Şimdi… Buraya kadar işin kolay kısmıydı. Önceki makalemi okuduysanız, zaten basit bir akıl yürütme ile bu adımları sizde bulabilirdiniz. Asıl püf noktası ise bundan sonrasında…

Yukarıdaki komut çıktısında http://localhost:5000  adresinin dinlendiği belirtiliyor; fakat kendi bilgisayarınızdan bu adresi açtığınızda daha önceden ulaşabildiğiniz uygulamaya ulaşamadığınızı göreceksiniz.

Bunun nedeni, mesaja dikkat edecek olursanız, uygulamanın varsayılan olarak sadece localhost’tan gelen talepleri dinlemesi. Bir önceki makalede yer alan Dockerfile içerisindeki Entrypoint değerini hatırlayın. Teknik olarak, bir container içerisinden çalışan uygulamamız için bilgisayarımız uzak bir makine, dolayısıyla localhost ile ulaşamamız normal…

Problemin çok basit bir çözümü var aslında, yapılması gereken uygulamamıza gelen tüm talepleri yanıtlaması gerektiğini söylemek. Bunun için Dockerfile dosyasında aşağıdaki satırı bulun;

EXPOSE 5000

ve bu satırın hemen üzerine aşağıdaki şekilde bir girdi ekleyin;

ENV ASPNETCORE_URLS http://*:5000

Dockerfile dosyasını bu şekilde güncelledikten sonra daha önceden takip ettiğimiz adımlarla docker imajını oluşturup başlatacak olursanız bu defa uygulamayı kendi bilgisayarınızdan açabildiğinizi göreceksiniz.

Container'ımızın durumunu Kitematic içerisinden de takip edebilirsiniz

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir