Program
Docker kullanmaya başladığımda ne kadar güçlü olduğunu hemen fark ettim. Geliştirme ortamınızı saatler yerine dakikalar içinde kurduğunuzu ya da uygulamaları farklı makinelerde klasik “benim makinemde çalışıyor” sorununa takılmadan çalıştırabildiğinizi hayal edin.
Docker, uygulamaları hafif ve taşınabilir kapsayıcılara paketleyerek derleme, dağıtım ve çalıştırma süreçlerini basitleştirir. İster geliştirici, ister veri bilimci, ister sistem yöneticisi olun, Docker’ı ustalaşarak kullanmak baş ağrılarınızı azaltır ve iş akışlarınızı daha verimli hale getirir.
Bu eğitimde, temelleri adım adım anlatacağım—Docker’ın kurulumu, temel kavramların anlaşılması ve ilk kapsayıcı tabanlı uygulamanızın çalıştırılması. Sonunda, Docker’ın nasıl çalıştığını bilmekle kalmayacak; onu kullanma konusunda uygulamalı deneyim de kazanacak, daha ileri konular için sağlam bir temel atmış olacaksınız. Haydi başlayalım!
Docker nedir?
Docker, yazılımı ve bağımlılıklarını kapsayıcı adı verilen standart bir birime paketleyerek uygulama dağıtımını basitleştiren açık kaynaklı bir kapsayıcılaştırma platformudur. Geleneksel sanal makinelerden farklı olarak, Docker kapsayıcıları ana işletim sistemi çekirdeğini paylaşır; bu da onları daha verimli ve hafif kılar.
Kapsayıcılar, bir uygulamanın geliştirme, test ve üretim ortamlarında aynı şekilde çalışmasını sağlar. Bu da uyumluluk sorunlarını azaltır ve çeşitli platformlarda taşınabilirliği artırır. Esnekliği ve ölçeklenebilirliği sayesinde Docker, modern DevOps ve bulut-yerel geliştirme iş akışlarında kritik bir araç haline gelmiştir.

Docker’ın resmi logosu.
Docker’ın kurulumu
Docker; Windows, macOS ve Linux dahil çeşitli işletim sistemlerine kurulabilir. Çekirdek işlevler tüm platformlarda aynı kalsa da kurulum süreci sisteme göre biraz farklılık gösterir. Aşağıda, seçtiğiniz işletim sistemi için Docker’ı adım adım kurma yönergelerini bulacaksınız.
Windows’a Docker kurulumu
- Windows için Docker Desktop’ı indirin.

Windows için Docker Desktop Yükleyicisini indirme
- Yükleyiciyi çalıştırın ve kurulum talimatlarını izleyin.

Windows için Docker Desktop’ın kurulumu
- İstendiğinde WSL 2 entegrasyonunu etkinleştirin.
- Kurulumu PowerShell’de
docker –versionkomutunu çalıştırarak doğrulayın.

PowerShell üzerinden kurulum sonrası Docker sürümünü kontrol etme
5. Çalıştır menünüzden Docker Desktop uygulamasını başlatın.

Windows’ta Docker Desktop Uygulamasını Başlatma
macOS’e Docker kurulumu
- Mac için Docker Desktop’ı indirin.

Mac için Docker Desktop yükleyicisini indirme
- İndirdiğiniz
.dmgdosyasını açın ve Docker’ı Applications klasörüne sürükleyin. - Docker’ı başlatın ve kurulumu tamamlayın.
- Terminalde
docker –versionile kurulumu doğrulayın.
Linux (Ubuntu) üzerine Docker kurulumu
- Paket listelerini güncelleyin:
sudo apt update - Bağımlılıkları kurun:
sudo apt install apt-transport-https ca-certificates curl software-properties-common - Docker’ın resmi GPG anahtarını ekleyin:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - Docker deposunu ekleyin:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" - Docker’ı kurun:
sudo apt install docker-ce - Kurulumu doğrulayın:
docker –version
Temel Docker Kavramları
Artık Docker kurulu olduğuna göre hemen kapsayıcıları çalıştırmaya başlamak isteyebilirsiniz. Ancak buna geçmeden önce, Docker’ın temelini oluşturan birkaç anahtar kavramı anlamak önemlidir. Bu kavramlar, Docker’da daha etkili gezinmenize ve yeni başlayanların sık yaptığı hatalardan kaçınmanıza yardımcı olacaktır.
Docker’ın kalbinde, kapsayıcılar için birer plan görevi gören imajlar; bu imajların çalışan örnekleri olan kapsayıcılar; ve imajları paylaşmak ve yönetmek için merkezi bir depo olan Docker Hub bulunur.
Şimdi bu kavramların her birini biraz daha yakından inceleyelim.
Docker imajları
Docker imajları, kapsayıcıların temel yapı taşlarıdır. Bir uygulamayı çalıştırmak için gereken her şeyi—işletim sistemi, uygulama kodu, çalışma zamanı ve bağımlılıklar—içeren değiştirilemez, salt okunur şablonlardır.
İmajlar, bir imajın katman katman nasıl oluşturulacağını tanımlayan bir Dockerfile kullanılarak inşa edilir.
İmajlar, Docker Hub gibi kapsayıcı kayıtlarında saklanabilir ve buradan alınabilir.
İmajlarla çalışmak için bazı örnek komutlar:
docker pull nginx: Docker Hub’dan en güncel Nginx imajını getirir.docker images: Yerel makinedeki tüm kullanılabilir imajları listeler.docker rmi nginx: Yerel makineden bir imajı kaldırır.
Docker kapsayıcıları
Bir Docker kapsayıcısı, bir Docker imajının çalışan örneğidir. Kapsayıcılar, uygulamaların birbirini ya da ana sistemi etkilemeden çalışabileceği izole bir çalışma zamanı ortamı sağlar. Her kapsayıcının kendi dosya sistemi, ağ ve süreç alanı vardır, ancak ana makinenin çekirdeğini paylaşır.
Kapsayıcılar; oluşturma, başlatma, durdurma ve silmeden oluşan basit bir yaşam döngüsünü izler. İşte yaygın kapsayıcı yönetim komutlarının bir dökümü:
- Bir kapsayıcı oluşturma:
docker createveyadocker run - Bir kapsayıcıyı başlatma:
docker start - Bir kapsayıcıyı durdurma:
docker stop - Bir kapsayıcıyı yeniden başlatma:
docker restart - Bir kapsayıcıyı silme:
docker rm
Pratik bir örnek görelim. Aşağıdaki komut, Nginx kapsayıcısını ayrık modda (arka planda çalışacak şekilde) başlatır ve kapsayıcı içindeki 80 numaralı portu ana makinedeki 8080’e eşler:
docker run -d -p 8080:80 nginx
Bu komutu çalıştırdıktan sonra Docker, Nginx imajını (yerelde yoksa) çeker, bir kapsayıcı oluşturur ve başlatır.
Tüm çalışan ve durdurulmuş kapsayıcıları görmek için:
docker ps -a
Bu, tüm kapsayıcıların bir listesini ve durumları ile atanan portlar gibi ayrıntıları gösterir.
Docker Hub
Docker Hub, kapsayıcı imajlarını bulmak, depolamak ve dağıtmak için bulut tabanlı bir kayıt hizmetidir. Kullanıcılar, özel imajlarını Docker Hub’a gönderebilir ve bunları herkese açık veya özel olarak paylaşabilir.
Docker Hub ile etkileşim için bazı komutlar:
docker login: Docker Hub’a kimlik doğrulaması yapar.docker push my-image: Özel olarak oluşturulmuş bir imajı Docker Hub’a yükler.docker search ubuntu: Resmi ve topluluk imajlarını arar.docker pull ubuntu: Docker Hub’dan bir Ubuntu imajı indirir.
Kapsayıcılaştırmada yeni misiniz? Containerization and Virtualization Concepts kursuyla sağlam bir temel atın.
İlk Docker Kapsayıcınızı Çalıştırma
Artık Docker’ın temel kavramlarını ele aldığımıza göre, bunları uygulamaya koyma zamanı! Docker’ın doğru şekilde kurulduğundan ve beklendiği gibi çalıştığından emin olmak için ilk kapsayıcımızı çalıştırarak başlayalım.
Docker kurulumunuzu test etmek için PowerShell’i (Windows) veya Terminal’i (Mac ve Linux) açın ve şunu çalıştırın:
docker run hello-world
Bu komut, hello-world imajını DockerHub’dan çeker ve bir kapsayıcıda çalıştırır.

Docker hello-world imajı örneği
Şimdi bir adım daha ileri gidip gerçek bir uygulama—bir Nginx web sunucusu—çalıştıralım. Şu komutu yürütün:
docker run -d -p 8080:80 nginx
Yukarıdaki komut şunları yapar:
-dbayrağı, kapsayıcıyı ayrık modda çalıştırır; yani arka planda çalışır.-p 8080:80bayrağı, kapsayıcı içindeki 80 numaralı portu yerel makinenizdeki 8080’e eşler ve web sunucusuna erişmenizi sağlar.
Komut başarıyla çalıştıktan sonra bir tarayıcı açın ve şurayı ziyaret edin: http://localhost:8080

localhost:8080’daki web sunucusuna erişim
Varsayılan Nginx karşılama sayfasını görmelisiniz; bu, web sunucunuzun bir kapsayıcı içinde çalıştığını doğrular!
Docker Desktop’ınızda da çalışan bir kapsayıcı göreceksiniz:

8080 portunda çalışan Nginx kapsayıcısı
İlk Docker İmajınızı Oluşturma
Şimdiye kadar Docker Hub’dan önceden oluşturulmuş imajları çalıştırdık. Peki ya uygulamanıza özel bir ortama ihtiyaç duyarsanız? İşte kendi Docker imajınızı oluşturmanın zamanı geldi.
Bir Docker imajı oluşturmak, imaj oluşturmayı otomatikleştiren bir Dockerfile yazmayı içerir. Bu, farklı ortamlar arasında tutarlılık ve taşınabilirlik sağlar. İmaj oluşturulduktan sonra, izole bir ortamda uygulamaları çalıştırmak için bir kapsayıcı olarak çalıştırılabilir.
Bu bölümde, bir Dockerfile yazmanın temellerini, özel bir imaj oluşturmayı ve bunu bir kapsayıcı olarak çalıştırmayı öğreneceğiz.
Dockerfile temelleri
Bir Dockerfile, bir Docker imajının nasıl oluşturulacağını tanımlayan bir dizi talimat içeren bir betiktir. İmaj oluşturma sürecini otomatikleştirir ve ortamlar arasında tutarlılık sağlar. Dockerfile içindeki her talimat, imajda yeni bir katman oluşturur. İşte basit bir Python Flask uygulaması için örnek bir Dockerfile’ın dökümü:
# Base image containing Python runtime
FROM python:3.9
# Set the working directory inside the container
WORKDIR /app
# Copy the application files from the host to the container
COPY . /app
# Install the dependencies listed in requirements.txt
RUN pip install -r requirements.txt
# Define the command to run the Flask app when the container starts
CMD ["python", "app.py"]
Yukarıdaki komutta:
-v my-volume:/app/data,my-volumedepolamasını kapsayıcı içindeki/app/datadizinine bağlar./app/dataiçine kaydedilen veriler, kapsayıcı dursa veya kaldırılsa bile kalıcı olur.
Yukarıdaki Dockerfile’ın adım adım açıklaması:
FROM python:3.9: Python 3.9 yüklü temel imajı belirtir.WORKDIR /app: Kapsayıcı içinde çalışma dizinini/appolarak ayarlar.COPY . /app: Ana makinadaki geçerli dizindeki tüm dosyaları kapsayıcıdaki/appiçine kopyalar.RUN pip install -r requirements.txt: Gerekli tüm bağımlılıkları kapsayıcı içinde kurar.CMD ["python", "app.py"]: Kapsayıcı başlatıldığında çalıştırılacak komutu tanımlar.
İmajı oluşturma ve çalıştırma
Dockerfile tanımlandıktan sonra, aşağıdaki komutlarla imajı oluşturup çalıştırabilirsiniz:
Adım 1: İmajı oluşturun
docker build -t my-flask-app .
Yukarıdaki komut:
- Geçerli dizini (
.) derleme bağlamı olarak kullanır. Dockerfile’ı okur ve talimatlarını yürütür.- Ortaya çıkan imajı
my-flask-appolarak etiketler (-t).
Adım 2: İmajı bir kapsayıcı olarak çalıştırın
docker run -d -p 5000:5000 my-flask-app
Yukarıdaki komut:
- Kapsayıcıyı ayrık modda çalıştırır (
-d). - Kapsayıcı içindeki 5000 numaralı portu ana makinadaki 5000’e eşler (
-p 5000:5000).
Çalışmaya başladıktan sonra, bir tarayıcıda http://localhost:5000 adresine giderek Flask uygulamasına erişebilirsiniz.
Docker Hacimleri ve Kalıcılık
Varsayılan olarak, bir Docker kapsayıcısındaki veriler geçicidir—kapsayıcı durdurulduğunda veya kaldırıldığında veriler kaybolur. Verileri kapsayıcı yeniden başlatmaları arasında kalıcı kılmak ve birden fazla kapsayıcı arasında paylaşmak için Docker, kalıcı depolamayı verimli şekilde yönetmek üzere yerleşik bir mekanizma olan hacimleri (volumes) sağlar.
Verileri kapsayıcının dosya sistemi içinde saklamanın aksine, hacimler Docker tarafından ayrı olarak yönetilir; bu da onları daha verimli, esnek ve yedeklemeyi kolay hale getirir.
Sonraki bölümde, kapsayıcılarınızdaki veri kalıcılığını sağlamak için Docker hacimlerini nasıl oluşturup kullanacağınızı inceleyeceğiz.
Docker hacimleri oluşturma ve kullanma
Adım 1: Bir hacim oluşturun
Bir hacmi kullanmadan önce oluşturmamız gerekir. Şu komutu çalıştırın:
docker volume create my-volume
Bu, Docker’ın belirli bir kapsayıcıdan bağımsız olarak yöneteceği my-volume adlı bir hacim oluşturur.Adım 2: Hacmi bir kapsayıcıda kullanın
Şimdi bir kapsayıcı başlatalım ve hacmi içine bağlayalım:
docker run -d -v my-volume:/app/data my-app
Yukarıdaki komutta:
-v my-volume:/app/data,my-volumedepolamasını kapsayıcı içindeki/app/datadizinine bağlar./app/dataiçinde saklanan veriler, kapsayıcı dursa veya kaldırılsa bile kalıcı olur.
Çoklu Kapsayıcılı Uygulamalar için Docker Compose
Şimdiye kadar tek kapsayıcılı uygulamalarla çalıştık; fakat birçok gerçek hayat uygulaması, birlikte çalışan birden fazla kapsayıcı gerektirir. Örneğin, bir web uygulamasının kendi kapsayıcısında bir arka uç sunucusuna, bir veritabanına ve bir önbellek katmanına ihtiyaç duyması gibi. Bu kapsayıcıları ayrı ayrı docker run komutlarıyla yönetmek hızla zahmetli hale gelebilir.
İşte burada Docker Compose devreye girer.
Docker Compose nedir?
Docker Compose, çoklu kapsayıcı uygulamaların yönetimini basitleştiren bir araçtır. Birden fazla docker run komutu çalıştırmak yerine, tüm uygulama yığınını bir docker-compose.yml dosyasıyla tanımlayıp tek bir komutla dağıtabilirsiniz.
Bir Docker Compose dosyası yazma
Şimdi gerçek bir örnek oluşturalım—MongoDB veritabanına bağlanan basit bir Node.js uygulaması. İki kapsayıcıyı ayrı ayrı yönetmek yerine bunları bir docker-compose.yml dosyasında tanımlayacağız.
Çoklu kapsayıcı kurulumumuzu Docker Compose ile şöyle tanımlarız:
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- database
database:
image: mongo
volumes:
- db-data:/data/db
volumes:
db-data:
Yukarıdaki dosyanın açıklaması:
version: '3': Docker Compose sürümünü belirtir.services:: Bireysel servisleri (kapsayıcıları) tanımlar.web:: Node.js web uygulamasını tanımlar.database:: MongoDB veritabanı kapsayıcısını tanımlar.volumes:: MongoDB veri kalıcılığı için adlandırılmış bir hacim (db-data) oluşturur.
Çoklu kapsayıcılı uygulamaları çalıştırma
docker-compose.yml dosyası hazır olduğunda, tüm uygulama yığınını tek bir komutla başlatabiliriz:
docker-compose up -d
Önceki komut, web ve veritabanı kapsayıcılarını ayrık modda (-d) başlatır.
Tüm servisleri durdurmak için şunu kullanın:
docker-compose down
Bu, tüm kapsayıcıları durdurur ve kaldırır; hacimleri ve ağ ayarlarını ise korur.
Docker Ağ Temelleri
Şimdiye kadar kapsayıcıları çalıştırmaya ve depolamayı yönetmeye odaklandık; peki kapsayıcıların birbirleriyle iletişim kurması gerektiğinde ne olur? Çoğu gerçek dünya uygulamasında kapsayıcılar izole halde çalışmaz—veri alışverişi yapmaları gerekir; bir web sunucusunun veritabanıyla konuşması ya da mikro servislerin birbiriyle etkileşime girmesi gibi.
Docker, izole iç ağlardan harici erişilebilir yapılandırmalara kadar farklı kullanım durumlarını karşılamak için çeşitli ağ seçenekleri sunar.
Docker becerilerinizi bir üst seviyeye taşımaya hazır mısınız? Çok aşamalı derlemeler, gelişmiş ağ yapıları ve daha fazlasını keşfetmek için Intermediate Docker kursuna katılın!
Docker ağ nedir?
Docker ağ, kapsayıcıların aynı ana makinede veya dağıtık bir ortamda birden fazla ana makine arasında birbiriyle iletişim kurmasını sağlayan yerleşik bir özelliktir. Farklı dağıtım senaryolarına uygun ağ izolasyonu, bölümlendirme ve bağlantı seçenekleri sunar.
Docker, farklı kullanım durumlarına hizmet eden birden fazla ağ türünü destekler:
- Köprü (varsayılan): Aynı ana makinedeki kapsayıcılar, dahili sanal bir ağ üzerinden iletişim kurar. Her kapsayıcı, köprü ağı içinde özel bir IP adresi alır ve kapsayıcı adları üzerinden birbirine ulaşabilir.
- Örnek:
docker network create my-bridge-network - Dışarıya servisleri açmadan, tek bir ana makinede birden fazla kapsayıcının güvenli şekilde iletişim kurması için idealdir.
- Host: Kapsayıcılar, ana makinenin ağ yığınını paylaşır ve doğrudan ana makinenin IP adresini ve portlarını kullanır.
- Örnek:
docker run --network host nginx - İzolasyona ihtiyaç duyulmadığında ve yüksek performans gerektiğinde; örneğin izleme ajanları veya düşük gecikmeli uygulamalarda faydalıdır.
- Overlay: Dağıtık bir ağ oluşturarak farklı ana makinelerdeki kapsayıcıların iletişim kurmasını sağlar.
- Örnek:
docker network create --driver overlay my-overlay-network - Servislerin birden fazla düğüme yayıldığı Docker Swarm gibi orkestrasyonlu dağıtımlar için tasarlanmıştır.
- Macvlan: Her kapsayıcıya benzersiz bir MAC adresi atar ve ağda fiziksel bir cihaz gibi görünmesini sağlar.
- Örnek:
docker network create -d macvlan --subnet=192.168.1.0/24 my-macvlan - Kapsayıcıların doğrudan ağa erişmesi gerektiğinde; örneğin eski sistemlerle entegrasyon veya fiziksel ağlarla etkileşim durumlarında kullanılır.
Özel ağlarda kapsayıcı çalıştırma
Kapsayıcı iletişimi için özel bir köprü ağı nasıl kurulur ve kullanılır birlikte görelim.
Adım 1: Özel bir ağ oluşturun
Kapsayıcıları çalıştırmadan önce özel bir ağ oluşturmamız gerekir:
docker network create my-custom-network
Bu komut, kapsayıcıların birbirleriyle iletişim kurabilmesi için katmanlı bir ağ oluşturur.
Adım 2: Kapsayıcıları ağa bağlayarak çalıştırın
Şimdi iki kapsayıcı başlatalım ve yeni oluşturduğumuz ağa bağlayalım:
docker run -d --network my-custom-network --name app1 my-app
docker run -d --network my-custom-network --name app2 my-app
--network my-custom-networkbayrağı, kapsayıcıyı belirtilen ağa ekler.--namebayrağı, başvurmayı kolaylaştırmak için kapsayıcıya benzersiz bir ad atar.
Artık app1 ve app2 kapsayıcıları adlarını kullanarak iletişim kurabilir. Bağlantıyı, kapsayıcılardan birinin içinde ping komutunu kullanarak test edebilirsiniz:
docker exec -it app1 ping app2
Her şey doğru şekilde ayarlandıysa, kapsayıcıların iletişim kurabildiğini doğrulayan bir yanıt görürsünüz.
Docker ağlarını inceleme
Ağ yapılandırmalarını ve bağlı kapsayıcıları doğrulamak için şunu kullanın:
docker network inspect my-custom-network
Bu komut, IP aralıkları, bağlı kapsayıcılar ve yapılandırmalar dahil ağla ilgili ayrıntıları sağlar.
Portları dışa açma ve yayımlama
Kapsayıcıların dışarıdan erişilebilir olması gerektiğinde belirli portları dışa açabilirsiniz.
Örneğin, bir Nginx web sunucusunu çalıştırıp yerel makinenizde 8080 portundan erişilebilir kılmak için şunu kullanın:
docker run -d -p 8080:80 nginx
Bu, kapsayıcı içindeki 80 numaralı portu ana makinadaki 8080’e eşler ve servise http://localhost:8080 üzerinden erişmenizi sağlar.
Docker ağları için en iyi uygulamalar
- Özel ağlar kullanın: Üretim dağıtımlarında varsayılan köprü ağını kullanmaktan kaçının; kapsayıcılar arasında istenmeyen erişimi azaltın.
- DNS tabanlı keşiften yararlanın: IP adreslerini sabitlemek yerine kapsayıcı adlarını kullanarak dinamik servis keşfi sağlayın.
- Dışa maruziyeti kısıtlayın: Servis erişimini denetlemek için güvenlik duvarları veya ağ politikaları kullanın.
- Trafiği izleyin: Ağ trafiğini analiz etmek ve anormallikleri tespit etmek için
docker network inspect, Wireshark veya Prometheus gibi araçlar kullanın. - Overlay ağlarını optimize edin: Dağıtık kurulumlarda, düğüme yerel yönlendirme seçeneklerinden yararlanarak gecikmeyi azaltacak şekilde overlay ağlarını ayarlayın.
Docker En İyi Uygulamaları ve Sonraki Adımlar
Artık Docker’ın temellerini öğrendiğinize göre, güvenli, verimli ve sürdürülebilir kapsayıcı tabanlı uygulamalar oluşturmanıza yardımcı olacak en iyi uygulamaları benimsemenin zamanı geldi.
Aşağıdaki en iyi uygulamalar, Docker iş akışlarınızı düzene koymanıza ve yaygın hatalardan kaçınmanıza yardımcı olacaktır.
- Resmi temel imajları kullanın: Güvenlik ve kararlılık için her zaman resmi ve iyi bakımı yapılan temel imajları tercih edin. Resmi imajlar optimize edilmiştir, düzenli olarak güncellenir ve güvenlik açıkları barındırma olasılığı daha düşüktür.
- İmajları küçük tutun:
python:3.9yerinepython:3.9-slimgibi minimal temel imajları seçerek imaj boyutunu azaltın. Gereksiz bağımlılıkları ve dosyaları kaldırarak depolama ve indirme sürelerini optimize edin. - Çok aşamalı derlemeler kullanın: Derleme ve çalışma zamanı bağımlılıklarını ayırarak Dockerfile’ları optimize edin. Çok aşamalı derlemeler, son imajda yalnızca gerekli yapıtların yer almasını sağlar; böylece boyut ve saldırı yüzeyi azalır.
- İmajları doğru etiketleyin:
latestyerine her zaman sürümlü etiketler kullanın (ör.my-app:v1.0.0); imajları çekerken beklenmedik güncellemelerin önüne geçin. - İmajları güvenlik açıklarına karşı tarayın: Dağıtımdan önce
docker scan,TrivyveyaClairgibi güvenlik tarama araçlarıyla imajlarınızdaki açıkları belirleyin ve giderin. - Ortam değişkenlerini güvenle yönetin: Hassas kimlik bilgilerini imajların içine koymaktan kaçının. Docker secrets, ortam değişkenleri veya AWS Secrets Manager ya da HashiCorp Vault gibi harici gizli yönetim araçlarını kullanın.
- .dockerignore dosyaları kullanın: Gereksiz dosyaları (ör.
.git, node_modules,venv) dışarıda bırakarak derleme bağlamı boyutunu küçültün ve hassas dosyaların imajlara yanlışlıkla dahil edilmesini önleyin. - Günlükleme ve izlemeyi etkinleştirin: Kapsayıcı günlükleri ve izleme için Prometheus, Grafana ve Fluentd gibi araçlardan yararlanın.
docker logsile günlükleri inceleyin ve daha iyi gözlemlenebilirlik için yapılandırılmış günlüklemeyi etkinleştirin.
Docker’ın temellerine hakim olduktan sonra keşfedilecek pek çok ileri konu var. İşte sonraki adımlar için birkaç alan:
- Docker Swarm & Kubernetes: Docker Swarm (yerleşik kümeleme) ve Kubernetes (oto-ölçekleme ve servis keşfiyle kurumsal düzeyde orkestrasyon) gibi üretim düzeyinde orkestrasyonu keşfedin.
- Kapsayıcı güvenliği en iyi uygulamaları: Kapsayıcı tabanlı uygulamaları güvenceye almak için CIS Docker Benchmark yönergelerini izleyin ve Rol Tabanlı Erişim Denetimi (RBAC) uygulayın.
- Docker ile CI/CD ardışıkları: GitHub Actions, GitLab CI veya Jenkins kullanarak imaj derlemelerini, güvenlik taramalarını ve dağıtımları otomatikleştirin.
- Bulut-yerel geliştirme: Ölçeklenebilir ve yönetilen dağıtımlar için Docker’ı AWS ECS, Azure Container Instances ve Google Cloud Run gibi bulut platformlarıyla birlikte kullanın.
- Veri kalıcılığı stratejileri: En iyi depolama yönetimi için Docker hacimleri, bağlama noktaları (bind mounts) ve tmpfs arasındaki farkları anlayın.
Sonuç
Docker, geliştiricilerin uygulamaları oluşturma, dağıtma ve çalıştırma şeklini kökten değiştirdi; modern yazılım geliştirme için vazgeçilmez bir araç haline geldi.
Bu eğitimde şunları ele aldık:
- Docker nedir ve neden önemlidir
- Nasıl kurulur ve ilk kapsayıcınız nasıl çalıştırılır
- İmajlar, kapsayıcılar ve ağ gibi temel kavramlar
- Docker hacimleriyle kalıcı depolama
- Docker Compose ile çoklu kapsayıcı uygulamalar
- Güvenlik, performans ve ölçeklenebilirlik için en iyi uygulamalar
Ama bu sadece başlangıç! Docker uzmanlığınızı derinleştirmek isterseniz, başlangıç seviyesindeki Introduction to Docker kursunu alabilirsiniz. Daha kapsamlı bilgi için, çok aşamalı derlemeler, Docker ağ araçları ve Docker Compose’u içeren bir Intermediate Docker kursunu inceleyebilirsiniz. Son olarak, Docker sertifikası peşindeyseniz, ilgileniyorsanız 2025 için Eksiksiz Docker Sertifikasyonu (DCA) Rehberi’ne göz atın!
SSS
Docker, sanal makinelerden (VM) nasıl farklıdır?
Docker kapsayıcıları ana işletim sistemi çekirdeğini paylaşır; bu da onları hafif ve hızlı kılar. Sanal makineler (VM’ler) ise tam bir misafir işletim sistemine ihtiyaç duyar; bu nedenle daha ağır ve daha yavaştır. Kapsayıcılar mikro servisler ve hızlı ölçekleme için daha uygundur; VM’ler ise aynı donanım üzerinde farklı işletim sistemleri çalıştırmak için daha elverişlidir.
Docker CE ile Docker EE arasındaki fark nedir?
Docker Community Edition (CE), bireysel geliştiriciler ve küçük projeler için uygun, ücretsiz ve açık kaynaklı sürümdür. Docker Enterprise Edition (EE) ise ek güvenlik, yönetim ve destek özellikleri sunan, büyük ölçekli kurumsal dağıtımlar için ideal, ücretli bir sürümdür.
Docker, WSL 2 kullanmadan Windows’ta çalışabilir mi?
Evet, Windows için Docker Desktop iki mod sunar: WSL 2 tabanlı arka uç (önerilir) ve Hyper-V arka ucu. WSL 2 arka ucu daha iyi performans ve Windows ile entegrasyon sağlar; WSL 2 mevcut değilse Hyper-V alternatif olarak kullanılabilir.
Çok mimarili (multi-arch) Docker imajları nedir?
Çok mimarili (multi-arch) imajlar, tek bir Docker imajının birden fazla mimariyi (ör. x86, ARM) desteklemesine olanak tanır. Böylece aynı imaj, farklı donanım platformlarında değişiklik gerektirmeden çalışabilir; IoT cihazları ve bulut ortamları için kullanışlıdır.
Docker güvenliği nasıl sağlar?
Docker, ad alanı izolasyonu, kontrol grupları (cgroups) ve seccomp profilleriyle güvenliği artırır. Ayrıca, kapsayıcıları root olmayan kullanıcılarla çalıştırmak, minimal temel imajlar kullanmak, imza doğrulaması için içerik güvenini etkinleştirmek ve docker scan veya Trivy gibi araçlarla imajları açık taramasından geçirmek önerilen en iyi uygulamalardandır.
