Uzunca bir süredir şirket bünyesinde geliştirdiğimiz ürün ve hizmetlerin yaşam döngüsünü daha iyi yönetebilmek adına arayışlar içindeydim. Bu noktada bir seneyi aşkın bir süredir takip ettiğim Docker teknolojisine yakından bakmaya karar verdim.
Önce özetle Docker’ın ne olduğundan bahsedelim.
Docker nedir, ne işimize yarayacak?
Docker, kabaca geliştirdiğiniz uygulamaları hem Linux hem Windows tabanlı platformlarda, platform etkisinden bağımsız bir şekilde koşturabilmenize yarayan bir “container” teknolojisidir.
Sanal makine (VM) teknolojisinden en temel farkı Docker container’larının her birinin kendine ait bir işletim sistemi kurulumu barındırma ihtiyacı olmaması ama buna rağmen işletim sisteminin çekirdek yeteneklerine, dosya sistemine ve diğer makina kaynaklarına birbirinden izole bir şekilde erişebiliyor olmasıdır. Biliyorsunuz ki sanal makinelerin ise her biri kendine ait bir işletim sistemi kurulumu gerektirir.
Bu durumu anlatan iki güzel çizimi (docker.com’dan alıntıdır) aşağıda paylaşıyorum:
Linux tabanlı sistemlerde uzunca bir süredir kullanılan bu teknoloji Windows 2016 ile birlikte Microsoft dünyasının da önemli bir parçası haline geldi.
Bizim Docker maceramız
Şirketi kurduğumuzdan bu yana Microsoft platformunda uygulama geliştirdiğimiz için ve bu uygulamaların üretim (production) ortamı kurulumları noktasında ciddi kolaylıklar sağlama imkanı olması sebebi ile ben de bu teknolojiyi denemek istedim.
Geçtiğimiz hafta sunucu parkımızda yaşadığımız bir problem sebebi ile bazı sunucularımızı yeniden kurmamız gerekti. Biz de bu durumu fırsat bilerek bu sunuculara Windows 2016 kurduk. Bu hızlı karar ne yazık ki sonrasında başımıza bazı işler açtı ama bunlar bu yazının konusu değil :)
Kurulum adımları
İlk Docker kurulumumu kendime zaman yaratabildiğim bir gece 01:00 ile 03:00 arasında yaptığım için pek sağlıklı olmadı ama bugün bu kurulumu aşağıdaki adımları takip ederek başarılı bir şekilde tamamladım.
1. Windows PowerShell’i yönetici (Administrator) yetkisi ile açtım.
2. Sırayla aşağıdaki komutları çağırdım.
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
3. Kurulumlar tamamlandıktan sonra aşağıdaki komut ile sunucuyu yeniden başlattım.
Restart-Computer -Force
4. Sunucu yeniden başladıktan sonra yine PowerShell üzerinden aşağıdaki komut yardımı ile kurulumda sorun olup olmadığını kontrol ettim.
docker info
Şu şekilde bir çıktı görüyorsanız bir sorun yok demektir.
5. Sunucularda asıl kullanım alanımızın D: sürücüsü olması, C: sürücüsünü sadece işletim sistemi için kullanmamız sebebi ile, Docker’ın varsayılan ayarlarını bir miktar değiştirmem gerekti. Docker standart kurulumu sırasında C:\ProgramData\Docker\config klasörü altına daemon.json isminde bir konfigurasyon dosyası yazılıyor. Bu dosya JSON formatında bir dosya ve içinde yer alan graph parametresi yardıı ile Docker’ın container dosyalarını nerede tutacağını ayarlayabiliyoruz. Ben bu ayarı aşağıdaki şekilde değiştirdim:
"graph": "D:\\Docker"
Docker servisini Windows servisleri yönetim ekranından yeniden başlattıktan sonra, temel konfigurasyon dosyaları dışında tüm Docker dosyaları D: sürücüsü altında yarattığım Docker isimli klasör içinde yer almaya başladı. Bu şekilde ilerleyen dönemde herhangi bir disk alanı sorunu yaşamamın da önüne geçtiğimi düşünüyorum.
6. Geliştirdiğimiz uygulamaları bu teknoloji yardımı ile container’lar içinde çalıştırmaya başlamadan önce önümde kalan son adım, sunucuya kurduğum Docker altyapısını kolay bir şekilde yönetebilmemi sağlayacak, grafik tabanlı bir yönetim uygulaması kurmaktı. Her ne kadar bu konuda yapılan Google aramalarında karşımıza bolca Docker Toolbox ve Kitematic ikilisi çıksa da, Windows 2016 native container olarak adlandırılan, işletim sisteminin kendi docker desteği üzerinde bu ikiliyi çalıştırmak bir problemli oluyor, bu sonuca uzunca bir vakit harcadıktan sonra ulaştım :)
Aternatif arayışına yöneldiğimde de karşıma Portainer isimli uygulama çıktı. Uygulamanın Internet sitesinde kurulumu için aşağıdaki şekilde bir bilgi bulunması açıkcası beni oldukça heveslendirdi.
Hayaller bu şekilde olsa da malesef gerçekler bu şekilde olmadı :) Yukarıdaki komutu çalıştırdığımda aşağıdaki sonuçla karşılaştım:
Aslında en alttaki hata mesajını anlamlandırıp çözme yoluna da gidebilirdim ama bu uygulamanın kendisini bir Docker container içinde çalıştırmak yerine direk ilgili sunucunun üzerine ayrıca kurma ihtimali olduğunu okudum ve gidip uygulamayı bu adresteki yönergelere uygun olarak kurdum.
Bu noktada üzerinden uygulama sunumu yaptığımız Web sunucularımızın birinin üzerinde Docker desteğini aktive etmek bu teknolojiyi grafik tabanlı bir uygulama ile yönetilebilir kılmak (ekibimizin de işini ve alışmasını kolaylaştırmak amacı ile) olarak tanımlayabileceğim ilk hedefime ulaşmış oldum.
Bundan sonrası
Bir sonraki hedefim, e-ticaret ürünümüz olan Lidia’nın temel kurulum çalışmalarını bu teknolojiyi kullanarak nasıl kolaylaştırabileceğimizi incelemek olacak. Aynı zamanda web tabanlı çok sayıda bileşenden oluşan ürünümüzün bu tip yeni teknoloji trendlerine uyum sağlayabilmesi adına mimari açıdan nasıl evrilmesi gerektiğini de detaylıca çalışacağız.
Şirketimizin üzerinde çalıştığı iki ana ürün olan Lidia ve Zippsi’nin teknik mimarilerine yönelik araştırma çalışmalarımızı ve bu çalışmalar sonucu ulaştığımız bilgi birikimini dönem dönem sizinle ürünlerin kendi sitelerindeki blog bölümlerinden paylaşıyor olacağız.
Yazılım mühendisliğine gönül vermiş herkese sevgiler ve saygılar :)
K.