Docker Nedir? Ne için ve Nasıl Kullanılır ?

Hasan Yılmaz
4 min readMay 9, 2022

Bence son zamanlarda görünen en keyifli ve devrimsel şey Docker oldu. Docker’ın kendisine ilişkin detaylı bir çok yazı, makale, dökümantasyon mevcut. Çok fazla detaylara inmeden amacına ve ne için kullanıldığına değinmek istedim.

Docker’ın en temel amacı uygulamaları işletim sistemi bağımlılıklarından koparıp, sanallaştırılmış ortamda çalışabilir hale getirmek. Docker içerisinde barındırdığı container yapısını ve Docker Hub üzerinden indirilen image’ları kullanarak ürünü farklı işletim sistemi, versiyon ve environment’larla birbirinden izole şekilde çalıştırır; yeterli kaynak ve gerekli yapılandırmalar ile birlikte kullanıldığında, yapısal problemleri ortadan kaldırarak uygulamalarımızı stabil bir şekilde çalışabilecek hale getirir.

Bu amaç ile yoluna devam ederken öyle bir noktaya ulaştılar ki, artık işletim sistemi değil, sunuculara dokunmadan high availability sağlayabiliyor, zero down time ile uygulama güncellemeleri yapabiliyor hale geliyorsunuz ya da hiç bir sunucuya dokunmadan kodu geri alabiliyorsunuz. Burada bahsettiklerim basit uygulamalar da değil, birbirine bağlı uygulamaların ortak bağımlılıkları ile bir arada çalışabilecek yapıları bir tanımlama sonrasında eksiksiz, uğraştırmadan, temiz bir şekilde yayına alabiliyorsunuz.

Sanallaştırma size çok anlam ifade etmiyor olabilir. İşinizde, yazılımınızda kullanmıyor, ihtiyaç duymuyor olabilirsiniz. Bu Docker’a ihtiyaç duymadığınız anlamına gelmiyor. Eğer kullanmadıysanız size sağlayabileceği faydaları henüz bilmiyorsunuz demektir. Docker’ı, yazılımı lego oyuncaklarına dönüştüren bir container’a benzetiyorum. O karmaşık yazılımlar lego oyuncaklarına dönüştükleri anda oyuncaklarla istediğiniz kombinleri üretip, istediğiniz yapıları rahatlıkla kurabiliyorsunuz.

Bir konteyner, diğer işlemlerden izole edilen özel bir işlem türüdür. Konteynerlara başka hiçbir işlemin erişemediği kaynaklar atanır ve bunlara açıkça atanmamış kaynaklara erişemezler.(En sevdiğim özelliklerinden biride containerlar’ın tek bir işletim sisteminde çalışmasının, güvenlik sorununu nasıl ortadan kaldırdığıdır. Docker bu konuya yazılımsal çözümler getirmiştir. Container içerisinde çalışan uygulamalar başka bir container içerisindeki uygulamayı aksi belirtilmedikçe göremez ve etkileyemezler bir başka deyişle izoledirler.)

Kısaca Docker kavramları ve komutlarından bahsedecek olursak;

Docker Engine

Docker Engine, uygulamalarınızı oluşturmak ve kaplamak için açık kaynaklı bir konteyner teknolojisidir. Dockerfile veya “docker-compose.yml” ‘den bilgileri alarak imajları oluşturur ve çalıştırır . Docker CLI üzerinden bir “docker” komutunu kullandığında yapılması gereken işlemleri yapması için Docker Engine ile iletişime geçer.

Docker Compose

Docker Compose, çok kaplamalı Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır . Compose ile uygulamanızın hizmetlerini yapılandırmak için bir YAML dosyası kullanırsınız. Ardından, tek bir komutla, tüm hizmetleri yapılandırmanızdan oluşturur ve başlatırsınız. Docker Compose, çoklu mikro servisler , veritabanları ve benzeri bağımlılıklardan oluşan ve yapıların çalıştırılması için kullanılır . “docker-compose.yml”, gerekli olan tüm servisleri tek bir yerden konfigüre etmemize ve hepsini tek bir komut ile oluşturup, çalıştırmamızı sağlar.

Docker Machine

Docker Machİne, sanal ana bilgisayarlara Docker Engine’i yüklemenizi ve ana bilgisayarları “docker-machine” komutlarıyla yönetmenizi sağlayan bir araçtır. Docker, içerisinde birden fazla Docker Engine motoru yönetilebilir. Docker Machine, Docker Engine’i uzaktaki yer alan makinelerine yüklemenize ve kendi bilgisayarınızdan, uzaktaki yer alan Docker Engine motorunu yönetilmesini sağlar.

Docker Swarm

Docker Swarm, Docker platformu için konteyner orkestrason aracıdır. Veritabanı, uygulama sunucuları, web sunucuları gibi bileşenlerden oluşan büyük kapsama sahip uygulamalarınızı Docker Swarm ile yönetebilir, yük altında kolaylıkla ölçekleme yapılabilmektedir.

Docker Komutları Nelerdir ?

docker images
Lokal registery’de mevcut bulunan Image’ları listeler

docker ps
Halihazırda çalışmakta olan Container’ları listeler

docker ps -a
Docker Daemon üzerindeki bütün Container’ları listeler

docker ps -aq
Docker Daemon üzerindeki bütün Container’ların ID’lerini listeler

Docker pull <repository_name>/<image_name>:<image_tag>
Belirtilen Image’ı lokal registry’ye indirir. Örnek: docker pull gsengun/jmeter3.0:1.7

docker top <container_id>
İlgili Container’da top komutunu çalıştırarak çıktısını gösterir

docker run -it <image_id|image_name> CMD
Verilen Image’dan terminal’i attach ederek bir Container oluşturur

docker pause <container_id>
İlgili Container’ı duraklatır

docker stop <container_id>
İlgili Container’ı durdurur

docker start <container_id>
İlgili Container’ı durdurulmuşsa tekrar başlatır

docker rm <container_id>
İlgili Container’ı kaldırır fakat ilişkili Volume’lara dokunmaz

docker rm -v <container_id>
İlgili Container’ı ilişkili Volume’lar ile birlikte kaldırır

docker rm -f <container_id>
İlgili Container’ı zorlayarak kaldırır. Çalışan bir Container ancak — f ile kaldırılabilir

docker rmi <image_id|image_name>
İlgili Image’ı siler

docker rmi -f <image_id|image_name>
İlgili Image’ı zorlayarak kaldırır, başka isimlerle Tag’lenmiş Image’lar -f ile kaldırılabilir

docker info
Docker Daemon’la ilgili özet bilgiler verir

docker inspect <container_id>
İlgili Container’la ilgili detaylı bilgiler verir

docker inspect <image_id|image_name>
İlgili Image’la ilgili detaylı bilgiler verir

docker rm $(docker ps -aq)
Bütün Container’ları kaldırır

docker stop $(docker ps -aq)
Çalışan bütün Container’ları kaldırır

docker rmi $(docker images -aq)
Bütün Image’ları kaldırır

docker images -q -f dangling=true
Dangling (taglenmemiş ve bir Container ile ilişkilendirilmemiş) Image’ları listeler

docker rmi $(docker images -q -f dangling=true)
Dangling Image’ları kaldırır

docker volume ls -f dangling=true
Dangling Volume’ları listeler

docker volume rm $(docker volume ls -f dangling=true -q)
Danling Volume’ları kaldırır

docker logs <container_id>
İlgili Container’ın terminalinde o ana kadar oluşan çıktıyı gösterir

docker logs -f <container_id>
İlgili Container’ın terminalinde o ana kadar oluşan çıktıyı gösterir ve -f follow parametresi ile o andan sonra oluşan logları da göstermeye devam eder

docker exec <container_id> <command>
Çalışan bir Container içinde bir komut koşturmak için kullanılır

docker exec -it <container_id> /bin/bash
Çalışan bir Container içinde terminal açmak için kullanılır. İlgili Image’da /bin/bash bulunduğu varsayımı ile

docker attach <container_id>
Önceden detached modda -d başlatılan bir Container’a attach olmak için kullanılır.

Okuyup vakit ayırdığınız için teşekkürler. Çeşitli kaynaklardan önemli noktaları birleştirerek oluşturduğum bir yazı oldu.

--

--