Docker Nedir ve Ne İşe Yarar?

Docker, uygulamaların ihtiyaç duydukları bağımlılıklarla birlikte izole edilmiş ortamlarda paketlenmesini, dağıtılmasını ve çalıştırılmasını sağlayan bir konteyner platformudur. Yazılım geliştirme, test ve sunucu yönetimi süreçlerinde yaygın olarak kullanılmaktadır.

Docker sayesinde bir uygulama, çalışması için gereken kütüphaneler, çalışma ortamı ve yapılandırmalarla birlikte konteyner içerisinde çalıştırılabilir. Bu yaklaşım, uygulamaların farklı sistemlerde daha tutarlı biçimde çalışmasına yardımcı olur.

Docker; web uygulamaları, veritabanları, API servisleri, mikroservis mimarileri ve geliştirme ortamlarının oluşturulmasında kullanılabilir.

Docker Logo, Icon, and Brand Guidelines

Why Are Companies Using Docker? A Real-World Case Study on the Rise of Containerization

Build Your Own AI-driven Code Analysis Chatbot for Developers with the GenAI Stack | Docker

Docker Nedir?

Docker, işletim sistemi düzeyinde sanallaştırma teknolojilerinden yararlanarak uygulamaları konteyner adı verilen ortamlarda çalıştıran bir platformdur.

Konteynerler, uygulamanın çalışması için gerekli dosyaları ve bağımlılıkları içerebilir. Böylece uygulamalar farklı sunuculara veya geliştirme ortamlarına daha kolay taşınabilir.

Docker'ın temel özellikleri şunlardır:

  • Uygulamaları konteyner içerisinde çalıştırmak.

  • Uygulama bağımlılıklarını paketlemek.

  • Farklı geliştirme ortamlarında tutarlılık sağlamak.

  • Uygulamaların dağıtımını kolaylaştırmak.

  • Birden fazla servisi ayrı konteynerlerde çalıştırmak.

  • Konteynerlerin başlatılmasını ve durdurulmasını yönetmek.

  • Uygulama sürümlerinin dağıtımını kolaylaştırmak.

  • Geliştirme ve test ortamlarını hızlı oluşturmak.

  • Konteyner ağlarını ve depolama alanlarını yönetmek.

  • Otomatik dağıtım süreçleriyle bütünleşmek.

Docker, uygulamaların çalıştırılma ortamını standartlaştırmaya yardımcı olan araçlardan biridir.

Docker Ne İşe Yarar?

Docker, uygulamaların kurulumu, çalıştırılması ve dağıtılması sırasında karşılaşılan ortam farklılıklarını azaltmak amacıyla kullanılır.

Örneğin bir PHP uygulamasının çalışması için belirli bir PHP sürümüne ve bazı eklentilere ihtiyaç duyulabilir.

Geleneksel yöntemde bu bağımlılıklar doğrudan sunucuya kurulur.

Docker kullanılan bir yapıda ise PHP uygulaması, gerekli çalışma ortamını içeren bir konteyner içerisinde çalıştırılabilir.

Docker'ın başlıca kullanım alanları:

  1. Web sitesi ve uygulama barındırma.

  2. PHP, Python, Node.js ve Java uygulamalarını çalıştırma.

  3. MySQL, MariaDB, PostgreSQL ve Redis servislerini yönetme.

  4. Yazılım geliştirme ortamları oluşturma.

  5. Uygulama testlerini gerçekleştirme.

  6. Mikroservis tabanlı sistemler geliştirme.

  7. Sürekli entegrasyon ve dağıtım süreçlerini destekleme.

  8. Birden fazla uygulamayı aynı sunucuda çalıştırma.

  9. Uygulamaları farklı sunuculara taşıma.

  10. Geçici test ortamları oluşturma.

Docker Nasıl Çalışır?

Docker, konteynerleri oluşturmak ve yönetmek için Docker Engine bileşenini kullanır.

Docker Engine; Docker daemon, API ve komut satırı araçları gibi bileşenlerden oluşur.

Genel çalışma süreci:

  1. Uygulama için bir Docker imajı hazırlanır veya mevcut bir imaj kullanılır.

  2. Docker Engine, imajdan bir konteyner oluşturur.

  3. Konteynerin ağ ve depolama ayarları yapılandırılır.

  4. Uygulama konteyner içerisinde başlatılır.

  5. Konteyner Docker komutlarıyla yönetilir.

  6. Gerekirse yeni bir imaj sürümüyle konteyner yeniden oluşturulur.

Linux sistemlerinde Docker konteynerleri, çekirdek özelliklerinden yararlanarak süreç izolasyonu ve kaynak yönetimi sağlar.

Docker Container Nedir?

Docker Container, bir Docker imajından oluşturulan ve uygulamanın çalıştırıldığı ortamdır.

Konteynerler, uygulamaya ait işlemleri diğer konteynerlerden belirli ölçüde izole eder.

Bir konteyner içerisinde:

  • Web sunucusu.

  • PHP uygulaması.

  • API servisi.

  • Veritabanı.

  • Önbellek servisi.

  • Arka plan uygulaması.

çalıştırılabilir.

Konteynerler aynı ana makinenin çekirdeğini paylaşabilir. Bu nedenle konteyner izolasyonu, tam sanal makinelerdeki izolasyonla aynı değildir.

Docker Image Nedir?

Docker Image, konteyner oluşturmak için kullanılan dosya sistemi katmanlarını ve çalışma yapılandırmasını içeren şablondur.

Bir imaj; uygulama dosyalarını, gerekli kütüphaneleri ve çalışma ortamını içerebilir.

Yaygın Docker imajları:

Docker İmajı

Kullanım Alanı

nginx

Web sunucusu

httpd

Apache HTTP Server

php

PHP uygulamaları

mysql

MySQL veritabanı

mariadb

MariaDB veritabanı

postgres

PostgreSQL veritabanı

redis

Önbellek ve veri yapısı servisi

node

Node.js uygulamaları

python

Python uygulamaları

ubuntu

Ubuntu tabanlı çalışma ortamı

Docker imajları, Docker Hub gibi konteyner kayıt sistemlerinden indirilebilir veya Dockerfile kullanılarak oluşturulabilir.

Docker ile Sanal Makine Arasındaki Farklar Nelerdir?

Docker konteynerleri ve sanal makineler farklı sanallaştırma yaklaşımlarını kullanır.

Docker Explained from First Principles | by Amir Zakerimanesh | Jan, 2026 | Medium

Bitovi Academy - What is Docker

Docker vs Virtual Machine: Mengapa Developer Modern Lebih Memilih Container? | by M Farras Majid | Medium

Özellik

Docker Konteyner

Sanal Makine

İşletim sistemi

Genellikle ana makine çekirdeğini paylaşır

Kendi konuk işletim sistemini çalıştırır

Başlatma süresi

Genellikle daha kısa

Genellikle daha uzun

Kaynak kullanımı

Çoğu durumda daha düşük ek yük

Konuk işletim sistemi nedeniyle daha fazla ek yük

İzolasyon

İşletim sistemi düzeyinde

Hipervizör düzeyinde

Dağıtım

İmaj üzerinden

Sanal disk veya makine imajı üzerinden

Kullanım alanı

Uygulama ve servis çalıştırma

Tam işletim sistemi ortamları

Docker konteynerleri her durumda sanal makinelerden daha uygun değildir. Seçim, uygulamanın güvenlik ve işletim sistemi gereksinimlerine bağlıdır.

Docker'ın Avantajları Nelerdir?

Docker'ın yaygın kullanılmasının nedenlerinden biri, uygulama dağıtım süreçlerini kolaylaştırmasıdır.

Başlıca avantajları:

1. Ortam Tutarlılığı

Uygulamanın çalışma bağımlılıkları imaj içerisinde tanımlanabilir.

Bu sayede geliştirme, test ve üretim ortamları arasındaki farklılıklar azaltılabilir.

2. Kolay Dağıtım

Hazırlanan Docker imajı, uyumlu Docker çalışma ortamlarında kullanılabilir.

3. Hızlı Başlatma

Konteynerler, tam bir konuk işletim sistemi başlatmak zorunda olmadığından genellikle hızlı başlatılabilir.

4. Servislerin Ayrılması

Farklı uygulamalar ayrı konteynerlerde çalıştırılabilir.

5. Sürüm Yönetimi

Uygulamaların farklı sürümleri ayrı imaj etiketleriyle yönetilebilir.

6. Kaynak Yönetimi

Konteynerler için CPU ve RAM kullanım sınırları yapılandırılabilir.

7. Otomasyon

Docker, yazılım geliştirme ve dağıtım süreçlerindeki otomasyon araçlarıyla birlikte kullanılabilir.

Docker'ın Dezavantajları Nelerdir?

Docker kullanımında bazı sınırlamalar ve yönetim gereksinimleri bulunur.

  • Konteyner ağlarının yapılandırılması ek bilgi gerektirebilir.

  • Kalıcı verilerin doğru yönetilmesi gerekir.

  • İmajların güvenliği ve güncelliği takip edilmelidir.

  • Yanlış yapılandırılan konteynerler güvenlik riski oluşturabilir.

  • Konteyner günlüklerinin ve kaynak kullanımının izlenmesi gerekir.

  • Birden fazla servis içeren sistemlerde yönetim karmaşıklaşabilir.

  • Konteyner izolasyonu tek başına bütün güvenlik gereksinimlerini karşılamaz.

Bu nedenle Docker kullanılan sunucularda güvenlik, depolama ve ağ yapılandırmalarının dikkatle yönetilmesi gerekir.

Docker Linux Sunucuya Nasıl Kurulur?

Docker Engine, desteklenen Linux dağıtımlarına kurulabilir.

Ubuntu, Debian, AlmaLinux ve Rocky Linux gibi sistemlerde Docker kullanılabilir.

Ubuntu ve Debian sistemlerinde dağıtım depolarında bulunan paketlerle kurulum yapılabilse de Docker Engine'in güncel ve desteklenen sürümleri için Docker'ın ilgili dağıtıma uygun paket deposu tercih edilebilir.

Örneğin Ubuntu üzerinde dağıtımın sağladığı paket mevcutsa:

sudo apt update
sudo apt install docker.io

Kurulumdan sonra Docker servisini başlatmak için:

sudo systemctl enable --now docker

Docker sürümünü kontrol etmek için:

docker --version

Docker servisinin durumunu kontrol etmek için:

sudo systemctl status docker

Bu kurulum örneği Ubuntu dağıtım paketini kullanır. Docker'ın resmi paket deposundaki docker-ce paketleriyle aynı sürüm ve paketleme yapısına sahip olmayabilir.

Docker Kurulumu Nasıl Test Edilir?

Docker'ın doğru çalışıp çalışmadığını kontrol etmek için test konteyneri çalıştırılabilir.

sudo docker run hello-world

Bu komut:

  1. Gerekli imaj yerelde bulunmuyorsa indirir.

  2. İmajdan bir konteyner oluşturur.

  3. Test uygulamasını çalıştırır.

  4. Docker'ın çalıştığını gösteren mesajı görüntüler.

Test tamamlandıktan sonra konteyner çalışmasını sonlandırır.

Docker Komutları Nelerdir?

Docker konteynerlerini yönetmek için farklı komutlar kullanılır.

Komut

Açıklama

docker --version

Docker sürümünü gösterir

docker images

Yerel imajları listeler

docker ps

Çalışan konteynerleri gösterir

docker ps -a

Tüm konteynerleri gösterir

docker pull

İmaj indirir

docker run

Konteyner oluşturur ve çalıştırır

docker start

Durdurulmuş konteyneri başlatır

docker stop

Çalışan konteyneri durdurur

docker restart

Konteyneri yeniden başlatır

docker logs

Konteyner günlüklerini gösterir

docker exec

Çalışan konteyner içinde komut çalıştırır

docker rm

Konteyneri kaldırır

docker rmi

İmajı kaldırır

Docker ile Nginx Web Sunucusu Nasıl Çalıştırılır?

Docker kullanılarak Nginx web sunucusu konteyner içerisinde çalıştırılabilir.

Örnek:

sudo docker run -d \
  --name nginx-web \
  -p 8080:80 \
  nginx:stable

Bu komutta:

  • -d: Konteyneri arka planda çalıştırır.

  • --name: Konteynere isim verir.

  • -p 8080:80: Ana makinenin 8080 portunu konteynerin 80 portuna eşler.

  • nginx:stable: Kullanılacak Nginx imajını belirtir.

Konteynerin durumunu kontrol etmek için:

sudo docker ps

Sunucunun 8080 portu erişilebilir durumdaysa Nginx varsayılan sayfası görüntülenebilir.

Önemli: -p 8080:80 kullanımı, uygun ağ yapılandırmasında portu dış bağlantılara açabilir. Yalnızca yerel erişim gerekiyorsa -p 127.0.0.1:8080:80 tercih edilebilir.

Docker Container Nasıl Durdurulur ve Başlatılır?

Çalışan Nginx konteynerini durdurmak için:

sudo docker stop nginx-web

Tekrar başlatmak için:

sudo docker start nginx-web

Yeniden başlatmak için:

sudo docker restart nginx-web

Konteynerin durumunu görüntülemek için:

sudo docker ps -a

komutu kullanılabilir.

Docker Container İçerisine Nasıl Girilir?

Çalışan bir konteyner içerisinde komut çalıştırmak için docker exec kullanılabilir.

Örnek:

sudo docker exec -it nginx-web /bin/sh

Bu komut konteyner içerisinde etkileşimli bir kabuk açar.

Konteynerin imajına bağlı olarak /bin/bash bulunmayabilir. Bu nedenle /bin/sh daha geniş uyumluluk sağlayabilir.

Konteyner içerisinden çıkmak için:

exit

komutu kullanılabilir.

Dockerfile Nedir?

Dockerfile, bir Docker imajının nasıl oluşturulacağını tanımlayan talimat dosyasıdır.

Dockerfile içerisinde:

  • Kullanılacak temel imaj.

  • Çalışma dizini.

  • Kopyalanacak uygulama dosyaları.

  • Kurulacak bağımlılıklar.

  • Ortam değişkenleri.

  • Konteynerin başlangıç komutu.

gibi bilgiler tanımlanabilir.

Örnek bir Dockerfile:

FROM nginx:stable-alpine

COPY ./site/ /usr/share/nginx/html/

EXPOSE 80

Bu örnek, site dizinindeki statik web sitesi dosyalarını Nginx imajına kopyalar.

İmaj oluşturmak için:

sudo docker build -t ornek-web .

Konteyneri çalıştırmak için:

sudo docker run -d \
  --name ornek-site \
  -p 8081:80 \
  ornek-web

komutu kullanılabilir.

Docker Compose Nedir?

Docker Compose, birden fazla konteynerden oluşan uygulamaların tek bir YAML dosyası üzerinden tanımlanmasını ve yönetilmesini sağlayan araçtır.

Örneğin bir web uygulamasında:

  • PHP uygulaması.

  • Nginx web sunucusu.

  • MySQL veritabanı.

  • Redis önbellek servisi.

ayrı konteynerler halinde çalıştırılabilir.

Docker Composeで3層アーキテクチャ( JS + Python + MySQL)を構築する #JavaScript - Qiita

Dhanian 🗯️ (@e_opore) on X

Docker-compose lab quiz 5 - Docker - KodeKloud - DevOps Learning Community

Basit bir Compose dosyası örneği:

services:
  web:
    image: nginx:stable
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped

Dosya compose.yaml adıyla kaydedilebilir.

Servisi başlatmak için:

docker compose up -d

Servisleri durdurmak ve oluşturulan konteynerleri kaldırmak için:

docker compose down

komutu kullanılabilir.

Docker Compose eklentisinin kurulu olması gerekir. Bazı eski kurulumlarda docker-compose komutu bulunabilir.

Docker Volume Nedir?

Docker Volume, konteynerlerin kullandığı verilerin kalıcı olarak saklanmasını sağlayan depolama mekanizmalarından biridir.

Konteynerin yazılabilir katmanında saklanan veriler, konteyner kaldırıldığında kaybolabilir.

Volume kullanıldığında veriler konteyner yaşam döngüsünden bağımsız olarak korunabilir.

Yeni volume oluşturmak için:

sudo docker volume create uygulama_verileri

Mevcut volume listesini görüntülemek için:

sudo docker volume ls

Volume bilgilerini incelemek için:

sudo docker volume inspect uygulama_verileri

Veritabanı gibi kalıcı veri kullanan uygulamalarda volume yönetimi önemlidir.

Ancak volume kullanılması, verilerin otomatik olarak yedeklendiği anlamına gelmez.

Docker Network Nedir?

Docker Network, konteynerler arasındaki ağ iletişimini yönetmek için kullanılan yapıdır.

Docker farklı ağ sürücülerini destekler.

Yaygın ağ türleri:

Ağ Türü

Açıklama

Bridge

Aynı Docker ana makinesindeki konteynerler için yaygın ağ modeli

Host

Konteynerin ana makinenin ağ alanını kullanması

None

Konteynerin ağ bağlantılarının sınırlandırılması

Overlay

Uygun çok sunuculu ortamlarda konteyner iletişimi

Yeni bir bridge ağı oluşturmak için:

sudo docker network create uygulama-agi

Ağları listelemek için:

sudo docker network ls

Bir ağı incelemek için:

sudo docker network inspect uygulama-agi

komutu kullanılabilir.

Docker Hub Nedir?

Docker Hub, Docker imajlarının depolanması ve dağıtılması için kullanılan bir konteyner kayıt hizmetidir.

Docker Hub üzerinden farklı yazılımlara ait imajlar indirilebilir.

Örneğin Nginx imajını indirmek için:

sudo docker pull nginx:stable

Yerel imajları görüntülemek için:

sudo docker images

Docker Hub üzerinde resmi ve üçüncü taraf imajlar bulunabilir.

İmaj seçerken yayıncı, sürüm, güncellik ve güvenlik durumu kontrol edilmelidir.

Docker Güvenliği Nasıl Sağlanır?

Docker konteynerleri belirli bir izolasyon sağlasa da yanlış yapılandırmalar güvenlik risklerine neden olabilir.

Docker güvenliğinde dikkat edilmesi gerekenler:

  1. Docker Engine güncel tutulmalıdır.

  2. Güvenilir imajlar kullanılmalıdır.

  3. İmajlar düzenli olarak güvenlik açıklarına karşı kontrol edilmelidir.

  4. Konteynerler gereksiz yere ayrıcalıklı modda çalıştırılmamalıdır.

  5. Gerekli olmayan Linux yetenekleri sınırlandırılmalıdır.

  6. Konteynerlerde mümkün olduğunda root olmayan kullanıcılar kullanılmalıdır.

  7. Ağ portları yalnızca gerektiğinde dışarı açılmalıdır.

  8. Hassas bilgiler imaj içerisine gömülmemelidir.

  9. Kalıcı veriler düzenli olarak yedeklenmelidir.

  10. Docker daemon erişimi sınırlandırılmalıdır.

Önemli: Docker daemon üzerinde geniş yönetim yetkisine sahip kullanıcılar, ana makine üzerinde de yüksek ayrıcalıklar elde edebilir. Bu nedenle Docker grubuna kullanıcı eklemek güvenlik açısından dikkatle değerlendirilmelidir.

Docker ile PHP ve MySQL Uygulamaları Çalıştırılabilir mi?

Docker, PHP ve MySQL kullanan web uygulamalarının çalıştırılmasında kullanılabilir.

Örneğin bir PHP web sitesi için:

  • Nginx veya Apache konteyneri.

  • PHP-FPM konteyneri.

  • MySQL veya MariaDB konteyneri.

  • Kalıcı veriler için volume.

  • Servisler arası iletişim için Docker ağı.

yapılandırılabilir.

Bu yapı sayesinde uygulamanın farklı bileşenleri ayrı konteynerlerde çalıştırılabilir.

Ancak veritabanı ve uygulama dosyalarının kalıcı olarak saklanması, güvenli ağ bağlantıları ve yedekleme işlemleri ayrıca planlanmalıdır.

Docker Linux Sunucularda Hangi Alanlarda Kullanılır?

Docker, farklı sunucu ve yazılım geliştirme senaryolarında kullanılabilir.

Kullanım Alanı

Örnek

Web hosting

Nginx ve Apache konteynerleri

PHP uygulamaları

PHP-FPM tabanlı projeler

API servisleri

Node.js ve Python API uygulamaları

Veritabanları

MySQL, MariaDB ve PostgreSQL

Önbellekleme

Redis

Mikroservisler

Ayrı servis konteynerleri

Test ortamları

Geçici uygulama ortamları

CI/CD

Otomatik test ve dağıtım süreçleri

İzleme

Prometheus ve Grafana servisleri

Geliştirme ortamları

Standartlaştırılmış proje ortamları

Docker Kullanırken Dikkat Edilmesi Gerekenler

Docker tabanlı sistemlerin sağlıklı çalışması için aşağıdaki konulara dikkat edilmelidir:

  1. Uygun ve güncel temel imajlar seçilmelidir.

  2. Konteynerlerin CPU ve RAM kullanımı takip edilmelidir.

  3. Kalıcı veriler volume veya uygun depolama yöntemleriyle saklanmalıdır.

  4. Yedekleme sistemi oluşturulmalıdır.

  5. Kullanılmayan imajlar ve konteynerler kontrol edilmelidir.

  6. Docker ağları güvenli şekilde yapılandırılmalıdır.

  7. Konteyner günlükleri izlenmelidir.

  8. Hassas veriler güvenli biçimde yönetilmelidir.

  9. Uygulama sürümleri kontrollü şekilde güncellenmelidir.

  10. Üretim ortamında kullanılan konteynerler düzenli olarak denetlenmelidir.

Sonuç

Docker, uygulamaların konteyner adı verilen izole çalışma ortamlarında paketlenmesini, dağıtılmasını ve çalıştırılmasını sağlayan bir platformdur.

Docker Image, Docker Container, Dockerfile, Docker Compose, Docker Volume ve Docker Network gibi bileşenler, konteyner tabanlı uygulamaların oluşturulmasında ve yönetilmesinde kullanılır.

Docker sayesinde web uygulamaları, veritabanları ve farklı servisler ayrı konteynerlerde çalıştırılabilir. Bu yaklaşım geliştirme ortamlarının standartlaştırılmasını ve uygulamaların farklı sunuculara taşınmasını kolaylaştırabilir.

Docker kullanılırken güvenlik, ağ yapılandırması, kaynak yönetimi ve kalıcı verilerin yedeklenmesi gibi konuların ayrıca değerlendirilmesi gerekir.

 


Alıntı