İçeriğe geç
Muhammet Şafak
Araçlar & Teknolojiler 5 dk okuma

Docker sanallaştırma: kurulum ve temel kullanım

Docker'ın container mimarisini, temel komutlarını ve volume/network kavramlarını uygulamalı olarak anlatan bir başlangıç rehberi.


Docker’a ilk baktığımda kafamı karıştıran şey, sanallaştırma kelimesinin VM ile özdeşleşmiş olmasıydı. VMware ya da VirtualBox bağlamında sanallaştırma dendiğinde tam bir işletim sistemi imajı, ayrı bir çekirdek ve bunları ayakta tutan bir hypervisor akla geliyor. Docker farklı bir noktada duruyor: container mimarisini kullanıyor ve host işletim sisteminin çekirdeğini paylaşıyor. Bu paylaşım modeli, container’ları VM’lere kıyasla çok daha hafif ve hızlı başlatılabilir yapıyor.

Her container kendi bağımlılıklarını, kütüphanelerini ve çalışma ortamını kendi içinde taşır. Docker ise host çekirdeği ile container arasındaki iletişimi düzenleyen katman olarak işlev görür. Bu mimari fark, geliştirme ortamlarından production deployment’larına kadar bugün yaygın kullandığımız pek çok pratikle doğrudan ilgili.

Sanallaştırma mimarileri: hipervizör ve konteyner karşılaştırması

Windows’ta Docker Kurulumu

Kuruluma geçmeden önce birkaç ön koşul var. Windows 11 Home üzerinde kurulum yapıyorum; diğer sürümlerde adımlar benzer.

BIOS ayarlarından donanım sanallaştırmayı açmanız gerekiyor. Anakart modeline göre ayar adı değişebilir, ama genellikle Hardware Assisted Virtualization ve Data Execution Protection aranacak iki seçenek. Hazır sistem aldıysanız genellikle açık geliyor.

Ardından Windows’un WSL2 desteğini etkinleştirin. Denetim Masası > Programlar > Windows Özelliklerini Aç veya Kapat üzerinden Linux için Windows Alt Sistemi ve Sanal Makine Platformu seçeneklerini işaretleyin, bilgisayarı yeniden başlatın. Yeniden başlatma sonrasında Windows Update’i çalıştırın; WSL2 çekirdeği güncelleme olarak geliyor.

WSL durumunu doğrulamak için:

wsl --status

Hata alırsanız Microsoft’un manual kurulum dökümanı adım adım anlatıyor.

Ortam hazırsa docker.com/get-started adresinden Docker Desktop’ı indirin ve yükleyin. Kurulum sırasında ek bir yapılandırma yapmanıza gerek yok; varsayılan seçenekler çalışır. Kurulum sonunda oturumu kapatıp açmanızı isteyecek, ardından Docker otomatik başlayacak.

Kurulumu doğrulamak için terminalde:

docker version

İstemci ve sunucu bilgilerini görüyorsanız Docker çalışıyor demektir. Docker Hub hesabı oluşturmanızı da öneririm; resmi image’lara erişmek ve kendi image’larınızı yayımlamak için gerekiyor: hub.docker.com.

Temel Kavramlar

Komutlara geçmeden önce üç terimi netleştirmek işleri kolaylaştırıyor.

Image, bir veya daha fazla bileşeni içinde barındıran paket yapısıdır. İşletim sistemi, kütüphane, uygulama — hepsi image içinde tanımlı. Docker Hub üzerinde yayımlanır ve dağıtılır. Kaynak koda benzetebilirsiniz.

Container, bir image’dan türetilmiş ve izole biçimde çalışan örnektir. Image kaynak kod, container o kodun çalışan hali. Aynı image’dan istediğiniz kadar container başlatabilirsiniz.

Docker Registry (ya da Docker Host), image’ları saklayan ve container’ları çalıştıran yazılım ya da servistir. Docker Hub en bilinen public registry; kendi private registry’nizi de kurabilirsiniz.

Temel Komutlar

Image İşlemleri

Docker Hub üzerinde image aramak için:

docker search php

Yalnızca resmi image’ları listelemek için:

docker search --filter is-official=true php

Bir image çekmek:

docker pull php

Belirli bir sürümü indirmek için etiket (tag) kullanılır:

docker pull php:7.4-cli

Yüklü image’ları listelemek:

docker images

Belirli bir image’ı filtrelemek:

docker images java:8

Image silmek:

docker rmi php

Container İşlemleri

Container oluşturmanın en yaygın yolu run komutudur. Tek seferde image çekme, container oluşturma ve başlatmayı birleştirir:

docker run --name dbserver mysql

mysql image daha önce çekilmemişse önce çeker, ardından dbserver adında bir container oluşturup başlatır.

Arka planda çalıştırmak (detach mode) için -d bayrağı:

docker run -d mysql

Container’ın interaktif terminaline bağlanmak için -it:

docker run -it --name dockerbash ubuntu

Docker konteynerinin etkileşimli (-it) modda çalıştırılması

İşi bitince kendini silmesini istediğiniz tek seferlik container’lar için --rm:

docker run --rm php php -v

Çalışan container’ları listelemek:

docker ps

Tüm container’ları (durmuşlar dahil) listelemek:

docker ps -a

Container durdurmak:

docker stop dbserver

Container silmek:

docker rm dbserver

Container yeniden adlandırmak:

docker container rename dbserver mysqlserver

Container loglarını görmek:

docker container logs dbserver

Container detaylarını incelemek:

docker container inspect dbserver

Container’ın dosya sistemini tar olarak dışa aktarmak:

docker container export -o /backup/db.tar dbserver

Port yönlendirmesi (port mapping) için -p bayrağı — dış port:iç port sırasıyla:

docker container create -p 3333:3306 mysql

Ortam değişkeni geçmek için -e:

docker run -e MYSQL_ROOT_PASSWORD=123456 mysql

Arka planda çalışan bir container’a terminalden bağlanmak:

docker attach dbserver

Volume Mapping

Container’ı durdurduğunuzda içinde yaptığınız değişiklikler varsayılan olarak kaybolur; container, image’dan her seferinde temiz başlar. Veriyi kalıcı tutmak için volume mapping kullanılır: host üzerindeki bir dizin ile container içindeki bir dizini eşleştirirsiniz. -v bayrağı ile dışDizin:içDizin biçiminde belirtilir:

docker run -v /opt/datadir:/var/lib/mysql mysql

Bu örnekte MySQL’in veri dizini host üzerindeki /opt/datadir’a bağlanıyor. Container yeniden başladığında veri orada duruyor, kaybolmuyor. Geliştirme ortamında proje klasörünüzü container’a bağlamak da aynı mekanizma üzerinden işliyor.

Network Türleri

Docker’da üç varsayılan network türü var:

Bridge: Her container’ın ayrı bir yerel IP adresi (genellikle 172.17.0.*) aldığı varsayılan network türü. Container’lar arasında izolasyon sağlar, yine de birbirleriyle iletişim kurabilirler.

docker run --network=bridge mysql

None: Tamamen izole, dışarıyla hiçbir network bağlantısı olmayan container’lar için.

docker run --network=none mysql

Host: Container’ın host’un network yığınını doğrudan kullandığı mod. Port yönlendirmesine gerek kalmaz ama izolasyon da ortadan kalkar.

docker run --network=host mysql

Özel Network Oluşturma

Aynı network üzerinde container’ların birbirine ismiyle erişmesini istiyorsanız kullanıcı tanımlı network oluşturun:

docker network create --driver bridge --subnet 182.18.0.1/24 --gateway 182.18.0.1 wordpress-network

Network’leri listelemek:

docker network ls

Network silmek:

docker network rm wordpress-network

Network detaylarını görmek:

docker inspect wordpress-network

Belirli bir network üzerinde container başlatmak:

docker run --net wordpress-network mysql

Docker’ın gerçek gücü burada anlattığım tekil komutların ötesinde — birden fazla container’ı birlikte yönetmek için Docker Compose, production ortamları için Kubernetes gibi araçlar var. Ama bu temel komutları kavramadan o adımlara geçmek zorlaşıyor. Geliştirme ortamında Docker kullanmaya başlamanın en iyi yolu genellikle mevcut bir projeye docker-compose.yml ekleyip servisleri birer container olarak tanımlamak; bu deneyim Docker’ın nasıl çalıştığını kısa sürede netleştiriyor.

Etiketler: #Docker
Paylaş:

İlgili Yazılar

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi