Docker ile İlk Konteynerini Çalıştır
İlk defa Docker'ı kurduğumda ne işe yaradığını tam anlamamıştım. "Sanal makine gibi bir şey" diye düşünüp geçmiştim. Sonra bir Node.js projesini kendi bilgisayarımda çalıştırıp sunucuya taşıdığımda bildiğiniz o klasik cümleyi söylemek zorunda kaldım: "Ama benim makinemde çalışıyordu." İşte Docker tam olarak bu cümleyi ortadan kaldırmak için var. Aşağıda kendi kurulum ve deneme sürecimi, takıldığım noktalarla birlikte anlatıyorum.
Docker Neden Sanal Makineden Farklı?
Sanal makine kurduğunuzda tam bir işletim sistemi ayağa kalkar: kendi çekirdeği, kendi belleği, gigabaytlarca disk. Docker ise konteynerleri doğrudan sizin işletim sisteminizin çekirdeği üzerinde çalıştırır. Yani içinde sadece uygulama ve onun ihtiyaç duyduğu kütüphaneler bulunur. Bu yüzden bir konteyner saniyeler içinde başlar, bir sanal makine dakikalar sürer. Ben laptopumda aynı anda beş altı konteyner çalıştırırken fanların bile dönmediğine ilk başta inanamamıştım.
Adım Adım Docker Kurulum ve Kullanım
-
İşletim sistemine göre doğru paketi seçin. Windows ve macOS kullanıyorsanız Docker Desktop en pratik yol. Windows'ta WSL2'nin kurulu olması gerekiyor; kurulum sihirbazı zaten uyarıyor ama ben ilk denemede "sanallaştırma BIOS'ta kapalı" hatası aldım. BIOS ayarlarından Intel VT-x / AMD-V seçeneğini açmadan hiçbir şey çalışmıyor. Linux'ta ise Docker Desktop'a ihtiyacınız yok, doğrudan Docker Engine kurmak daha hafif.
-
Linux'ta resmî depoyu ekleyin. Dağıtımınızın kendi deposundaki paket genelde eski sürüm oluyor. Ubuntu/Debian'da resmî Docker deposunu ekleyip docker-ce, docker-ce-cli, containerd.io ve docker-compose-plugin paketlerini kurmak en sağlıklısı. Bunu bir sunucuda yapıyorsanız SSH ile bağlanma konusunu anlattığım yazıdaki anahtar tabanlı girişi önceden ayarlamanızı öneririm; şifreyle uğraşmak bir süre sonra sinir bozucu oluyor.
-
Kullanıcınızı docker grubuna ekleyin. Her komutun başına sudo yazmaktan kurtulmak için kendinizi docker grubuna eklemeniz gerekiyor. Ekledikten sonra oturumu kapatıp açmayı unutmayın, yoksa değişiklik geçerli olmaz. Bunun bir güvenlik sonucu var: docker grubundaki kullanıcı pratikte root yetkisine sahip sayılır. Paylaşımlı bir sunucuda buna dikkat edin. Kullanıcı, grup ve izin mantığını netleştirmek isterseniz Linux dosya izinleri konusunu ayrıca okumaya değer.
-
Kurulumu test edin. docker run hello-world komutu klasik testtir. Bu komut yerel diskte imajı bulamayınca Docker Hub'dan indirir, konteyneri başlatır, mesajı basar ve çıkar. Ekranda o metni gördüğünüz an kurulum tamam demektir.
-
Gerçek bir uygulama çalıştırın. Ben ilk denemede Nginx'i seçtim: docker run -d -p 8080:80 --name web nginx. Buradaki -d arka planda çalıştırır, -p 8080:80 ise bilgisayarınızın 8080 portunu konteynerin 80 portuna bağlar. Tarayıcıdan localhost:8080 adresine gidince Nginx karşılama sayfasını görüyorsunuz. Sisteme tek bir paket kurmadan çalışan bir web sunucunuz oldu.
-
Konteynerin içine girin. docker exec -it web bash ile konteynerin kabuğuna düşersiniz. İçeride dolaşıp /usr/share/nginx/html/index.html dosyasını değiştirerek sayfayı özelleştirebilirsiniz. Burada önemli bir ders var: konteyneri silerseniz o değişiklik de gider.
-
Verinizi kalıcı hale getirin. Kalıcılık için volume veya bind mount kullanılıyor. Örneğin -v $(pwd)/site:/usr/share/nginx/html parametresiyle bilgisayarınızdaki bir klasörü konteynere bağlarsınız; dosyayı editörünüzde kaydettiğiniz an tarayıcıda görürsünüz. Veritabanı konteynerlerinde bu adımı atlamak, tüm verinizi kaybetmek anlamına gelir.
-
Temel komutları alışkanlık edinin. Günlük kullanımda dönüp dolaşıp aynı birkaç komuta geliyorsunuz.
Komut Ne yapar docker ps -a Çalışan ve durmuş tüm konteynerleri listeler docker logs -f web Konteyner günlüklerini canlı izler docker stop web / docker rm web Konteyneri durdurur / siler docker images Yerel imajları gösterir docker system prune Kullanılmayan artıkları temizler -
Birden fazla servisi Compose ile birleştirin. Uygulama artı veritabanı gibi ikili yapıları elle run komutlarıyla yönetmek yorucu. Bir compose.yaml dosyasına servisleri, portları ve ortam değişkenlerini yazıp docker compose up -d demek çok daha derli toplu. Ben WordPress + MySQL denemesini bu şekilde on dakikada ayağa kaldırdım.
-
Bir sunucuya taşıyın. Yerelde alıştıktan sonra aynı komutları bir bulut sunucusunda denemek çok öğretici. AWS ücretsiz katmanında ilk sunucuyu kurma adımlarını izleyip aynı Nginx konteynerini orada çalıştırabilir, sonra Let's Encrypt ile HTTPS sertifikası ekleyip gerçek bir yayına dönüştürebilirsiniz.