Docker Nedir? Başlangıçtan İleri Seviyeye Container Rehberi
zafer ak
Yazar
Docker Nedir?
Docker, uygulamaları container'lar içinde paketleyip çalıştırmanızı sağlayan açık kaynaklı bir platformdur. Container'lar, uygulamanızı tüm bağımlılıklarıyla birlikte izole bir ortamda çalıştırır.
Container vs Virtual Machine
Virtual Machine: Her VM kendi işletim sistemini çalıştırır. Kaynak tüketimi yüksek, başlatma süresi uzun.
Container: Host işletim sisteminin çekirdeğini paylaşır. Hafif, hızlı başlatma, düşük kaynak tüketimi.
Docker Kurulumu
Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
macOS
Docker Desktop'ı indirin: docker.com/products/docker-desktop
Temel Docker Komutları
# Container çalıştırma
docker run -d -p 80:80 nginx
# Çalışan container'ları listele
docker ps
# Tüm container'ları listele
docker ps -a
# Container durdurma
docker stop container_id
# Container silme
docker rm container_id
# Image listele
docker images
# Image indirme
docker pull php:8.3-fpm
Dockerfile Yazımı
FROM php:8.3-fpm
# Sistem bağımlılıkları
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# PHP eklentileri
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# Composer kurulumu
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /var/www
COPY . .
RUN composer install --no-dev --optimize-autoloader
EXPOSE 9000
CMD ["php-fpm"]
Docker Compose
version: "3.8"
services:
app:
build: .
volumes:
- .:/var/www
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- .:/var/www
- ./nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
mysql_data:
Docker Best Practices
- Multi-stage build kullanın (image boyutunu küçültür)
- .dockerignore dosyası oluşturun
- Specific tag kullanın (latest yerine php:8.3-fpm)
- Layer caching'den faydalanın
- Root kullanıcı yerine non-root kullanıcı tercih edin
Sonuç
Docker, modern yazılım geliştirme süreçlerinin vazgeçilmez bir parçasıdır. Container teknolojisi ile uygulamalarınızı tutarlı, taşınabilir ve ölçeklenebilir hale getirebilirsiniz.