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 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ı:
-
Web sitesi ve uygulama barındırma.
-
PHP, Python, Node.js ve Java uygulamalarını çalıştırma.
-
MySQL, MariaDB, PostgreSQL ve Redis servislerini yönetme.
-
Yazılım geliştirme ortamları oluşturma.
-
Uygulama testlerini gerçekleştirme.
-
Mikroservis tabanlı sistemler geliştirme.
-
Sürekli entegrasyon ve dağıtım süreçlerini destekleme.
-
Birden fazla uygulamayı aynı sunucuda çalıştırma.
-
Uygulamaları farklı sunuculara taşıma.
-
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:
-
Uygulama için bir Docker imajı hazırlanır veya mevcut bir imaj kullanılır.
-
Docker Engine, imajdan bir konteyner oluşturur.
-
Konteynerin ağ ve depolama ayarları yapılandırılır.
-
Uygulama konteyner içerisinde başlatılır.
-
Konteyner Docker komutlarıyla yönetilir.
-
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ı |
|---|---|
|
|
Web sunucusu |
|
|
Apache HTTP Server |
|
|
PHP uygulamaları |
|
|
MySQL veritabanı |
|
|
MariaDB veritabanı |
|
|
PostgreSQL veritabanı |
|
|
Önbellek ve veri yapısı servisi |
|
|
Node.js uygulamaları |
|
|
Python uygulamaları |
|
|
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.
|
Ö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:
-
Gerekli imaj yerelde bulunmuyorsa indirir.
-
İmajdan bir konteyner oluşturur.
-
Test uygulamasını çalıştırır.
-
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 sürümünü gösterir |
|
|
Yerel imajları listeler |
|
|
Çalışan konteynerleri gösterir |
|
|
Tüm konteynerleri gösterir |
|
|
İmaj indirir |
|
|
Konteyner oluşturur ve çalıştırır |
|
|
Durdurulmuş konteyneri başlatır |
|
|
Çalışan konteyneri durdurur |
|
|
Konteyneri yeniden başlatır |
|
|
Konteyner günlüklerini gösterir |
|
|
Çalışan konteyner içinde komut çalıştırır |
|
|
Konteyneri kaldırır |
|
|
İ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.
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:
-
Docker Engine güncel tutulmalıdır.
-
Güvenilir imajlar kullanılmalıdır.
-
İmajlar düzenli olarak güvenlik açıklarına karşı kontrol edilmelidir.
-
Konteynerler gereksiz yere ayrıcalıklı modda çalıştırılmamalıdır.
-
Gerekli olmayan Linux yetenekleri sınırlandırılmalıdır.
-
Konteynerlerde mümkün olduğunda root olmayan kullanıcılar kullanılmalıdır.
-
Ağ portları yalnızca gerektiğinde dışarı açılmalıdır.
-
Hassas bilgiler imaj içerisine gömülmemelidir.
-
Kalıcı veriler düzenli olarak yedeklenmelidir.
-
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:
-
Uygun ve güncel temel imajlar seçilmelidir.
-
Konteynerlerin CPU ve RAM kullanımı takip edilmelidir.
-
Kalıcı veriler volume veya uygun depolama yöntemleriyle saklanmalıdır.
-
Yedekleme sistemi oluşturulmalıdır.
-
Kullanılmayan imajlar ve konteynerler kontrol edilmelidir.
-
Docker ağları güvenli şekilde yapılandırılmalıdır.
-
Konteyner günlükleri izlenmelidir.
-
Hassas veriler güvenli biçimde yönetilmelidir.
-
Uygulama sürümleri kontrollü şekilde güncellenmelidir.
-
Ü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.







