Uygulamalarınızı Adanmış Bir Sunucuda Dockerize Etme: Adım Adım Kılavuz

Uygulamalarınızı Adanmış Bir Sunucuda Dockerize Etme: Adım Adım Kılavuz

Docker konteynerleştirmesi, adanmış sunucu ortamları için önemli faydalar sunar. Bu adım adım kılavuz, uygulamalarınızı dockerize etme sürecinin tamamında, ilk kurulumdan gelişmiş yönetim tekniklerine kadar size yol gösterecektir.

32 min read

Giriş

Günümüzün hızla gelişen geliştirme ortamında, konteynerleştirme uygulamaların nasıl inşa edildiği, dağıtıldığı ve yönetildiği konusunda devrim yaratmıştır. Önde gelen konteynerleştirme platformu Docker, geliştiricilerin ve sistem yöneticilerinin uygulamaları tüm bağımlılıklarıyla birlikte konteyner adı verilen standartlaştırılmış birimler halinde paketlemesine olanak tanır. Bu konteynerler, geliştirme dizüstü bilgisayarlarından üretim sunucularına kadar farklı ortamlarda tutarlı bir şekilde çalışabilir.

Uygulamalarınızı adanmış bir sunucuda çalıştırıyorsanız, onları dockerize etmek dağıtım verimliliğini, kaynak kullanımını ve ölçeklenebilirliği önemli ölçüde artırabilir. Bu kapsamlı kılavuz, uygulamalarınızı adanmış bir sunucuda dockerize etme sürecinin tamamında, ilk kurulumdan gelişmiş yönetim tekniklerine kadar size yol gösterecektir.

İster iş akışınızı kolaylaştırmak isteyen bir geliştirici, ister sunucu kaynaklarını optimize etmeyi amaçlayan bir sistem yöneticisi olun, bu kılavuz TildaVPS adanmış sunucunuzda Docker'ı başarılı bir şekilde uygulamanız için gereken bilgileri ve pratik adımları sağlayacaktır.

Bölüm 1: Docker ve Faydalarını Anlama

Docker Nedir?

Docker, uygulamaların hafif, taşınabilir konteynerler içinde dağıtımını otomatikleştiren açık kaynaklı bir platformdur. Tüm işletim sistemlerini taklit eden geleneksel sanallaştırmadan farklı olarak, Docker konteynerleri ana sistemin çekirdeğini paylaşır ve uygulama süreçlerini birbirinden ve altyapıdan izole eder.

Açıklama: Docker konteynerlerini yazılım için standartlaştırılmış nakliye konteynerleri olarak düşünebilirsiniz. Nasıl ki nakliye konteynerleri, içeriğinden bağımsız olarak malları taşımanın standart bir yolunu sağlayarak küresel ticarette devrim yarattıysa, Docker konteynerleri de uygulamaları ve bağımlılıklarını kendi kendine yeten birimler halinde paketleyerek yazılım dağıtımını standartlaştırır ve her yerde çalışabilir hale getirir.

Teknik Detaylar: Docker, birkaç temel bileşenle bir istemci-sunucu mimarisi kullanır:

  • Docker arka plan servisi (dockerd): Docker konteynerlerini yöneten kalıcı süreç
  • Docker istemcisi: Docker ile etkileşim kurmak için kullanılan komut satırı arayüzü
  • Docker kalıpları: Konteyner oluşturmak için kullanılan salt okunur şablonlar
  • Docker konteynerleri: Docker kalıplarının çalıştırılabilir örnekleri
  • Docker kayıt defteri: Docker kalıplarını depolamak ve dağıtmak için bir depo

Uygulamaları Dockerize Etmenin Faydaları

Uygulamalarınızı adanmış bir sunucuda dockerize etmek çok sayıda avantaj sunar:

  1. Ortamlar Arası Tutarlılık: Docker, uygulamanızın geliştirme, test ve üretim ortamlarında aynı şekilde çalışmasını sağlayarak "benim makinemde çalışıyor" sorununu ortadan kaldırır.

  2. İzolasyon ve Güvenlik: Her konteyner ayrı çalışır, uygulamalar arasındaki çakışmaları önler ve ek bir güvenlik katmanı sağlar.

  3. Kaynak Verimliliği: Konteynerler ana işletim sistemi çekirdeğini paylaşır ve kaynakları geleneksel sanal makinelerden daha verimli kullanır, bu da aynı donanım üzerinde daha fazla uygulama çalıştırmanıza olanak tanır.

  4. Hızlı Dağıtım: Docker, konteynerlerin dakikalar yerine saniyeler içinde başlamasıyla hızlı uygulama dağıtımı ve ölçeklendirme sağlar.

  5. Sürüm Kontrolü ve Bileşen Yeniden Kullanımı: Docker kalıpları sürümlenebilir, bu da değişiklikleri izlemenize ve gerektiğinde geri almanıza olanak tanır. Bileşenler farklı projeler arasında yeniden kullanılabilir.

  6. Basitleştirilmiş Güncellemeler ve Geri Almalar: Uygulamaları güncellemek, yeni bir kalıbı çekip konteyneri yeniden başlatmak kadar basit hale gelir. Sorunlar ortaya çıkarsa, önceki sürüme hızlıca geri dönebilirsiniz.

  7. Mikroservis Mimarisi Desteği: Docker, mikroservis mimarisinin uygulanmasını kolaylaştırır, karmaşık uygulamaları daha küçük, yönetilebilir servislere ayırmanıza olanak tanır.

Görsel Öğe: [Resim: Geleneksel dağıtım ile Docker konteynerleştirmesini karşılaştıran bir diyagram, Docker'ın uygulamaları bağımlılıklarıyla birlikte paketleyerek ortam tutarsızlıklarını nasıl ortadan kaldırdığını gösteriyor.]

Adanmış Sunucunuzda Docker'ı Ne Zaman Kullanmalısınız?

Docker, özellikle aşağıdaki senaryolarda faydalıdır:

  • Mikroservis Mimarisi: Monolitik uygulamaları daha küçük, bağımsız olarak dağıtılabilir servislere ayırırken
  • Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD): Geliştirme iş akışlarını kolaylaştırmak ve test ve dağıtımı otomatikleştirmek için
  • Eski Uygulama Geçişi: Daha eski uygulamaların dağıtımını modernleştirmek ve standartlaştırmak için
  • Geliştirme ve Test Ortamları: Geliştirme ve test için tutarlı, tekrarlanabilir ortamlar oluşturmak için
  • Çoklu Kiracılı Uygulamalar: Farklı istemciler için aynı uygulamanın birden fazla örneğini çalıştırırken

Bölüm Özeti: Docker, uygulamaları paketlemek ve dağıtmak için standartlaştırılmış bir yol sağlayarak tutarlılık, izolasyon, verimlilik ve basitleştirilmiş yönetim gibi faydalar sunar. Adanmış sunucu kullanıcıları için Docker, kaynak kullanımını ve dağıtım iş akışlarını önemli ölçüde iyileştirebilir.

Mini-SSS:

Docker sanallaştırma ile aynı mı?

Hayır, Docker, geleneksel sanallaştırmadan farklı olan konteynerleştirmeyi kullanır. Sanal makineler tüm işletim sistemlerini taklit ederken, Docker konteynerleri ana sistemin çekirdeğini paylaşır ve yalnızca uygulama süreçlerini izole eder, bu da onları daha hafif ve verimli hale getirir.

Herhangi bir adanmış sunucuda Docker çalıştırabilir miyim?

Docker, Linux veya Windows Server çalıştıran çoğu modern adanmış sunucuda çalışabilir. TildaVPS adanmış sunucuları, konteynerli uygulamalar için gereken performansı ve güvenilirliği sunarak Docker dağıtımları için özellikle uygundur.

Bölüm 2: Adanmış Sunucunuzu Docker İçin Hazırlama

Sistem Gereksinimleri

Adanmış sunucunuza Docker kurmadan önce, sisteminizin aşağıdaki gereksinimleri karşıladığından emin olun:

Linux tabanlı sunucular için:

  • 64-bit mimari
  • Çekirdek sürümü 3.10 veya daha yüksek (4.x veya daha yenisi önerilir)
  • En az 2 GB RAM (üretim için 4 GB+ önerilir)
  • Docker kalıpları ve konteynerleri için yeterli depolama alanı

Windows tabanlı sunucular için:

  • Windows Server 2016 veya üzeri
  • Hyper-V özelliği etkin
  • En az 4 GB RAM

TildaVPS adanmış sunucuları genellikle bu gereksinimleri aşar ve Docker dağıtımları için ideal bir temel sağlar. Sunucu özelliklerinizden emin değilseniz, Linux'ta aşağıdaki komutları kullanarak kontrol edebilirsiniz:

bash
# Çekirdek sürümünü kontrol et
uname -r

# Sistem mimarisini kontrol et
uname -m

# Mevcut belleği kontrol et
free -h

# Mevcut disk alanını kontrol et
df -h

Doğru İşletim Sistemini Seçme

Docker çeşitli işletim sistemlerinde çalışırken, Linux dağıtımları konteynerleştirme teknolojilerine yerel destekleri nedeniyle Docker dağıtımları için genellikle tercih edilir.

Docker için önerilen Linux dağıtımları:

  • Ubuntu Server 20.04 LTS veya daha yeni
  • CentOS 8 veya daha yeni
  • Debian 10 veya daha yeni
  • RHEL 8 veya daha yeni

Ubuntu Server, kapsamlı dokümantasyonu, düzenli güncellemeleri ve güçlü topluluk desteği nedeniyle Docker için özellikle uygundur. TildaVPS, adanmış sunucuları için tüm bu dağıtımları sunarak gereksinimlerinize en uygun olanı seçmenize olanak tanır.

Sisteminizi Güncelleme

Docker'ı kurmadan önce sisteminizin güncel olduğundan emin olun:

Ubuntu/Debian için:

bash
sudo apt update
sudo apt upgrade -y

CentOS/RHEL için:

bash
sudo yum update -y

Gerekli Bağımlılıkları Kurma

Docker'ın düzgün çalışması için belirli paketler gereklidir. Bu bağımlılıkları kurun:

Ubuntu/Debian için:

bash
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

CentOS/RHEL için:

bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Güvenlik Duvarı Kurallarını Yapılandırma

Adanmış sunucunuzda bir güvenlik duvarı etkinse, Docker trafiğine izin vermek için onu yapılandırmanız gerekecektir:

UFW (Ubuntu) için:

bash
# Docker arka plan servisi portuna izin ver
sudo ufw allow 2375/tcp
sudo ufw allow 2376/tcp

# Gerektiğinde konteyner portlarına izin ver
# Örnek: HTTP ve HTTPS'e izin ver
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

firewalld (CentOS/RHEL) için:

bash
sudo firewall-cmd --permanent --zone=public --add-port=2375/tcp
sudo firewall-cmd --permanent --zone=public --add-port=2376/tcp
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload

Görsel Öğe: [Tablo: Docker dağıtımı için farklı Linux dağıtımlarının karşılaştırması, her biri için temel özellikler, avantajlar ve dikkat edilmesi gerekenler gösteriliyor.]

Docker İçin Adanmış Bir Kullanıcı Kurma

Güvenlik nedenleriyle, Docker işlemleri için adanmış bir kullanıcı oluşturmanız önerilir:

bash
# Yeni bir kullanıcı oluştur
sudo adduser dockeruser

# Kullanıcıyı sudo grubuna ekle
sudo usermod -aG sudo dockeruser

# Yeni kullanıcıya geçiş yap
su - dockeruser

Bölüm Özeti: Adanmış sunucunuzun uygun şekilde hazırlanması, başarılı bir Docker dağıtımı için çok önemlidir. Sisteminizin gereksinimleri karşıladığından, uygun bir işletim sistemi seçtiğinizden, sisteminizi güncellediğinizden, bağımlılıkları kurduğunuzdan, güvenlik duvarı kurallarını yapılandırdığınızdan ve Docker işlemleri için adanmış bir kullanıcı kurduğunuzdan emin olun.

Mini-SSS:

Docker için SELinux veya AppArmor'ı devre dışı bırakmam gerekiyor mu?

Hayır, modern Docker sürümleri SELinux ve AppArmor ile iyi çalışır. Bu güvenlik özelliklerini devre dışı bırakmak yerine etkin tutmanız ve uygun şekilde yapılandırmanız önerilir.

Adanmış sunucu yerine sanal özel sunucuda (VPS) Docker çalıştırabilir miyim?

Evet, Docker bir VPS'te çalışabilir, ancak TildaVPS'ten bir adanmış sunucu, özellikle üretim iş yükleri için, garantili kaynaklar ve gürültülü komşu sorunları olmaması nedeniyle daha iyi performans sağlar.

Bölüm 3: Docker Kurulumu ve Yapılandırması

Docker Engine Kurulumu

Kurulum süreci işletim sisteminize göre biraz değişir. Belirli dağıtımınız için bu adım adım talimatları izleyin:

Ubuntu/Debian Kurulumu

  1. Docker'ın resmi GPG anahtarını ekleyin:
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. Kararlı depoyu kurun:
bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Paket dizinini güncelleyin ve Docker'ı kurun:
bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
  1. Kurulumu doğrulayın:
bash
sudo docker --version

CentOS/RHEL Kurulumu

  1. Docker deposunu ekleyin:
bash
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. Docker'ı kurun:
bash
sudo yum install -y docker-ce docker-ce-cli containerd.io
  1. Docker servisini başlatın ve etkinleştirin:
bash
sudo systemctl start docker
sudo systemctl enable docker
  1. Kurulumu doğrulayın:
bash
sudo docker --version

Kurulum Sonrası Adımlar

Docker'ı kurduktan sonra bu önemli kurulum sonrası adımları tamamlayın:

  1. Docker komutlarını sudo olmadan çalıştırmak için kullanıcınızı docker grubuna ekleyin:
bash
sudo usermod -aG docker $USER
  1. Grup değişikliklerinin etkili olması için oturumu kapatıp tekrar açın veya şunu çalıştırın:
bash
newgrp docker
  1. Docker'ın düzgün çalıştığını doğrulayın:
bash
docker run hello-world

Bu komut bir test kalıbını indirir ve bir konteynerde çalıştırır. Başarılı olursa, Docker'ın doğru şekilde kurulduğunu ve çalıştığını gösteren bir onay mesajı yazdırır.

Docker Arka Plan Servisini Yapılandırma

Docker arka plan servisi (dockerd) davranışını özelleştirmek için yapılandırılabilir. Yapılandırma dosyası /etc/docker/daemon.json konumundadır:

  1. Yapılandırma dosyasını oluşturun veya düzenleyin:
bash
sudo nano /etc/docker/daemon.json
  1. Yapılandırma seçeneklerinizi ekleyin. İşte bir örnek yapılandırma:
json
{
  "data-root": "/var/lib/docker",
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "default-address-pools": [
    {"base": "172.17.0.0/16", "size": 24}
  ],
  "registry-mirrors": [],
  "dns": ["8.8.8.8", "8.8.4.4"]
}
  1. Dosyayı kaydedin ve değişiklikleri uygulamak için Docker'ı yeniden başlatın:
bash
sudo systemctl restart docker

Docker Compose Kurulumu

Docker Compose, çoklu konteynerli Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Aşağıdaki komutlarla kurun:

bash
# Mevcut kararlı sürümü indir
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Çalıştırılabilir izinleri uygula
sudo chmod +x /usr/local/bin/docker-compose

# Kurulumu doğrula
docker-compose --version

Docker Kayıt Defteri Erişimini Ayarlama

Özel Docker kayıt defterleri kullanmayı planlıyorsanız, kimlik doğrulamayı yapılandırmanız gerekecektir:

  1. Docker kayıt defterinize giriş yapın:
bash
docker login [kayıt-defteri-url]
  1. Docker Hub için:
bash
docker login
  1. İstendiğinde kullanıcı adınızı ve parolanızı girin.

Görsel Öğe: [Resim: Başarılı bir Docker kurulumunu ve "docker run hello-world" komutunun çıktısını gösteren ekran görüntüsü.]

Depolama Sürücülerini Yapılandırma

Docker, kalıpların ve konteynerlerin içeriğini yönetmek için depolama sürücülerini kullanır. Çoğu kullanım durumu için önerilen depolama sürücüsü overlay2'dir:

  1. Mevcut depolama sürücünüzü kontrol edin:
bash
docker info | grep "Storage Driver"
  1. Depolama sürücüsünü değiştirmek için daemon.json dosyasını düzenleyin:
bash
sudo nano /etc/docker/daemon.json
  1. Depolama sürücüsü ayarını ekleyin veya değiştirin:
json
{
  "storage-driver": "overlay2"
}
  1. Kaydedin ve Docker'ı yeniden başlatın:
bash
sudo systemctl restart docker

Bölüm Özeti: Adanmış sunucunuza Docker kurma ve yapılandırma, Docker deposunu eklemeyi, Docker Engine'i kurmayı, kurulum sonrası adımları gerçekleştirmeyi, Docker arka plan servisini yapılandırmayı, Docker Compose'u kurmayı, kayıt defteri erişimini ayarlamayı ve depolama sürücülerini yapılandırmayı içerir. Bu adımları takip etmek, düzgün çalışan bir Docker ortamı sağlar.

Mini-SSS:

Docker'ın en son sürümünü mü yoksa kararlı sürümünü mü kullanmalıyım?

Adanmış sunuculardaki üretim ortamları için, güvenilirliği sağlamak amacıyla Docker'ın kararlı sürümünü kullanmanız önerilir. TildaVPS sunucuları her iki sürümle de uyumludur, ancak kararlı sürümler daha iyi uzun vadeli destek sağlar.

Kurulumdan sonra Docker'ı nasıl güncellerim?

Docker'ı güncellemek için sisteminizin paket yöneticisini kullanın:

  • Ubuntu/Debian için: sudo apt update && sudo apt upgrade docker-ce docker-ce-cli containerd.io
  • CentOS/RHEL için: sudo yum update docker-ce docker-ce-cli containerd.io

Bölüm 4: İlk Docker Konteynerinizi Oluşturma

Docker Kalıpları ve Konteynerlerini Anlama

İlk konteynerinizi oluşturmadan önce, Docker kalıpları ve konteynerleri arasındaki ilişkiyi anlamak önemlidir:

  • Docker Kalıbı: Bir Docker konteyneri oluşturmak için talimatlar içeren salt okunur bir şablon. Uygulama kodunu, çalışma zamanını, kütüphaneleri, ortam değişkenlerini ve yapılandırma dosyalarını içerir.
  • Docker Konteyneri: Bir Docker kalıbının çalıştırılabilir bir örneği. Docker API veya CLI kullanarak konteynerleri oluşturabilir, başlatabilir, durdurabilir, taşıyabilir veya silebilirsiniz.

Bir kalıbı nesne yönelimli programlamada bir sınıf, bir konteyneri de o sınıfın bir örneği olarak düşünebilirsiniz.

Docker Kalıplarını Bulma ve Çekme

Docker Hub, Docker kalıpları için varsayılan genel kayıt defteridir. Docker CLI veya Docker Hub web sitesini kullanarak kalıp arayabilirsiniz:

bash
# Bir kalıp ara
docker search nginx

# Docker Hub'dan bir kalıp çek
docker pull nginx:latest

latest etiketi, kalıbın en son sürümünü ifade eder. Farklı bir etiket kullanarak belirli bir sürümü belirtebilirsiniz:

bash
# Belirli bir sürümü çek
docker pull nginx:1.21.6

İlk Konteynerinizi Çalıştırma

Resmi Nginx kalıbını kullanarak basit bir web sunucusu konteyneri oluşturalım:

bash
# Bir Nginx konteyneri çalıştır
docker run --name my-nginx -p 80:80 -d nginx

Bu komut:

  • "my-nginx" adında bir konteyner oluşturur
  • Konteynerin 80. portunu ana bilgisayarın 80. portuna eşler
  • Konteyneri ayrık modda (-d) çalıştırır
  • Nginx kalıbını kullanır

Şimdi bir web tarayıcısında sunucunuzun IP adresine giderek Nginx karşılama sayfasına erişebilirsiniz.

Temel Konteyner Yönetimi

İşte Docker konteynerlerinizi yönetmek için bazı temel komutlar:

bash
# Çalışan konteynerleri listele
docker ps

# Tüm konteynerleri listele (durdurulmuş olanlar dahil)
docker ps -a

# Bir konteyneri durdur
docker stop my-nginx

# Durdurulmuş bir konteyneri başlat
docker start my-nginx

# Bir konteyneri yeniden başlat
docker restart my-nginx

# Bir konteyneri kaldır (önce durdurulmuş olmalı)
docker rm my-nginx

# Bir konteyneri zorla kaldır (çalışıyor olsa bile)
docker rm -f my-nginx

Konteyner Yapılandırmasını Özelleştirme

Docker, konteynerlerinizin çeşitli yönlerini özelleştirmenize olanak tanır:

Ortam Değişkenleri

-e bayrağını kullanarak ortam değişkenlerini konteynerinize geçirin:

bash
docker run -d --name my-app -e DB_HOST=localhost -e DB_PORT=5432 my-app-image

Birim Bağlama (Volume Mounting)

Kalıcı depolama için ana bilgisayar dizinlerini konteyner dizinlerine bağlayın:

bash
# Bir ana bilgisayar dizinini bir konteyner dizinine bağla
docker run -d --name my-nginx -p 80:80 -v /ana/yoldaki/dizin:/usr/share/nginx/html nginx

Ağ Yapılandırması

Konteyner iletişimi için özel ağlar oluşturun:

bash
# Bir ağ oluştur
docker network create my-network

# Ağa bir konteyner çalıştır
docker run -d --name my-app --network my-network my-app-image

Dockerfile ile Özel Bir Docker Kalıbı Oluşturma

Dockerfile, bir Docker kalıbı oluşturmak için talimatlar içeren bir metin belgesidir. Basit bir Node.js uygulaması için bir Dockerfile oluşturalım:

  1. Projeniz için yeni bir dizin oluşturun:
bash
mkdir node-app
cd node-app
  1. Basit bir Node.js uygulaması oluşturun:
bash
# package.json oluştur
echo '{
  "name": "node-app",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}' > package.json

# server.js oluştur
echo 'const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;

app.get("/", (req, res) => {
  res.send("Hello from Docker on TildaVPS!");
});

app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});' > server.js
  1. Bir Dockerfile oluşturun:
bash
echo 'FROM node:16-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]' > Dockerfile
  1. Docker kalıbını inşa edin:
bash
docker build -t my-node-app .
  1. Kalıbınızdan bir konteyner çalıştırın:
bash
docker run -d --name my-node-app -p 3000:3000 my-node-app

Şimdi sunucunuzun IP adresine 3000 portundan giderek Node.js uygulamanıza erişebilirsiniz.

Görsel Öğe: [Resim: Dockerfile'dan çalışan konteynere kadar Docker kalıp oluşturma sürecini gösteren bir diyagram, her adımın resimle gösterimi.]

Adım Adım: Bir Web Uygulamasını Docker ile Dağıtma

Basit bir web uygulamasını dockerize etme sürecinin tamamına adım adım göz atalım:

  1. Uygulama kodunuzu hazırlayın

    • Uygulamanızın yerel olarak çalıştığından emin olun
    • Bağımlılıkları ve gereksinimleri belirleyin
  2. Bir Dockerfile oluşturun

    • Uygun bir temel kalıp seçin
    • Uygulama dosyalarını kopyalayın
    • Bağımlılıkları kurun
    • Giriş noktasını yapılandırın
  3. Docker kalıbını inşa edin

    bash
    docker build -t my-web-app:v1 .
    
  4. Kalıbı yerel olarak test edin

    bash
    docker run -d -p 8080:80 --name test-app my-web-app:v1
    
  5. Kalıbı bir kayıt defterine it (isteğe bağlı)

    bash
    docker tag my-web-app:v1 kullaniciadi/my-web-app:v1
    docker push kullaniciadi/my-web-app:v1
    
  6. Konteyneri üretim sunucunuza dağıtın

    bash
    docker run -d -p 80:80 --restart always --name production-app my-web-app:v1
    
  7. İzleme ve loglama ayarlayın

    bash
    docker logs -f production-app
    

Bölüm Özeti: Docker konteynerlerini oluşturmak ve yönetmek; kalıpları ve konteynerleri anlamayı, kalıpları bulmayı ve çekmeyi, konteynerleri çalıştırmayı, temel komutlarla yönetmeyi, yapılandırmaları özelleştirmeyi, Dockerfile'larla özel kalıplar oluşturmayı ve adım adım bir dağıtım sürecini takip etmeyi içerir. Bu beceriler, adanmış sunucunuzda Docker ile çalışmanın temelini oluşturur.

Mini-SSS:

Çalışan bir konteynerden loglara nasıl erişirim?

docker logs komutunu kullanarak konteyner loglarına erişebilirsiniz:

bash
docker logs konteyner-adım
# Sürekli log çıktısı için
docker logs -f konteyner-adım

Bir konteynerin kullanabileceği kaynakları sınırlayabilir miyim?

Evet, Docker CPU, bellek ve diğer kaynakları sınırlamanıza olanak tanır:

bash
# Konteyneri 2 CPU ve 1 GB bellekle sınırla
docker run -d --name resource-limited-app --cpus=2 --memory=1g my-app-image

Bölüm 5: Docker Konteynerleri ve Kalıplarını Yönetme

Verimli Kalıp Yönetimi

Docker ile çalıştıkça, disk alanı tüketen kalıplar biriktireceksiniz. İşte onları verimli bir şekilde yönetmenin yolları:

Kalıpları Listeleme ve İnceleme

bash
# Tüm kalıpları listele
docker images

# Bir kalıp hakkında ayrıntılı bilgi al
docker inspect nginx

# Bir kalıbın geçmişini göster
docker history nginx

Kullanılmayan Kalıpları Kaldırma

bash
# Belirli bir kalıbı kaldır
docker rmi nginx:1.21.6

# Asılı kalmış kalıpları (etiketlenmemiş kalıplar) kaldır
docker image prune

# Tüm kullanılmayan kalıpları kaldır
docker image prune -a

Konteyner Yaşam Döngüsü Yönetimi

Konteyner yaşam döngüsünü anlamak, uygulamalarınızı etkili bir şekilde yönetmenize yardımcı olur:

Konteyner Durumları

Konteynerler aşağıdaki durumlardan birinde olabilir:

  • Oluşturuldu (Created): Konteyner oluşturuldu ancak başlatılmadı
  • Çalışıyor (Running): Konteyner tüm süreçleriyle birlikte çalışıyor
  • Duraklatıldı (Paused): Konteyner süreçleri duraklatıldı
  • Durduruldu (Stopped): Konteyner süreçleri durduruldu
  • Silindi (Deleted): Konteyner kaldırıldı ve artık mevcut değil

Konteyner Yaşam Döngüsünü Yönetme

bash
# Bir konteyneri başlatmadan oluştur
docker create --name my-container nginx

# Oluşturulmuş bir konteyneri başlat
docker start my-container

# Çalışan bir konteyneri duraklat
docker pause my-container

# Duraklatılmış bir konteyneri devam ettir
docker unpause my-container

# Çalışan bir konteyneri durdur
docker stop my-container

# Bir konteyneri kaldır
docker rm my-container

Konteyner Kaynak İzleme

Konteyner kaynak kullanımını izlemek, performans optimizasyonu için çok önemlidir:

bash
# Çalışan konteyner istatistiklerini göster
docker stats

# Belirli konteynerlerin istatistiklerini göster
docker stats konteyner1 konteyner2

# JSON formatında tek seferlik istatistikler al
docker stats --no-stream --format "{{json .}}" konteyner1

Daha ayrıntılı izleme için, kendileri de Docker konteyneri olarak dağıtılabilen cAdvisor, Prometheus veya Grafana gibi araçları kullanmayı düşünebilirsiniz.

Konteyner Yönetimini Otomatikleştirmek

Otomatik Yeniden Başlatma Politikaları

Sistem yeniden başlatmaları veya çökmelerinden sonra konteynerleri otomatik olarak yeniden başlayacak şekilde yapılandırın:

bash
# Konteyneri her zaman yeniden başlat
docker run -d --restart always --name my-app my-app-image

# Sadece hata durumunda yeniden başlat
docker run -d --restart on-failure --name my-app my-app-image

# Maksimum yeniden deneme sayısı ile hata durumunda yeniden başlat
docker run -d --restart on-failure:5 --name my-app my-app-image

Sağlık Kontrolleri

Konteyner sağlığını izlemek için sağlık kontrolleri uygulayın:

bash
docker run -d --name my-web-app \
  --health-cmd="curl -f http://localhost/ || exit 1" \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  nginx

Görsel Öğe: [Tablo: Konteyner yeniden başlatma politikaları, açıklamaları, kullanım durumları ve her politika için örnekler.]

Docker Birimleri (Volumes) ile Veri Yönetimi

Docker birimleri, konteyner verileri için kalıcı depolama sağlar:

Birim Oluşturma ve Yönetme

bash
# Adlandırılmış bir birim oluştur
docker volume create my-data

# Birimleri listele
docker volume ls

# Bir birimi incele
docker volume inspect my-data

# Bir birimi kaldır
docker volume rm my-data

# Tüm kullanılmayan birimleri kaldır
docker volume prune

Konteynerlerle Birlikte Birimleri Kullanma

bash
# Adlandırılmış bir birimi bağla
docker run -d --name my-db -v my-data:/var/lib/mysql mysql:8.0

# Bir ana bilgisayar dizinini bağla
docker run -d --name my-web -v /ana/yoldaki/dizin:/usr/share/nginx/html nginx

Konteyner Verilerini Yedekleme ve Geri Yükleme

Bir Birimi Yedekleme

bash
# Birimi bağlayan ve bir tar dosyasına yedekleyen bir yedekleme konteyneri oluştur
docker run --rm -v my-data:/source -v $(pwd):/backup alpine tar -czf /backup/my-data-backup.tar.gz -C /source .

Bir Birimi Geri Yükleme

bash
# Yeni bir birim oluştur
docker volume create my-data-restored

# Yedekten geri yükle
docker run --rm -v my-data-restored:/target -v $(pwd):/backup alpine sh -c "tar -xzf /backup/my-data-backup.tar.gz -C /target"

Bölüm Özeti: Etkili Docker konteyner ve kalıp yönetimi, kalıp yönetimini, konteyner yaşam döngüsünü, kaynak izlemeyi, otomasyonu, birimlerle veri yönetimini ve yedekleme/geri yükleme prosedürlerini anlamayı içerir. Bu yönlerde ustalaşmak, adanmış sunucunuzdaki dockerize edilmiş uygulamalarınızın verimli çalışmasını sağlar.

Mini-SSS:

Docker kalıplarımın boyutunu nasıl küçültebilirim?

Çok aşamalı derlemeler kullanın, katman sayısını minimize edin, Alpine gibi daha küçük temel kalıpları kullanın ve oluşturuldukları aynı katmanda gereksiz dosyaları temizleyin.

Docker birimleri ile bind mountlar arasındaki fark nedir?

Docker birimleri Docker tarafından yönetilir ve Docker'ın depolama dizininde saklanır, bind mountlar ise bir ana bilgisayar dosyasını veya dizinini bir konteyner yoluna eşler. Birimler, yedeklenmeleri daha kolay olduğu ve ana bilgisayarın dizin yapısına bağlı olmadıkları için kalıcı veriler için genellikle tercih edilir.

Bölüm 6: Çoklu Konteyner Uygulamaları İçin Docker Compose

Docker Compose'a Giriş

Docker Compose, çoklu konteynerli Docker uygulamalarını tanımlamak ve çalıştırmak için bir araçtır. Compose ile, uygulamanızın servislerini, ağlarını ve birimlerini yapılandırmak için bir YAML dosyası kullanır, ardından tek bir komutla tüm servisleri oluşturup başlatırsınız.

Docker Compose Kurulumu (Daha önce kurulmadıysa)

Docker Compose'u henüz kurmadıysanız, şu adımları izleyin:

bash
# Docker Compose'u indir
sudo curl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Çalıştırılabilir izinleri uygula
sudo chmod +x /usr/local/bin/docker-compose

# Kurulumu doğrula
docker-compose --version

Bir Docker Compose Dosyası Oluşturma

Docker Compose dosyası (genellikle docker-compose.yml olarak adlandırılır), uygulamanızın servislerini, ağlarını ve birimlerini tanımlar:

  1. Projeniz için yeni bir dizin oluşturun:
bash
mkdir compose-demo
cd compose-demo
  1. Bir docker-compose.yml dosyası oluşturun:
bash
nano docker-compose.yml
  1. Basit bir web uygulaması ve bir veritabanı için aşağıdaki içeriği ekleyin:
yaml
version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./website:/usr/share/nginx/html
    depends_on:
      - app
    networks:
      - frontend
      - backend

  app:
    build: ./app
    environment:
      - DB_HOST=db
      - DB_USER=myuser
      - DB_PASSWORD=mypassword
      - DB_NAME=mydb
    depends_on:
      - db
    networks:
      - backend

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - backend

networks:
  frontend:
  backend:

volumes:
  db-data:

Temel Docker Compose Komutları

bash
# Servisleri ayrık modda başlat
docker-compose up -d

# Çalışan servisleri görüntüle
docker-compose ps

# Tüm servislerin loglarını görüntüle
docker-compose logs

# Belirli bir servisin loglarını görüntüle
docker-compose logs app

# Servisleri durdur
docker-compose stop

# Konteynerleri, ağları ve birimleri durdur ve kaldır
docker-compose down

# Konteynerleri, ağları, birimleri ve kalıpları durdur ve kaldır
docker-compose down --rmi all --volumes

Adım Adım: Docker Compose ile Bir LAMP Yığını Dağıtma

Şimdi Docker Compose kullanarak eksiksiz bir LAMP (Linux, Apache, MySQL, PHP) yığını oluşturalım:

  1. Bir proje dizini oluşturun:
bash
mkdir lamp-docker
cd lamp-docker
  1. Gerekli alt dizinleri oluşturun:
bash
mkdir -p www/html
mkdir mysql
  1. Kurulumu test etmek için basit bir PHP dosyası oluşturun:
bash
echo '<?php
phpinfo();
?>' > www/html/index.php
  1. Docker Compose dosyasını oluşturun:
bash
nano docker-compose.yml
  1. Aşağıdaki içeriği ekleyin:
yaml
version: '3.8'

services:
  webserver:
    image: php:8.0-apache
    ports:
      - "80:80"
    volumes:
      - ./www/html:/var/www/html
    depends_on:
      - db
    networks:
      - lamp-network

  db:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: lamp_db
      MYSQL_USER: lamp_user
      MYSQL_PASSWORD: lamp_password
    volumes:
      - ./mysql:/var/lib/mysql
    networks:
      - lamp-network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
    depends_on:
      - db
    networks:
      - lamp-network

networks:
  lamp-network:
  1. LAMP yığınını başlatın:
bash
docker-compose up -d
  1. Uygulamalarınıza erişin:

Görsel Öğe: [Resim: Docker Compose ile LAMP yığınının mimarisini gösteren bir diyagram, konteynerlerin birbirine nasıl bağlandığını gösteriyor.]

Ortam Değişkenleri ve Gizli Yönetimi

Üretim ortamları için hassas bilgileri güvenli bir şekilde yönetmek önemlidir:

.env Dosyalarını Kullanma

  1. Bir .env dosyası oluşturun:
bash
nano .env
  1. Ortam değişkenlerinizi ekleyin:
plaintext
MYSQL_ROOT_PASSWORD=guvenliparola
MYSQL_DATABASE=uretim_db
MYSQL_USER=uretim_kullanicisi
MYSQL_PASSWORD=uretim_parolasi
  1. Bu değişkenleri docker-compose.yml dosyanızda referans alın:
yaml
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

Docker Gizlilerini Kullanma (Docker Swarm için)

Docker Swarm kullanıyorsanız, hassas veriler için Docker gizlilerini kullanabilirsiniz:

yaml
services:
  db:
    image: mysql:8.0
    secrets:
      - db_root_password
      - db_password
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
      MYSQL_PASSWORD_FILE: /run/secrets/db_password

secrets:
  db_root_password:
    file: ./secrets/db_root_password.txt
  db_password:
    file: ./secrets/db_password.txt

Bölüm Özeti: Docker Compose, tüm yığınınızı tek bir YAML dosyasında tanımlamanıza izin vererek çoklu konteyner uygulamalarının dağıtımını ve yönetimini basitleştirir. Docker Compose ile LAMP yığını gibi karmaşık uygulamaları kolayca dağıtabilir, ortam değişkenlerini ve gizlileri yönetebilir ve tüm konteynerlerinizin yaşam döngüsünü basit komutlarla kontrol edebilirsiniz.

Mini-SSS

Üretimde Docker Compose kullanabilir miyim?

Evet, Docker Compose üretim ortamlarında, özellikle daha küçük dağıtımlar için kullanılabilir. Daha büyük, daha karmaşık dağıtımlar için, ek orkestrasyon özellikleri için Docker Swarm veya Kubernetes'i düşünebilirsiniz. TildaVPS adanmış sunucular, üretim Docker Compose dağıtımları için gereken performansı sağlar.

Docker Compose'da tanımlanan servisleri nasıl güncellerim?

Servisleri güncellemek için docker-compose.yml dosyanızı değiştirin, ardından çalıştırın:

bash
docker-compose up -d --build

Bu komut, gerekirse kalıpları yeniden oluşturur ve birimleri ve verileri korurken değişikliklerle konteynerleri yeniden oluşturur.

Bölüm 7: Docker Güvenliği İçin En İyi Uygulamalar

Docker Güvenlik Risklerini Anlama

Docker, konteynerler ve ana sistem arasında izolasyon sağlarken, ele alınması gereken bazı güvenlik hususları vardır:

  1. Konteyner Kaçışı: Bir konteyner ele geçirilirse, bir saldırgan konteynerden kaçarak ana sisteme erişmeye çalışabilir.
  2. Kalıp Güvenlik Açıkları: Docker kalıpları savunmasız yazılımlar veya kötü amaçlı kod içerebilir.
  3. Aşırı Ayrıcalıklar: Gereksiz ayrıcalıklarla çalışan konteynerler güvenlik riski oluşturur.
  4. Güvenli Olmayan Yapılandırmalar: Yanlış yapılandırılmış konteynerler hassas verileri veya servisleri açığa çıkarabilir.
  5. Kaynak Kötüye Kullanımı: Uygun sınırlar olmadan, konteynerler aşırı kaynak tüketebilir ve hizmet reddine yol açabilir.

Docker Arka Plan Servisini Güvenli Hale Getirme

Docker arka plan servisi, güvenli hale getirilmesi gereken kritik bir bileşendir:

  1. TLS Kimlik Doğrulaması Kullanın:

    bash
    # CA, sunucu ve istemci sertifikaları oluştur
    mkdir -p ~/.docker/certs
    cd ~/.docker/certs
    openssl genrsa -aes256 -out ca-key.pem 4096
    openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
    
  2. Docker'ı TLS kullanacak şekilde yapılandırın: /etc/docker/daemon.json dosyasını düzenleyin:

    json
    {
      "tls": true,
      "tlscacert": "/root/.docker/certs/ca.pem",
      "tlscert": "/root/.docker/certs/server-cert.pem",
      "tlskey": "/root/.docker/certs/server-key.pem",
      "tlsverify": true
    }
    
  3. Docker'ı yeniden başlatın:

    bash
    sudo systemctl restart docker
    

Kalıp Güvenliği

Docker kalıplarınızın güvenliğini sağlayın:

  1. Resmi veya Doğrulanmış Kalıpları Kullanın: Her zaman Docker Hub'dan veya doğrulanmış yayıncılardan resmi kalıpları tercih edin.

  2. Kalıpları Güvenlik Açıkları İçin Tara:

    bash
    # Docker Scan'ı yükle
    docker scan --version
    
    # Bir kalıbı tara
    docker scan nginx:latest
    
  3. Minimal Temel Kalıpları Kullanın: Saldırı yüzeyini azaltmak için Alpine veya distroless kalıpları kullanın:

    dockerfile
    FROM alpine:3.16
    # Yerine
    # FROM ubuntu:22.04
    
  4. Kalıpları Güncel Tutun: Güvenlik yamalarını dahil etmek için kalıplarınızı düzenli olarak güncelleyin:

    bash
    docker pull nginx:latest
    
  5. Çok Aşamalı Derlemeler Uygulayın:

    dockerfile
    # Derleme aşaması
    FROM node:16 AS build
    WORKDIR /app
    COPY package*.json ./
    RUN npm install
    COPY . .
    RUN npm run build
    
    # Üretim aşaması
    FROM nginx:alpine
    COPY --from=build /app/dist /usr/share/nginx/html
    

Konteyner Çalışma Zamanı Güvenliği

Çalışan konteynerlerinizi güvenli hale getirin:

  1. Konteynerleri Kök Olmayan Kullanıcı Olarak Çalıştırın:

    dockerfile
    # Dockerfile'ınıza kök olmayan bir kullanıcı ekleyin
    RUN addgroup -g 1000 appuser && \
        adduser -u 1000 -G appuser -s /bin/sh -D appuser
    USER appuser
    
  2. Salt Okunur Dosya Sistemleri Kullanın:

    bash
    docker run --read-only --tmpfs /tmp nginx
    
  3. Konteyner Yeteneklerini Sınırlayın:

    bash
    docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
    
  4. Kaynak Sınırları Belirleyin:

    bash
    docker run --memory=512m --cpus=0.5 nginx
    
  5. Güvenlik Seçeneklerini Kullanın:

    bash
    docker run --security-opt=no-new-privileges nginx
    

Görsel Öğe: [Tablo: Docker güvenlik seçenekleri, açıklamaları, örnekleri ve farklı uygulama türleri için önerilen ayarları.]

Ağ Güvenliği

Konteyner ağını güvenli hale getirin:

  1. Özel Köprü Ağları Kullanın:

    bash
    # Özel bir ağ oluştur
    docker network create --driver bridge secure-network
    
    # Konteynerleri bu ağda çalıştır
    docker run --network secure-network --name app1 my-app
    docker run --network secure-network --name db mysql
    
  2. Dış Erişimi Kısıtlayın: Yalnızca gerekli portları açın:

    bash
    # Sadece localhost'a aç
    docker run -p 127.0.0.1:80:80 nginx
    
  3. Ağ Politikalarını Kullanın: Kubernetes veya Docker Swarm kullanıyorsanız, konteynerler arasındaki trafiği kontrol etmek için ağ politikaları uygulayın.

Gizli Yönetimi

Hassas verileri güvenli bir şekilde yönetin:

  1. Ortam Dosyalarını Kullanın:

    bash
    # Bir ortam dosyası oluştur
    echo "DB_PASSWORD=guvenliparola" > .env
    
    # Docker run ile kullan
    docker run --env-file .env my-app
    
  2. Gizlileri Dosya Olarak Bağla:

    bash
    # Bir gizli dizini oluştur
    mkdir -p secrets
    echo "guvenliparola" > secrets/db_password
    
    # Salt okunur bir dosya olarak bağla
    docker run -v $(pwd)/secrets/db_password:/run/secrets/db_password:ro my-app
    
  3. Docker Gizlilerini Kullanma (Swarm modu):

    bash
    # Bir gizli oluştur
    echo "guvenliparola" | docker secret create db_password -
    
    # Bir serviste gizliyi kullan
    docker service create --name my-app --secret db_password my-app
    

İzleme ve Denetleme

Güvenlik için izleme ve denetleme uygulayın:

  1. Docker Denetim Günlüğünü Etkinleştirin: Linux denetim sistemini Docker'ı izleyecek şekilde yapılandırın:

    bash
    sudo auditctl -w /usr/bin/docker -p rwxa
    
  2. Konteyner İzleme Araçlarını Kullanın: Prometheus ve Grafana gibi izleme çözümlerini dağıtın:

    bash
    # Prometheus'u çalıştır
    docker run -d -p 9090:9090 --name prometheus prom/prometheus
    
    # Grafana'yı çalıştır
    docker run -d -p 3000:3000 --name grafana grafana/grafana
    
  3. Çalışma Zamanı Güvenlik İzlemesi Uygulayın: Çalışma zamanı güvenlik izlemesi için Falco gibi araçları düşünebilirsiniz:

    bash
    docker run -d --name falco --privileged -v /var/run/docker.sock:/var/run/docker.sock falcosecurity/falco
    

Adım Adım: Güvenli Bir Docker Ortamı Uygulama

  1. Docker'ı en son sürüme güncelleyin

    bash
    sudo apt update
    sudo apt upgrade docker-ce docker-ce-cli containerd.io
    
  2. Docker işlemleri için adanmış bir kullanıcı oluşturun

    bash
    sudo adduser dockeruser
    sudo usermod -aG docker dockeruser
    
  3. Docker arka plan servisi güvenliğini yapılandırın /etc/docker/daemon.json dosyasını düzenleyin:

    json
    {
      "icc": false,
      "userns-remap": "default",
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      },
      "no-new-privileges": true
    }
    
  4. Docker'ı yeniden başlatın

    bash
    sudo systemctl restart docker
    
  5. Güvenli bir Docker ağı oluşturun

    bash
    docker network create --driver bridge secure-network
    
  6. İş akışınızda kalıp taramasını uygulayın

    bash
    # Trivy kullanarak örnek
    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image nginx:latest
    
  7. İzlemeyi ayarlayın

    bash
    # Konteyner izlemesi için cAdvisor'ı çalıştır
    docker run -d --name cadvisor \
      --volume=/:/rootfs:ro \
      --volume=/var/run:/var/run:ro \
      --volume=/sys:/sys:ro \
      --volume=/var/lib/docker/:/var/lib/docker:ro \
      --publish=8080:8080 \
      gcr.io/cadvisor/cadvisor:latest
    

Bölüm Özeti: Docker güvenliği, Docker arka plan servisini, kalıpları, konteynerleri, ağları ve hassas verileri güvenli hale getirmeyi içeren çok katmanlı bir yaklaşımdır. Konteynerleri kök olmayan kullanıcı olarak çalıştırmak, minimal temel kalıplar kullanmak, yetenekleri sınırlamak, kaynak sınırları belirlemek ve uygun izlemeyi uygulamak gibi en iyi uygulamaları uygulayarak, adanmış sunucunuzdaki Docker ortamınızın güvenliğini önemli ölçüde artırabilirsiniz.

Mini-SSS:

Docker varsayılan olarak güvenli midir?

Docker varsayılan olarak bazı güvenlik özellikleri sağlar, ancak gerçekten güvenli bir Docker ortamı ek yapılandırma ve en iyi uygulamaların uygulanmasını gerektirir. TildaVPS adanmış sunucuları, bu güvenlik önlemlerini uygulamanız için esneklik sağlar.

Docker kalıplarımı ne sıklıkla güncellemeliyim?

Docker kalıplarınızı düzenli olarak, ideal olarak otomatik bir CI/CD hattının bir parçası olarak güncellemelisiniz. En azından, güvenlik yamalarını dahil etmek için kalıpları aylık olarak veya kritik güvenlik açıkları duyurulduğunda hemen güncelleyin.

Sonuç

Uygulamaları adanmış sunucunuzda dockerize etmek, iyileştirilmiş kaynak kullanımından ve dağıtım tutarlılığından gelişmiş ölçeklenebilirlik ve izolasyona kadar sayısız fayda sunar. Bu kılavuz boyunca, adanmış sunucunuzda Docker'ı uygulama sürecinin tamamını ele aldık:

  1. Sunucu ortamları için Docker ve faydalarını anlama
  2. Doğru işletim sistemi ve yapılandırmalarla adanmış sunucunuzu hazırlama
  3. Optimum performans için Docker'ı kurma ve yapılandırma
  4. Uygulamalarınız için Docker konteynerlerini oluşturma ve yönetme
  5. Çoklu konteyner uygulamaları için Docker Compose'u kullanma
  6. Docker ortamınızı korumak için güvenlik en iyi uygulamalarını uygulama

Bu kılavuzda belirtilen adım adım talimatları ve en iyi uygulamaları izleyerek, TildaVPS adanmış sunucunuzda uygulamalarınızı başarılı bir şekilde dockerize edebilir, daha verimli, ölçeklenebilir ve yönetilebilir bir altyapı oluşturabilirsiniz.

Docker konteynerleştirme, TildaVPS adanmış sunucu kullanıcıları için özellikle değerlidir, çünkü sunucu donanımınızın performansını ve yeteneklerini en üst düzeye çıkarmanıza olanak tanır. Docker ile tek bir sunucuda birden çok izole uygulama çalıştırabilir, tutarlı geliştirme ve dağıtım iş akışları uygulayabilir ve uygulamalarınızı gerektiğinde kolayca ölçeklendirebilirsiniz.

İster yüksek trafikli bir web sitesi, ister karmaşık bir mikroservis mimarisi, ister bir geliştirme ortamı çalıştırıyor olun, Docker ihtiyaçlarınızı karşılamak için araçları ve esnekliği sağlar. Modern konteynerleştirme teknolojisinin faydalarını deneyimlemek için TildaVPS adanmış sunucunuzda Docker'ı bugün uygulamaya başlayın.

Harekete Geçirme Çağrısı: Uygulamalarınızı dockerize etmeye hazır mısınız? TildaVPS, Docker dağıtımları için mükemmel şekilde uygun yüksek performanslı adanmış sunucular sunar. Sunucu seçeneklerini keşfetmek için TildaVPS'in adanmış sunucu sayfasını ziyaret edin veya özel Docker iş yükü gereksinimlerinize göre kişiselleştirilmiş öneriler için destek ekibiyle iletişime geçin.

Sıkça Sorulan Sorular (SSS)

Docker ile geleneksel sanallaştırma arasındaki fark nedir?

Geleneksel sanallaştırma (VMware veya VirtualBox gibi) kendi işletim sistemlerine sahip eksiksiz sanal makineler oluşturur ve bu da önemli kaynaklar gerektirir. Docker, ana işletim sistemi çekirdeğini paylaşan ve yalnızca uygulama süreçlerini izole eden konteynerleştirmeyi kullanır. Bu, Docker konteynerlerini geleneksel VM'lerden çok daha hafif, daha hızlı başlatılan ve daha kaynak verimli hale getirir. Bir TildaVPS adanmış sunucuda, bu, aynı donanımla sanal makinelerden çok daha fazla Docker konteyneri çalıştırabileceğiniz anlamına gelir.

Windows Server üzerinde Docker çalıştırabilir miyim?

Evet, Docker Windows Server 2016 ve sonraki sürümler için mevcuttur. Windows Server hem Windows hem de Linux konteynerlerini (ikincisi hafif bir Linux VM aracılığıyla) çalıştırabilir. Ancak, daha iyi performans ve yerel destek nedeniyle Linux, Docker dağıtımları için genellikle tercih edilir. TildaVPS, Docker ihtiyaçlarınıza en uygun platformu seçmenize olanak tanıyan hem Windows hem de Linux adanmış sunucular sunar.

Mevcut uygulamalarımı Docker'a nasıl taşırım?

Mevcut uygulamaları Docker'a taşımak birkaç adım içerir: uygulamanın bağımlılıklarını analiz etme, ortamı tanımlayan bir Dockerfile oluşturma, bir Docker kalıbı inşa etme, konteynerleştirilmiş uygulamayı test etme ve üretime dağıtma. Süreç, uygulama türüne göre değişir, ancak genellikle şu adımları izler:

  1. Tüm bağımlılıkları ve çalışma zamanı gereksinimlerini belirleyin
  2. Ortamı kopyalayan bir Dockerfile oluşturun
  3. Docker kalıbını yerel olarak inşa edin ve test edin
  4. Konteynerleştirilmiş çalışma için yapılandırmaları ayarlayın
  5. Docker birimleriyle kalıcı depolama ayarlayın
  6. Konteynerleştirilmiş uygulamayı üretim sunucunuza dağıtın

Docker çalıştırmak için kaynak gereksinimleri nelerdir?

Docker'ın kendisi minimum ek yük gerektirir, ancak konteynerleştirilmiş uygulamalarınızın gerektirdiği kaynakları dikkate almanız gerekir. Adanmış bir sunucuda üretim ortamı için şunları öneririz:

  • CPU: En az 2 çekirdek (çoklu konteyner iş yükleri için daha fazlası)
  • RAM: Minimum 4 GB (üretim için 8 GB+ önerilir)
  • Depolama: Docker motoru ve kalıpları için 20 GB+
  • Ağ: Standart Ethernet bağlantısı (1 Gbps önerilir) TildaVPS adanmış sunucuları bu gereksinimleri aşar ve Docker dağıtımları için yeterli kaynak sağlar.

Docker ile veritabanı kalıcılığını nasıl hallederim?

Docker'da veritabanı kalıcılığı genellikle birimler kullanılarak yönetilir. İşte nasıl ayarlanacağı:

  1. Adlandırılmış bir birim oluşturun: docker volume create db-data
  2. Veritabanı konteynerinizi birimle çalıştırın: docker run -d --name mysql -v db-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:8.0
  3. Yedeklemeler için şunu kullanın: docker run --rm -v db-data:/source -v $(pwd):/backup alpine tar -czf /backup/db-backup.tar.gz -C /source .

Bu, verilerinizin konteyner kaldırılsa veya değiştirilse bile kalıcı olmasını sağlar.

Docker'ı üretim iş yükleri için kullanabilir miyim?

Kesinlikle. Docker, küçük uygulamalardan büyük ölçekli mikroservis mimarilerine kadar üretim ortamlarında yaygın olarak kullanılmaktadır. Üretim kullanımı için şu en iyi uygulamaları göz önünde bulundurun:

  1. 'latest' yerine belirli kalıp etiketleri kullanın
  2. Konteynerler için sağlık kontrolleri uygulayın
  3. Uygun izleme ve loglama ayarlayın
  4. Docker Compose veya Docker Swarm veya Kubernetes gibi bir orkestrasyon aracı kullanın
  5. Güvenlik en iyi uygulamalarını uygulayın
  6. Birimler için otomatik yedeklemeler ayarlayın
  7. Özel kalıplarınız için bir kayıt defteri kullanın

TildaVPS adanmış sunucuları, üretim Docker iş yükleri için gereken kararlılığı ve performansı sağlar.

Docker konteynerlerini kesinti olmadan nasıl güncellerim?

Konteynerleri minimum veya sıfır kesintiyle güncellemek için şu yaklaşımları kullanabilirsiniz:

  1. Mavi-Yeşil Dağıtım: Yeni konteyneri eskiyle birlikte çalıştırın, ardından yeni konteyner hazır olduğunda trafiği değiştirin.

    bash
    # Yeni kalıbı çek
    docker pull myapp:v2
    # Yeni konteyneri farklı bir portta çalıştır
    docker run -d --name myapp-v2 -p 8081:80 myapp:v2
    # Yeni konteyneri test et
    # Yük dengeleyiciyi yeni konteynere işaret edecek şekilde güncelle
    # Eski konteyneri durdur
    docker stop myapp-v1
    
  2. Docker Swarm veya Kubernetes Kullanma: Bu orkestrasyon araçları, yuvarlanan güncellemeleri otomatik olarak halleder.

Docker konteynerlerini izlemenin en iyi yolu nedir?

Docker konteynerlerini izlemeye yardımcı olabilecek birkaç araç vardır:

  1. Docker'ın yerleşik araçları: docker stats ve docker events
  2. cAdvisor: Konteynere özel performans metrikleri sağlar
  3. Prometheus + Grafana: Metrik toplama ve görselleştirme için güçlü bir kombinasyon
  4. ELK Yığını: Log toplama ve analizi için
  5. Portainer: Docker yönetimi ve izlemesi için bir web kullanıcı arayüzü

TildaVPS adanmış sunucunuzda kapsamlı bir izleme çözümü için, Prometheus ve Grafana'yı konteynerlerde kurmayı düşünebilirsiniz:

bash
# İzleme için bir ağ oluştur
docker network create monitoring

# Prometheus'u çalıştır
docker run -d --name prometheus \
  --network monitoring \
  -p 9090:9090 \
  -v prometheus-data:/prometheus \
  prom/prometheus

# Grafana'yı çalıştır
docker run -d --name grafana \
  --network monitoring \
  -p 3000:3000 \
  -v grafana-data:/var/lib/grafana \
  grafana/grafana

Temel Çıkarımlar

  • Docker konteynerleştirme, iyileştirilmiş kaynak kullanımından ve dağıtım tutarlılığından uygulama izolasyonuna ve ölçeklenebilirliğe kadar adanmış sunucu ortamları için önemli faydalar sağlar.
  • Adanmış sunucunuzun doğru işletim sistemi seçimi ve sistem yapılandırmaları dahil olmak üzere uygun şekilde hazırlanması, başarılı bir Docker uygulaması için çok önemlidir.
  • Docker Compose, çoklu konteyner uygulamalarının dağıtımını ve yönetimini basitleştirerek tek bir sunucuda karmaşık yığınları çalıştırmayı kolaylaştırır.
  • Konteynerleri kök olmayan kullanıcı olarak çalıştırmak, minimal temel kalıplar kullanmak ve uygun izlemeyi uygulamak gibi en iyi uygulamalarla güvenlik, Docker uygulamasında bir öncelik olmalıdır.
  • Docker birimleri, konteynerleştirilmiş uygulamalar için kalıcı depolama sağlar ve konteyner yaşam döngüleri boyunca veri kalıcılığını garanti eder.
  • Kalıp güncellemeleri ve güvenlik taraması dahil olmak üzere düzenli bakım, sağlıklı bir Docker ortamı için çok önemlidir.

Terimler Sözlüğü

  • Konteyner (Container): Bir yazılım parçasını çalıştırmak için gereken her şeyi içeren hafif, bağımsız, çalıştırılabilir bir paket.
  • Docker Arka Plan Servisi (Docker Daemon): Bir sistemdeki Docker konteynerlerini yöneten arka plan servisi.
  • Docker Hub: Docker kalıpları için bulut tabanlı bir kayıt defteri servisi.
  • Docker Kalıbı (Docker Image): Docker konteynerleri oluşturmak için kullanılan salt okunur bir şablon.
  • Dockerfile: Bir Docker kalıbı oluşturmak için talimatlar içeren bir metin belgesi.
  • Docker Compose: Çoklu konteynerli Docker uygulamalarını tanımlamak ve çalıştırmak için bir araç.
  • Birim (Volume): Docker konteynerleri için kalıcı bir veri depolama mekanizması.
  • Kayıt Defteri (Registry): Docker kalıplarını depolamak ve dağıtmak için bir depo.
  • Katman (Layer): Bir kalıpta yapılan, Dockerfile'daki bir talimatla temsil edilen bir değişiklik. Katmanlar, verimlilik için derlemeler sırasında önbelleğe alınır.
  • Orkestrasyon (Orchestration): Konteynerlerin otomatik olarak düzenlenmesi, koordine edilmesi ve yönetilmesi, tipik olarak Docker Swarm veya Kubernetes gibi araçlar kullanılarak.
  • Köprü Ağı (Bridge Network): Aynı ana bilgisayardaki konteynerlerin iletişim kurmasını sağlayan Docker konteynerleri için varsayılan ağ sürücüsü.
  • Bağlama Noktası (Bind Mount): Bir ana bilgisayar dosyasının veya dizininin bir konteyner dosyasına veya dizinine eşlenmesi.
  • Docker Swarm: Docker'ın yerel kümeleme ve orkestrasyon çözümü.
  • Konteyner Yaşam Döngüsü (Container Lifecycle): Bir konteynerin oluşturulmasından silinmesine kadar geçebileceği çeşitli durumlar.
  • Docker Soketi (Docker Socket): Docker arka plan servisinin varsayılan olarak dinlediği Unix soketi.
  • Çok Aşamalı Derleme (Multi-stage Build): Kalıp boyutunu ve güvenliğini optimize etmek için birden çok FROM ifadesi kullanan bir Dockerfile deseni.
  • Sağlık Kontrolü (Health Check): Docker'ın bir konteynerin sağlıklı olup olmadığını belirlemek için çalıştırdığı bir komut.
  • Docker Bağlamı (Docker Context): Derleme işlemi sırasında Docker arka plan servisine gönderilen dosya ve dizinler kümesi.
Categories:
Adanmış SunucuDocker
Tags:
# Adanmış Sunucular# Docker# Konteynerleştirme