Docker Terminoloji Sözlüğü
Merhaba Arkadaşlar,
Çok uzun bir aranın ardından tekrardan beraberiz. Malumunuz ALES, YDS, yüksek lisans sınavlarına çalışayım edeyim derken blog olayını çok aksattım. Ama bundan sonra seri bir şekilde yazılarımıza devam edip konu eksiklerimizi kapatacağımızı umuyorum. Aslında bugün docker-compose yazısına geçiş yapacaktım. Fakat docker-compose bağımsız oluşturduğumuz tanımların bir çatı altından yönetilmesi durumu olduğu için orada kullanacağımız terimlerin detaylı tanımını yapmak daha doğru olacaktır. Haliyle önce bir terminoloji sözlüğünü yazmaya karar verdim.
O zaman daha fazla zaman kaybetmeden terminolojilere göz atalım.
1)Dockerfile
Dockerfile, anlaşılır bir tabir ile image’ın kaynak kodudur. Bu kaynak kod içerisinde depend alacağımız başka image tanımları, çalıştıracağımız komutları vs tanımlarız. Docker İlk Uygulamamız yazımızda bir örnek Dockerfile hazırlamış ve kullandığımız komutları tanıtmıştık.
2)Docker Image
Dockerfile bir kaynak kodu olarak belirtmiştik. Image, Dockerfile’ın derlenmiş halidir. Yani Dockerfile bir .java dosyası ise image .class dosyasıdır. Dockerfile build ettiğimizde tanımlanmış olan imageları, kütüphaneleri vs indirmeye başlar daha sonra bunları kendi başına bir image haline getirir. Tıpkı bir maven projesini compile etmek gibi. İlk maven projenizi compile ettiğinizde kütüphaneleri indirir ve size bir jar dosyası oluşturur. İkinci kez compiler ettiğinizde ise tekrardan kütüphaneleri indirmez. Eğer biz de bir Dockerfile ilk kez indiriyorsak gerekli kütüphaneleri indirir ve image oluşturur. Tekrar build aldığımızda ise mevcut image ya da kütüphaneleri bulduğundan dolayı indirme işlemi yapmaz sadece bir image oluşturur.
Bununla beraber bir docker’da bir takım image komutları tanımlıdır. Bu komutlara buradan ulaşabilirsiniz.
3)Docker Container
Dockerfile .java dosyası, image .class dosyası ise container da .class dosyasının jvm üzerindeki runtime halidir. Yani çalıştırılmış image dosyasına container denir. Containerlar kendi başlarına bir processtir. Yani RAM üzerindedirler. Bu yüzden container yönetimi oldukça önemlidir. (Bunu compose üzerinde değineceğiz.) Bu yazımızda containerların VM’lerden farkını ve nasıl çalıştığını anlatmıştık.
Container’lar stateless bir durumdadır ve kendi storage alanları yoktur. Docker volume ile hosttaki storage alanına mount olur. Bununla beraber bir image ayağa kalktığında docker default bir network ağı kurar ve container o ağ üzerinden kendisine bir IP alır. Oluşturulan her container bu şekilde oluşturulur ve çalıştırılır. Biz istersek network ağlarını ayarlayıp bazı containerların aynı bazılarının farklı ağlar üzerinde olmasını sağlarız. Fakat bunu docker üzerinden yapmak oldukça zahmetlidir. Buradan docker komutlarına erişebilirsiniz.
4)Docker Volume
Container’ların kendi storage alanı yoktur. Bu yüzden volumelar ile host üzerine mount olur ve kendilerine bir storage alanı ayırırlar. Containerlar bu storage alanında içindeki dataları depolar. Bir container üzerine birden fazla volume tanımı yapılabilir. Volumeları ne amaçla kullanacaksak ona göre ayarlamamız önemli bir ölçüt. Container oluşturulduğunda volume initialize olur. Volumelar container lifecycledan bağımsızdır. Yani container kapatılsa dahi volume silinmez. Lakin container remove edilirse o zaman volume’da remove edilir.
5)Docker Network
Normalde nasıl bazı sistemlerin aynı networkte bazılarının da başka networkte olmasını istiyorsak containerlar için de bazılarının aynı bazılarının farklı network içinde olmasını isteyebiliriz. Docker bize bu konuda da yardımcı olmaktadır. Çalıştırılan her bir container default olarak tanımlanmış bir bridge networke dahil olur. Bu network dahilinde containerlar birbirleriyle iletişime geçebilir. Fakat biz farklı networkler oluşturmak istiyorsak bunu tanımlayabilir ve containerı o networke ekleyebiliriz.
Evet arkadaşlar burada teorik olarak sizlere docker-compose da kullanacağımız terminolojilere değindim. Docker-compose yazımızdan sonra tüm bu teorik bilgileri videolar çerçevesinde pratikleştireceğiz. Adım adım docker üzerinde bir sistem ayağa kaldıracağız.
Şimdilik iyi çalışmalar diliyorum. Görüşmek üzere…