yandex metrika
Docker Kurulumu Nasıl Yapılır? Sıfırdan Tam Rehber - Tecrübe Güncesi
Bilgi TeknolojileriVPS

Docker Kurulumu Nasıl Yapılır? Sıfırdan Tam Rehber

Konu İçeriği

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

2. Gerekli Paketleri Kurun

sudo apt update && sudo apt install ca-certificates curl gnupg komutu ile HTTPS üzerinden indirme yapabilmek için gerekli paketleri kurun. Bu paketler zaten çoğu sistemde yüklü ama kontrol etmekte fayda var.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

2. Gerekli Paketleri Kurun

sudo apt update && sudo apt install ca-certificates curl gnupg komutu ile HTTPS üzerinden indirme yapabilmek için gerekli paketleri kurun. Bu paketler zaten çoğu sistemde yüklü ama kontrol etmekte fayda var.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

1. Eski Sürümleri Temizleyin

Önce sistemde eski Docker kurulumu var mı kontrol edin. sudo apt remove docker docker-engine docker.io containerd runc komutu ile eski paketleri kaldırın. Yoksa sorun değil, devam edin. Ben temiz kurulum yaptığım için bu adımı atlamıştım ama güncelleme yapıyorsanız gerekli.

2. Gerekli Paketleri Kurun

sudo apt update && sudo apt install ca-certificates curl gnupg komutu ile HTTPS üzerinden indirme yapabilmek için gerekli paketleri kurun. Bu paketler zaten çoğu sistemde yüklü ama kontrol etmekte fayda var.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

1. Eski Sürümleri Temizleyin

Önce sistemde eski Docker kurulumu var mı kontrol edin. sudo apt remove docker docker-engine docker.io containerd runc komutu ile eski paketleri kaldırın. Yoksa sorun değil, devam edin. Ben temiz kurulum yaptığım için bu adımı atlamıştım ama güncelleme yapıyorsanız gerekli.

2. Gerekli Paketleri Kurun

sudo apt update && sudo apt install ca-certificates curl gnupg komutu ile HTTPS üzerinden indirme yapabilmek için gerekli paketleri kurun. Bu paketler zaten çoğu sistemde yüklü ama kontrol etmekte fayda var.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Docker’i ilk duyduğumda “bir sanal makine gibi bir şey herhalde” demiştim. Sonra kurmaya çalıştım, belgeler karıştırdım, container’ları yönetmeye uğraştım ve ilk hafta tamamen boşverdim. Ama ikinci denememde her şey oturdu. Şimdi Docker olmadan sunucu yönetmeyi düşünemiyorum. Bu yazıda Docker kurulumunu sıfırdan anlatacağım benim yaşadığım zorlukları yaşamanız için değil, düz bir yoldan gitmeniz için.

Docker Nedir ve Neden Gerekli?

Docker, uygulamaları izole konteynerler içinde çalıştıran bir platform. Sanal makineden farkı: Tüm işletim sistemini değil, sadece uygulamanın ihtiyaç duyduğu kısmı sanallaştırıyor. Bu da çok daha hafif ve hızlı demek. Bir sanal makine açılmak 2-3 dakika sürerken, bir Docker konteyneri 1-2 saniyede ayağa kalkıyor.

Neden gerekli? Çünkü “benim bilgisayarımda çalışıyordu” sorununu çözüyor. Docker ile uygulamanızı, bağımlılıklarıyla birlikte paketliyorsunuz. Hangi sunucuda olursa olsun aynı şekilde çalışıyor. Ben bir WordPress sitesini Docker ile 5 dakikada canlıya aldım eskiden bu işlem 2-3 saat sürerdi.

Docker terminal komutları

Debian/Ubuntu Üzerine Docker Kurulumu

Ben Debian ve Ubuntu sunucuları kullandığım için bu dağıtımlara göre anlatacağım. Centos veya başka bir dağıtım kullanıyorsanız mantık aynı, komutlar biraz farklı. Adım adım gidelim.

1. Eski Sürümleri Temizleyin

Önce sistemde eski Docker kurulumu var mı kontrol edin. sudo apt remove docker docker-engine docker.io containerd runc komutu ile eski paketleri kaldırın. Yoksa sorun değil, devam edin. Ben temiz kurulum yaptığım için bu adımı atlamıştım ama güncelleme yapıyorsanız gerekli.

2. Gerekli Paketleri Kurun

sudo apt update && sudo apt install ca-certificates curl gnupg komutu ile HTTPS üzerinden indirme yapabilmek için gerekli paketleri kurun. Bu paketler zaten çoğu sistemde yüklü ama kontrol etmekte fayda var.

3. Docker GPG Anahtarını Ekleyin

Docker’ın resmi deposundan güvenli indirme yapmak için GPG anahtarını eklemeniz gerekiyor. sudo install -m 0755 -d /etc/apt/keyrings komutu ile dizin oluşturun, ardından curl ile Docker GPG anahtarını indirip ekleyin. Bu adım güvenlik için önemli resmi olmayan depolardan kurulum yapmak riskli.

4. Docker Deposunu Ekleyin ve Kurun

Docker deposunu apt kaynaklarınıza ekledikten sonra sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin komutu ile Docker’ı kurun. Kurulum 1-2 dakika sürüyor. Bittiğinde sudo docker run hello-world komutu ile test edin. “Hello from Docker!” mesajını görürseniz her şey hazır demektir.

5. Sudo Olmadan Kullanım

Varsayılan olarak Docker komutları root yetkisi gerektiriyor. Her defasında sudo yazmak can sıkıcı. sudo usermod -aG docker $USER komutu ile kullanıcınızı docker grubuna ekleyin. Oturumu kapatıp tekrar açın. Artık docker ps yazmak yeterli sudo gerekmiyor. Bu adımı unutursanız her komutta permission denied hatası alırsınız.

Docker konteyner mimarisi

Docker Compose Birden Fazla Konteyner Yönetimi

Docker tek başına güzel ama gerçek gücü Docker Compose ile ortaya çıkıyor. Compose ile birden fazla konteyneri tek bir YAML dosyasıyla yönetebilirsiniz. Örneğin bir WordPress sitesi için Nginx, PHP, MySQL ve Redis konteynerlerini tek bir docker-compose.yml dosyasında tanımlıyorsunuz. docker compose up -d yazıyorsunuz ve hepsi birlikte çalışmaya başlıyor.

Benim tipik bir docker-compose.yml dosyam 30-40 satır. Hangi portlar açık, hangi volume’lar mount edilecek, hangi environment değişkenleri var hepsi tek dosyada. Yeni bir sunucuya geçmem gerekirse docker-compose.yml dosyasını kopyalıyorum, compose up yapıyorum, sistem hazır. Bu перенос (migration) kolaylığı Docker’ın en büyük avantajı.

Sık Kullanılan Docker Komutları

Docker’ı günlük kullanımda en çok işinize yarayacak komutlar bunlar:

Konteyner Yönetimi

docker ps ile çalışan konteynerleri listeliyorsunuz. docker ps -a ile tüm konteynerleri (durdurulmuş dahil) görebilirsiniz. docker stop container_id ile durduruyor, docker rm container_id ile siliyorsunuz. docker logs container_id ile loglara bakıyorsunuz. Ben her sabah docker ps yazıp her şeyin çalışıp çalışmadığını kontrol ediyorum 5 saniyelik bir sağlık kontrolü.

İmaj Yönetimi

docker images ile sistemdeki imajları görüyorsunuz. docker pull nginx ile Nginx imajını indiriyorsunuz. docker rmi image_id ile kullanılmayan imajları temizliyorsunuz. Dikkat: İmajlar disk alanı kaplıyor. Ben ayda bir docker system prune -a komutu ile kullanılmayan her şeyi temizliyorum. Bu bazen 5-10 GB disk alanı kazandırıyor.

Volume ve Veri Kalıcılığı

Docker’ı öğrenirken en çok zorlandığım konu volume’lar. Konteyner silindiğinde içindeki veriler de siliniyor. Bu bir veritabanı ise felaket demek. Volume’lar bu sorunu çözüyor konteynerin dışındaki bir dizini konteynerin içine mount ediyorsunuz. Böylece konteyner silinse bile veriler host makinede kalıyor.

Ben her veritabanı konteynerimde mutlaka volume kullanıyorum. MySQL verilerini /var/lib/mysql dizinine değil, host makinedeki /data/mysql dizinine mount ediyorum. docker-compose.yml dosyasında volumes: – /data/mysql:/var/lib/mysql satırı ile bunu tanımlıyorsunuz. Bu basit kural hayat kurtarıyor bir kez konteyner silip veritabanını kaybettikten sonra bir daha asla unutmuyorsunuz.

Ağ Yapılandırması Konteynerler Arası İletişim

Docker varsayılan olarak bir bridge ağı oluşturuyor. Aynı ağdaki konteynerler birbirleriyle haberleşebilir. Ama farklı projeler için farklı ağlar oluşturmak iyi bir pratik. docker network create projem dediginizde yeni bir ağ olusturuyorsunuz. docker-compose.yml dosyasında networks bolumunde bu ağı tanımlıyorsunuz. Ben her proje için ayrı ağ kullanıyorum guvenlik ve izolasyon icin onemli.

Port mapping de onemli. -p 8080:80 parametresi ile host’un 8080 portunu konteynerin 80 portuna yonlendiriyorsunuz. Böylece tarayıcıda sunucuip:8080 yazdıgınızda konteynerin içindeki servise erişiyorsunuz. Yanlış port mapping yaparsanız servise erişemezsiniz yeni başlayanların en sık yaptığı hata.

Güvenlik İçin Dikkat Edilecekler

Docker guvenli mi? Temel olarak evet ama bazı kurallara dikkat etmek gerekiyor. Birincisi: Konteynerleri root olarak çalıştırmaktan kaçının. Dockerfile’da USER directive ile root olmayan bir kullanıcı tanımlayın. İkincisi: Sadece gerekli portları açın. Her portu dışarıya açmak riskli. Üçüncüsü: İmajları güvenilir kaynaklardan çekin. Resmi Docker Hub imajları genelde guvenli ama unofficial imajlara dikkat edin.

Benim Docker ile Yaşadığım 3 Büyük Hata

Hatalardan öğrenmek de var, başkalarının hatalarından öğrenmek de. İşte benim yaptığım ve sizin yapmamanızı dilediğim hatalar.

Hata 1: Volume Olmadan Veritabanı Çalıştırmak

İlk Docker projemde MySQL konteynerini volume olmadan çalıştırdım. Her şey güzeldi, site çalışıyordu. Bir hafta sonra konteyneri güncellemek istedim, docker rm ile sildim ve… Tüm veriler gitti. Müşteri sitesiydi. O an hissettiğim panik hala aklımda. O günden sonra her veritabanı konteynerimde volume kullanıyorum. Bu hata bir kez yapılır ama bir kez yeterli.

Hata 2: latest Etiketine Güvenmek

Docker imaj çekerken image:latest yazmak kolay ama tehlikeli. Bir güncelleme sonucu uygulamanız çalışmayabilir. Ben şimdi her zaman spesifik versiyon kullanıyorum: mysql:8.0, nginx:1.25, php:8.2-fpm. latest tag’i sadece test ortamında kullanılmalı, production’da asla. Bu kuralı öğrendikten sonra sürpriz güncelleme sorunları bitti.

Hata 3: Docker’ı Restart Policy Olmadan Çalıştırmak

Sunucu yeniden başladığında Docker konteynerleri de durur. restart policy tanımlamadıysanız manuel olarak tekrar başlatmanız gerekir. Ben bir gece sunucu reboot oldu ve sabah sitenin kapalı olduğunu fark ettim. docker compose dosyama restart: unless-stopped ekledikten sonra bu sorun da çözüldü. Artık sunucu yeniden başlasa bile konteynerler otomatik çalışıyor.

Sonuç

Docker kurulumu ilk başta korkutucu görünebilir ama aslında 15 dakikalık bir işlem. Asıl öğrenme süreci kurulumdan sonra başlıyor container yönetimi, volume kullanımı, ağ yapılandırması. Ben Docker’ı öğrenmeye başlayalı 2 yıl oldu ve hala yeni şeyler keşfediyorum. Ama temel kurulum ve kullanım bir haftada oturuyor. Bu yazıdaki adımları takip ederek Docker’ı kurabilir ve ilk konteynerinizi çalıştırabilirsiniz.

Ekstra bir ipucu: Portainer kurun. Portainer, Docker için web tabanlı bir yönetim aracı. Konteynerlerinizi, imajlarınızı, ağlarınızı ve volume’larınızı tarayıcıdan yönetebilirsiniz. Kurulumu da bir Docker komutu: docker run -d -p 9000:9000 –name portainer portainer/portainer-ce. Ben her sunucuma Portainer kuruyorum terminal komutlarını unutsam bile dashboard’dan her şeyi halledebiliyorum. Yeni başlayanlara şiddetle tavsiye ederim.

Siz Docker kullanıyor musunuz? Hangi projelerde kullanıyorsunuz? Yorumlarda konuşalım.

Türkay

Teknoloji, bilgisayar güvenliği, WordPress ve yapay zeka konularında içerik üreten Tecrübe Güncesi'nin editörü. Linux sistem yönetimi, ağ güvenliği ve web geliştirme alanlarında yılların getirdiği tecrübeye sahip. 2015'ten bu yana Türkçe teknoloji içerikleri üreterek okuyuculara yol göstermeyi hedefliyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Başa dön tuşu