Docker 101 – Hello, world
August 23, 2016
Docker, günümüzde yaygın olarak kullanılan Linux tabanlı uygulama sanallaştırma teknolojisi ve konteynerlerin içinde uygulama çalıştıran açık kaynak bir araçtır.
Docker ile uygulamalar her platformda çalıştıralabilir hale getirilmektedir. Oluşturacağımız bir docker konteyner, herhangi farklı bir sistemde, her zaman beklenilen şekilde çalışır. Bu şekilde uygulamalar standartlaştırarak dağıtılabilir.
Docker Nedir?
Docker, Linux Kernel’e 2008 yılında eklenen Linux Containers (LXC) üzerine kurulu bir teknolojidir. LXC, işletim sistemi seviyesinde bir sanallaştırma altyapısı sunmaktadır. Konteynerlar içerisinde aynı işletim sistemi tarafından çalıştırılan süreçlere, LXC tarafından işletim sisteminde sadece kendileri koşuyormuş gibi düşünmeleri için bir sanallaştırma ortamı sağlanmıştır. LXC, konteynerlara işletim sistemi tarafından sunulan dosya sistemi, ortam değişkenleri gibi fonksiyonları her bir konteynera özgü olarak sağlar. Aynı işletim sistemi içerisinde çalışmalarına rağmen konteynerlar birbirlerinden izole edilmişlerdir ve birbirleri ile istenmediği müddetçe iletişime geçemezler. İletişim kısıtlamasının bir amacı da konteyner güvenliğini aynı Host üzerindeki diğer konteynerlara karşı da korumaktır.
VMware, Xen, Hyper-V gibi Hypervisor’ler yönettikleri fiziksel veya sanal bilgisayarlar üzerine farklı işletim sistemleri kurulmasına olanak tanımaktadırlar. Sanallaştırılan farklı işletim sistemlerinin, Hypervisor tarafından fiziksel sunucu üzerinde kendisine sağlanan disk bölümlerine kurulması gerekmektedir. LXC’nin Hypervisor’e göre sağladığı avantajların en önemlilerinden birisi aynı işletim sistemi içerisinde sunabilmesidir. Hypervisor bazlı sanallaştırmalarda hepsinin kendine ait Guest işletim sistemi bulundurması gereklidir, LXC’de ise konteynerlar Host’un işletim sistemini kullanırlar yani bir işletim sistemini ortak olarak kullanırlar. Bahsedilen çerçevede Virtual Machine ve Docker Konteynerların yapısı aşağıdaki gibidir.
Docker Mimarisi
Docker iki temel parçadan oluşmaktadır. Birincisi Linux Kernel ile direkt iletişim halinde olan Docker Daemon, ikincisi ise bu Daemon ile iletişim kurmamıza olanak tanıyan Docker CLI. Linux’ta hem Docker Daemon hem de Docker CLI doğal olarak direkt Linux üzerinde koşmaktadır. Windows ve Mac OS X’te ise, Docker CLI Windows ve Mac OS X işletim sistemleri üzerinde koşmakta, Docker Daemon ise bu işletim sistemlerinde bir Hypervisor yardımıyla çalıştırılan Linux üzerinde koşmaktadır.
Windows ve Mac OS X’te Docker CLI ve Docker Daemon TCP ile haberleşmektedirler. Docker CLI’dan verilen komutlar TCP ile Engine’e iletilmekte ve işlenip cevaplanmaktadır. Aralarında TCP haberleşmesi bulunduğundan aralarında TCP bağlantısı kurulabilen herhangi bir Docker CLI ile Docker Daemon’i konuşturmak mümkündür. İşte anlatılan bu yöntemle Windows ve Mac OS X’te Docker çalıştırmak mümkün hale gelmektedir. Linux’ta default olarak aynı makine üzerindeki CLI ile Engine’in Unix Socket’ler üzerinden konuştuğunu ve daha hızlı çalıştığını vurgulamakta fayda var.
Docker Kurulumu
Docker kurulumu yapmak için kullanılan sistemin kernel sürümünün minimum 3.10 olması gerekir. Eski kernel versiyonları docker konteynerlarını çalıştırmak için gerekli olan bazı özelliklerden yoksundur. Mevcut kernel versiyonu
uname -r komutuyla kontrol edilebilir.
$ curl -sSL https://get.docker.com/ | sh
Docker kurulumumuzun doğru çalışıp çalışmadığını kontrol etmek için:
$ docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:33:38 2016 OS/Arch: linux/amd64 Server: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:33:38 2016 OS/Arch: linux/amd64
Çıktıdan da görüldüğü gibi
docker version komutu hem Client (Docker CLI) hem de Server (Docker Daemon) için ayrı ayrı versiyon bilgisi göstermektedir.
Docker Temel Bilgileri
Docker’ ın içerdiği bazı terimleri ne anlama geldikleri ile kısaca açıklamakta fayda var.
Docker Image: İçerisinde uygulamaları barındıran konteyner oluşturmak için kullanılan sistem imajlarıdır.
Dockerfile: Docker imajları kuralları ve komutları önceden belirlenmiş Dockerfile adı verilen özel formattaki dosyalar baz alınarak oluşturulabilir.
Docker Container: Docker imajlarının çalıştırılmış veya durdurulmuş halidir. VMware, Xen, Hyper-V gibi fiziksel sunucu üzerinde halihazırda koşturulmakta olan her bir işletim sisteminin dockerdaki karşılığıdır.
Docker Hub: Oluşturulan docker konteynerlarını başkaları ile paylaşmak veya başkalarının hazırladığı konteyları kullanmak için oluşturulmuş platformdur.
Hello, world
Bu tip tanıtım yazılarının olmazsa olmazı bir “Hello, world” ile bu bölümü bitirelim. Öncelikle komut satırını açarak ilk docker imajımızı aşağıdaki komutla Dockerhub’ dan indirelim.
$ docker pull ubuntu:latest
Bu komut ile Dockerhub’ dan
latest etiketli
ubuntu imajını sistemimize indirdik.
İndirdiğimiz imajı kullanarak aşağıdaki komut ile konteyner oluşturalım.
$ docker run ubuntu:latest echo "Hello, world" Hello, world $
Anlamsız görünsede bu iş için konteyner oluşturuldu, verdiğimiz argümanı çalıştırdı ve konteyner durdu.