Sitemap
Tuanaozdemir

Tuanaozdemir

Docker Nedir ve Ne İşe Yarar?

4 min readOct 24, 2026

--

Docker, bir uygulamayı ve o uygulamanın çalışması için gereken tüm altyapıyı (kütüphaneler, araçlar, ayarlar) container (konteyner) adı verilen izole ve bağımsız ortamlarda paketleyip çalıştırmayı sağlayan açık kaynaklı bir sanallaşma platformudur. Peki bu teknoloji pratikte ne işe yarıyor? Geliştiriciler arasında en çok karşılaşılan “Benim bilgisayarımda çalışıyordu sunucuda (veya başka bir bilgisayarda) neden bozuldu?” sorununu çözer. Kod yazarken kurulan işletim sistemi veya ayarlar ne olursa olsun, Docker sayesinde proje her yerde aynı şekilde çalışır.

Image ve Container Farkı

Docker Image, uygulamanın paketlenmiş, salt okunur (değiştirilemez) şablonudur. İçinde uygulamanın kodları ve çalışması için gereken tüm sistem gereksinimleri yazar ama kendisi çalışan, canlı bir şey değildir. Docker container ise bu şablonun çalıştırılabilir canlı halidir. Uygulamanın çalışması için gereken her şeyi hapseden, bilgisayarın geri kalanından tamamen yalıtılmış güvenli bir alandır. Image bir binanın kağıt üzerindeki mimari projesi; container o mimari plana bakılarak inşa edilmiş, içinde oturulabilen gerçek evdir.

Projeyi Nasıl Çalıştırdım?

Ödev dosyasını bilgisayarıma indirdim, klasöre çıkardım ve Visual Studio Code programında açtım. Daha sonra proje klasörünün içindeki app.py dosyasını açtım ve web sayfasında görünecek metni kendi ismimle değiştirdim. Ardından compose.yaml dosyasında çalışacak olan containerların isimlerini tuana-web ve tuana-nginx olarak güncelledim. Son olarak VS Code terminalini açtım ve “docker compose up -d — build” komutunu çalıştırarak her iki servisi de aynı anda ayağa kaldırdım.

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size

Dockerfile Ne İşe Yarar ve İçindeki Kodlar Ne Anlama Geliyor?

Dockerfile Nedir?
Dockerfile, bir Docker image oluşturmak için kullanılan uzantısı olmayan ve her satırında adım adım tüm katmanların açıklandığı talimat listesidir.

Get Tuanaozdemir’s stories in your inbox

Join Medium for free to get updates from this writer.

İçindeki temel komutlar:
FROM: İmajın hangi temel altyapıda çalışacağını belirtir.(Örn: Python)
COPY veya ADD: Yerel makinedeki dosyaları veya klasörleri imajın içerisine kopyalar.
RUN: imaj oluşturulurken (build aşamasında) içine yazılan terminal komutlarını çalıştırır. Projenin çalışması için gereken ek paketlerin ve kütüphanelerin kurulmasını sağlar.
WORKDIR: Container içinde çalışılan ana klasörü (çalışma dizinini) ayarlar.
CMD: Container ayağa kalktığında uygulamayı başlatacak son komuttur.

Docker Compose Nedir ve compose.yaml Ne İşe Yarar?

Docker Compose Nedir?
Birden fazla Docker container’ını (tuana-web sayfası ve tuana-nginx sunucusu gibi) tek bir merkezden yönetmeyi ve aynı anda uyum içinde çalıştırmayı sağlayan araçtır.

compose.yaml Dosyası:
Hangi container’ların çalışacağını, birbirleriyle nasıl haberleşeceklerini ve hangi portları kullanacaklarını belirlediğimiz ana ayar (orkestrasyon) dosyasıdır. Bu dosya sayesinde her servisi terminalden tek tek başlatmak yerine, sadece “docker compose up” komutunu kullanarak tüm sistem tek seferde ayağa kaldırılabilir.

İçindeki Temel Komutlar:
Services: Projeyi oluşturan tüm bağımsız container’ların alt alta tanımlandığı ana bölümdür.
Build: Docker Hub gibi hazır bir havuzdan hazır bir imaj çekmek yerine kendi dosyamıza bakılarak imajın sıfırdan oluşturulacağını (inşa edileceğini) belirtir.
Image: Sıfırdan inşa etmek yerine hangi hazır Docker imajının (nginx gibi) kullanılacağını belirtir.
Ports: Docker container’ının içindeki bir servisi bilgisayarınıza veya yerel ağınıza açmak için kullanılır. (Örn: “8081:80” yazarak bilgisayarımdaki 8081 portunu, içerideki Nginx’in 80 portuna bağladım.)
Volumes: Container içindeki verilerin kalıcı olmasını (persistence) sağlar ve ana bilgisayarımız ile container arasında dosya paylaşımı (eşleşme) kurmamıza yarar.
depends_on: Servislerin hangi sırayla başlatılacağını veya durdurulacağını belirleyerek, container’lar arasındaki bağımlılık ilişkisini yönetir.

İki Servisin Farkı (Build Edilen ve Hazır İndirilen)
Bu projede tuana-web (kendi sayfam) ve tuana-nginx (sunucu) olmak üzere iki servis çalıştırdım. Bunların en büyük farkı nasıl oluşturulduklarıdır.
tuana-web (Build Edilen Image): Bu kendi uygulamamız olduğu için build: . komutu kullanılarak Dockerfile’daki tarife göre sıfırdan inşa edilir (build edilir).
tuana-nginx (Hazır İndirilen Image): Nginx sunucusunu sıfırdan yazmamıza gerek yoktur. Bu yüzden image: nginx:latest komutu kullanılarak internetteki hazır şablon doğrudan indirilir.

Yapay Zeka Kullanımı
Bu yazıyı hazırlarken kavramları daha sade ve anlaşılır ifade edebilmek için yapay zekadan destek aldım.

Sorulan Sorular: “Docker Compose ne işe yarar?”, “compose.yaml içindeki komutlar satır satır nasıl açıklanır?” gibi sorular sordum.
İşe Yarayan Cevaplar: Karmaşık Docker kavramlarının (image, container) sadeleştirilmesinde ve uzun teknik tanımların özet hale getirilmesinde çok işime yaradı.
Hatalı veya Eksik Bulunan Cevaplar: Yapay zeka süreci hızlandırmak adına yönergedeki “iki servisin farkı (build edilen ve hazır indirilen)” şartını atlayarak doğrudan komut açıklamalarına geçmeye çalıştı. Ayrıca Docker Compose konusunu tek seferde uzunca bir metin olarak vermek istedi. Bu noktalarda yapay zekaya müdahale ederek süreci adım adım ilerletmesi yönünde komutlar verdim ve eksik bıraktığı yerleri yönergeye göre yeniden düzenlettim. Üretilen hiçbir metin doğrudan kopyalanmamış, tüm Dockerfile ve compose.yaml açıklamaları alınan fikirler doğrultusunda tamamen kendi ifadelerimle yazıya geçirilmiştir.

--

--