Skip to main content

4 posts tagged with "Container"

View All Tags

· 4 min read
Hasan Gural

Before reading the article, you have to know that I'm not going to explain what are Docker and Container etc. On the internet, you may be able to find a lot of article series to understand Container and Docker structure. Basically, in this one, we will comprehend how can we create docker host on Azure via Docker Machine CLI. I could say, One brief (and incomplete) description is that Docker creates something similar to Virtual Machines, only that Docker containers run on the host machine's OS, rather than on a VM. Each Docker container should ideally contain one service and an application can comprise multiple containers.

As you know, when you install the docker on your machine, it provides command line interface for using and managing your docker hosts. Docker Machine supports to create new docker hosts also contains a lot of parameters when its a deployed which that is why I'm using Docker-Machine CLI to launch new docker host on my hypervisor. I've been testing the deployment of a new docker host on various platform such as Linux, Windows. It gives the easiest way to create new docker hosts. For instance, you are testing your container on your docker host and you want to scale your application. You want to involve your docker application in cluster environments. Also, you may need getting a new docker host to create cluster environments. Here it is, an easy way to get new docker host using Docker-Machine CLI and join to your cluster environments. Before we start, you can find requirements for creating new docker hosts.

Before you begin, you need to know your subscription-Id which will be used by docker-machine. Here it is, the easiest way to find your Azure subscription Id.

After running these lines, you will get your subscription id and to keep it. Because we will use it when we are using docker-machine cli. You can find below.

Create new docker host on Microsoft Azure

We are going to learn Docker-Machine CLI and what are its parameters also how can we use it. We should know Docker-Machine CLI parameters and what type of parameters need to use. Docker-Machine CLI uses 'create' and 'driver' options when we are creating new docker host on Azure After that we remark these commands, it will give you chance to use some operational parameters.I have added the detail of parameters of Docker-Machine CLI.

As you can see the above on the picture just one line is red. It means the parameter should not be blank. Let's have a look example of docker-machine create command.

docker-machine create --driver azure ` --azure-subscription-id $SubscriptionId[0] ` --azure-subnet-prefix 192.168.10.0/24 ` --azure-open-port 22 ` --azure-private-ip-address 192.168.10.10 ` --azure-resource-group 'RG-DockerNodes' ` --azure-location 'West Europe' ` 'dockernode-azure'

As you see above, the picture shows an example of Docker-Machine CLI parameters. The first parameter should have to be your provider. As you know, our provider's is Azure. We can put this line 'Azure'. However, Second Line should not be blank or null, you know this parameter is required. Because we have to remark our subscription Id which will be placed our resources. Let's complete our docker machine commands.

I have executed Docker-Machine Command which is in the above picture. So, It did create a new Docker Host on Azure. Now, We can manage our new docker host with Docker-Machine CLI like we can create a container, network etc. Here is screenshot of our new docker host on Azure that I wanted to show you.

On the Azure Portal, we can see our new docker host. Let's now we can get details of the node on Docker-Machine CLI. For these details, we should use Docker-Machine ls command.

In this article, we have done to create new docker host on Azure. We have a lot of ways to create a new one. We have selected to create with Docker Machine CLI. For Azure perspective, we can use Powershell, Template Deployment.

· 2 min read
Hasan Gural

Bir süredir zamanımın büyük bir bölümünü docker ile container yönetimine harcamaktayım. Gün içerisinde zamanımın çoğunu docker-compose, docker image yazarak ve bunları VSTS ile buluşturmama rağmen yine bir şekilde "Docker command line" ihtiyaç duymaktan alı koyamıyorsunuz. Tüm süreçlerin sonunda kendinizde test edip görmek istiyorsunuz. Fakat bu Docker command line benim gibi Powershell üzerinden erişip ve tab completion yapmak isterseniz, yardımımıza tam bu noktada GitHub üzerinden keşfettiğim güzel bir Powershell Module koşmaktadır. Eğer sizde çok fazla DockerCLI üzerinden, Network, Container, Image yönetimi yapıyorsanız ve bunların tab completion özelliğini kullanmak isterseniz, bu module tam size göre.

Posh-Docker Module GitHub üzerinde kullanıma açılmış yaklaşık en son iki yıl önce güncelleme yapılmış, fakat gayet yeterli bir şekilde işinizi göreceğine eminim. Client tarafında ön gereksinimleri aşağıda gibidir.

  1. Docker CLI 1.3 veya daha üst versiyonu
  2. Powershell 5.0 veya daha üst versiyonu

Bildiğiniz gibi Powershell ile Powershell Modüllerini PS Gallery sayesinde daha doğrusu Powershell One Get aracılığı ile repository üzerinden indirebiliyoruz, Posh-Docker bu şekilde sahip olma şansınız var. Bunların en basit yöntemi Install-Module komutuna kurmak istediğiniz Powershell Module adını göndermeniz yeterli olacak. Posh-Docker isimli Powershell Module kurmak istediğimiz için çalıştırmamız gereken komut sadece "Install-Module -Name Posh-Docker"

Posh-Docker isimli Powershell Modulunu kurduktan sonra, hemen bir kontrol gerçekleştirelim. Hızlı bir şekilde yeni bir powershell session açtım ve Get-Module yazarak Posh-Docker modülünü kontrol ediyorum. Yukarıda çalıştırdığımız komut çalıştırılan client üzerindeki tüm kullanıcılara gidecektir. İsterseniz "Install-Module -Name Posh-Docker -Scope CurrentUser" eklediğimiz Scope parametresi ile sadece Cmdlet'i çalıştırdığınız kullanıcının kendi profilin de saklayabilirsiniz. Get-Module cmdlet kullanarka Posh-Docker modulunun yüklenip yüklenmediğini kontrol edebilirsiniz.

Posh-Docker başarıyla yükledikten sonra artık Docker Command Line ( CLI ) içerisindeki tüm komutlara ve parametrelere tab-completion tadını çıkartarak tabiki Powershell üzerinden kolaylıkla erişebilirsiniz. Şunuda unutmayalım ben günlük işlerimde VSCode veya bir console emulator olan CMDER üzeinden Powershell'i kullanmaktayım. Powershell kullandığım sürece, posh-docker benim için tab-completion yapmaya devam edecek, kullanım şekli nasıl eriştiğiniz tamamen size ait.

Hemen bir örnek ile aşağıdaki görelim.

Yukarıdaki kısa bir yapılan örnekte görüldüğü gibi tab-completion kullanımı Docker Command Line kullanımında bize hız ve bazı komutları hatırlamamızda yardımcı olmaktadır. Posh-Docker, Powershell modülüne GitHub sayfasından erişebilirsiniz.

· 3 min read
Hasan Gural

Yazımızın ilk serisinde Azure Resource Manager Template dağıtım modelini ( JSON Template ) kullanırken yaşadığımız zorlukları ve JSON formatının göz yoran zorluklarından bahsetmiştim. Şimdi ise, YAML formatını kullanarak geliştireceğimiz Azure Resource Manager Template arasında farklılıklara bakıp daha sonra geliştirdiğimiz YAML template dosyasını tekrar nasıl JSON formatına kolay bir şekilde nasıl dönüştüreceğimizden bahsedeceğim.

Öncelikle YAML-CLI aracını github üzerinden indirelim ve ne tür parametreler göndererek kullanıldığına bakalım. Bunun için aşağıdaki Powershell Script çalıştırabilirsiniz, Script belirli parametreler almaktadır.

Yukaıdaki script sayesinde gönderdiğimiz parametreler ile YAML-CLI son sürümünü ilgili klasör içerisinde indirdik. Şimdi ise, nasıl kullanıldığına aldığı parametrelere bakalım.

Görüldüğü üzere, YARM-CLI "-input ve -output" adında iki tane parametre alarak gönderdiğiniz YAML veya JSON dosyalarını kendi içerisinde dönüştürmesini sağlayarak Azure Resource Manager Template modeline göre yapmaktadır. Bunun için geliştirdiğiniz YAML formatında Azure Resource Manager Template'ni "-i veya -- input" parametresi ile göndermeniz ve bu YARM-CLI size vereceği JSON dosyasınıda "-o veya –output" olarak belirli bir path gösterek kaydetmesini sağlamanız. Eğer dilerseniz JSON Formatında bir dosyayı input ederek aynı şekilde YAML formatında bir çıktı elde edip aradaki farklılıkları anlayabilirsiniz. Bu işlemi yapmadan önce aşağıdaki JSON ve ARM ile geliştirilen Resource'ların görünüş şekillerine bakalım.

Yukarıdaki resim içerisinde görüldüğü gibi iki farklı formatıda yan yana koydum. Çok basit bir şekilde Resource Template içersinde DNS Zone oluşturmak için gerekli değerler bulunuyor. Bu formatlardan, YAML olan biraz daha okunabilir ve anlaşılabilir olarak gözükmektedir. Şimdi hemen hızlıca bu YAML dosyasının detaylarına inelim, derine baktığımızda aradaki süslü parantezlerin gittiğini ve YAML bize daha kolay bir okunabilir kullanım sağladığını görmekteyiz. Peki, bu YAML dosyasını nasıl elde edebiliriz hemen ona değinelim.

Bunun için YARM-CLI kullanıp "input" parametresine, elimdeki mevcut JSON dosyasını göstermem yeterli olacaktır. Aşağıdaki örnekte beraber bakalım.

YARM-CLI ile çok kolay bir şekilde, JSON template dosyamızı YAML uzantıya dönüştürdük. Artık YAML üzerinden geliştirmeye devam edebilir veya genel hatlarıyla nasıl yazıldığına aşina olabiliriz. Şimdi ise tam tersini yapalımş aşağıda görmekte olduğunuz kompleks bir Resource Template var. Bu Template YAML formatında yazılmış olsun ve biz bunu JSON dönüştürelim. Neden bu işlemi yapmak zorunda olduğumuzu merak ediyor olabilirsiniz, Azure Resource Manager API üzerinden herhangi bir kaynak deploy ettiğiniz zaman bunu JSON template ile göndermeniz lazım. Bunun için Azure Portal üzerinden gösterimini yaptık, aynı şekilde Portal üzerinden, Powershell veya başka hizmetleri kullanarak Deploy başlattığınız zaman bu Resource Template kesinlikle JSON formatında olmalıdır. Bu tarafta dilerseniz YAML ile yazıp JSON dönüştürüp bunu otomatik hale getirebilirsiniz, Fikir vermesi açısından Bkz : Azure DevOps Stage.

Yukarıdaki kısa görüntüde görüldüğü üzere, çok kolay bir şekilde dönüştürme işlemini gerçekleştirdik. Bende YAML tarafında çok fazla vakit geçirdiğim için özellikle Docker Compose file yazarken, Azure Resource Manager Template geçiş yaptığımda canımı sıkan bir konuydu. Son olarak, dilerseniz Visual Studio Code üzerinde buluna "YARMtoJSON" extension kullanarakda bu işlemleri yapabilirsiniz.

· 3 min read
Hasan Gural

Bu yazı serisine başlamadan önce Azure Resource Manager Template Deployment modelini neden ve niçin kullanıldığını çok iyi anlamamız lazım. Bu yüzden blog üzerinde bunun anlatan yazıları yazmıştım, fakat kısa bir hatırlatma yapmak için kısaca tekar üzerinden geçmek istiyorum. Azure Resource Manager'ın Template Deployment özelliği bize sağladığı en büyük özellik, Infrastructure as code kültürüne ayak uydurmamız ve Azure üzerinde hizmet veren kaynakları devamlı kontrol altında tutup, incremental şekilde değişiklik yapmamıza olanak sağlamaktadır. Çok fazla organizasyon Azure Resource Manager – Template Deployment modeline mevcut ortamlarının template geliştirerek deployment süreçlerini CI/CD içerisine dahil etmektedirler, özetle bu bize JSON formatında sunulan ve Azure üzerinde tüm kaynaklarınızın detaylarını bu template içerisine belirterek çok hızlı bir şekilde deploy edip, aynı şekilde değişen bir şey var mı yok mu diye kontrol altına alabiliyorsunuz, biraz daha farklı bir süreçten örnek vermek gerekirse, DEV/TEST ortamların çoğu Resource Manager Template modeline yazılmış ve deploy edilmeye hazır halde bekliyor. Bu template geliştirmenin bir çok yöntemi var, JSON formatında olan bu dağıtım modeli, Visual Studio Code ve Visual Studio aracılığı ile kolayca geliştirilebilir durumdadır. Dilerseniz Mevcut kaynaklarınızın template detaylarını Azure Portal üzerinden export etme şansınıza sahipsiniz, biraz fikir vermesi için aşağıdaki kısa görüntü size açıklayacaklar.

Yukarıda resimde görüldüğü gibi, Azure Resource Manager Template ulaşmanın birkaç yolunu göstermeye çalıştım. Bu iki yöntem ile ve birkaç kaynak ile JSON Template ( Azure Resource Manager Deployment ) nasıl olduğu hakkında birkaç fikriniz olacaktır. Fakat bu konu oldukça derin ve çok büyük kurumlarda bu tarz süreçler, CI/CD kadar bağlanıp Jenkis, Azure DevOps ( VSTS) üzerinden yönetelir hale geldiler, konu sadece JSON Template yazıp onu deploy etmek değil, yazılan template içerisinde gelebilecek parametreler, variable ve function gibi detaylar var. Bunların kontrolünüde Pester adında başka bir open-source araç ile kontrol ediyoruz ki bu çok başka bir konu, başka yazımızda değinmeye çalışırız.

Esas konumuza gelecek olursa, belirli bir süredir Microsoft feedback sayfasında gördüğüm ve gerçekten çok mantıklı ve benim bile hergün kullanmama rağmen aklıma gelmeyen "zihni-sinir" başlıklar yer almakta, eğer teknolojiyi yakın takip ediyorsanız orada yazılan feedbackler gerçekten harika, sizde bir not bırakın derim. Bir süredir, JSON Template okuması zorlayıcı olması, çok fazla süslü parantezler iç içe girmesi bir kısımdan sonra çileye dönüşüyor, çok uzu deployment süreçlerinden bahsediyorum. Ansible kullanan biri olarak YAML formatı gerçekten daha okunaklı ve daha göze yakın duruyor, JSON severler olmaz öyle şey diyebilirler, fakat YAML formatını kullanarak Azure Resource Manager Deployment yapabilsek çokta güzel olmaz mıydı diye düşünürken bir open-source araç keşfetmem ile güzel bir ışık yandı zihnimde.

Özetle, "YAML CLI" adında open-source olan harika tool sayesinde YAML formatında geliştirilen Azure Resource Manager templatelerini nasıl JSON convert edebileceğimizi göreceğiz bu yazı serimizde. Microsoft bunu ne zaman offical olarak destekler/desteklemez bilemiyorum fakat görünüz açısından gözünüzün alışacağından eminim. JSON ile geliştirilen template ile hiçbir farkı olmayıp sadece süslü parantezlerden kurtulduğunuzu hayal edin, yukarıdaki resimde içerisinde zaten anlaşılır ama kompleks deployment modellerinden içinden çıkılmayan bir hal alıyor malasef, evet intellisense diye bir şey var kabul ediyorum fakat YAML ile geliştirmek çok daha kolaylık sağlayacak.

YAML-CLI Github üzerinden erişebileceğiniz ve kullanımı çok kolay bir araçtır. Aşağıda detaylarını görebilirsiniz, yazımızın devamında bu aracı nasıl kullanacağımıza değineceğim.