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:
-
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.
-
İzolasyon ve Güvenlik: Her konteyner ayrı çalışır, uygulamalar arasındaki çakışmaları önler ve ek bir güvenlik katmanı sağlar.
-
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.
-
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.
-
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.
-
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.
-
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:
# Ç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:
sudo apt update
sudo apt upgrade -y
CentOS/RHEL için:
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:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
CentOS/RHEL için:
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:
# 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:
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:
# 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
- Docker'ın resmi GPG anahtarını ekleyin:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Kararlı depoyu kurun:
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
- Paket dizinini güncelleyin ve Docker'ı kurun:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
- Kurulumu doğrulayın:
sudo docker --version
CentOS/RHEL Kurulumu
- Docker deposunu ekleyin:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Docker'ı kurun:
sudo yum install -y docker-ce docker-ce-cli containerd.io
- Docker servisini başlatın ve etkinleştirin:
sudo systemctl start docker
sudo systemctl enable docker
- Kurulumu doğrulayın:
sudo docker --version
Kurulum Sonrası Adımlar
Docker'ı kurduktan sonra bu önemli kurulum sonrası adımları tamamlayın:
- Docker komutlarını sudo olmadan çalıştırmak için kullanıcınızı docker grubuna ekleyin:
sudo usermod -aG docker $USER
- Grup değişikliklerinin etkili olması için oturumu kapatıp tekrar açın veya şunu çalıştırın:
newgrp docker
- Docker'ın düzgün çalıştığını doğrulayın:
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:
- Yapılandırma dosyasını oluşturun veya düzenleyin:
sudo nano /etc/docker/daemon.json
- Yapılandırma seçeneklerinizi ekleyin. İşte bir örnek yapılandırma:
{
"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"]
}
- Dosyayı kaydedin ve değişiklikleri uygulamak için Docker'ı yeniden başlatın:
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:
# 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:
- Docker kayıt defterinize giriş yapın:
docker login [kayıt-defteri-url]
- Docker Hub için:
docker login
- İ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:
- Mevcut depolama sürücünüzü kontrol edin:
docker info | grep "Storage Driver"
- Depolama sürücüsünü değiştirmek için daemon.json dosyasını düzenleyin:
sudo nano /etc/docker/daemon.json
- Depolama sürücüsü ayarını ekleyin veya değiştirin:
{
"storage-driver": "overlay2"
}
- Kaydedin ve Docker'ı yeniden başlatın:
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:
# 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:
# 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:
# 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:
# Ç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:
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:
# 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:
# 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:
- Projeniz için yeni bir dizin oluşturun:
mkdir node-app
cd node-app
- Basit bir Node.js uygulaması oluşturun:
# 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
- Bir Dockerfile oluşturun:
echo 'FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]' > Dockerfile
- Docker kalıbını inşa edin:
docker build -t my-node-app .
- Kalıbınızdan bir konteyner çalıştırın:
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:
-
Uygulama kodunuzu hazırlayın
- Uygulamanızın yerel olarak çalıştığından emin olun
- Bağımlılıkları ve gereksinimleri belirleyin
-
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
-
Docker kalıbını inşa edin
bashdocker build -t my-web-app:v1 .
-
Kalıbı yerel olarak test edin
bashdocker run -d -p 8080:80 --name test-app my-web-app:v1
-
Kalıbı bir kayıt defterine it (isteğe bağlı)
bashdocker tag my-web-app:v1 kullaniciadi/my-web-app:v1 docker push kullaniciadi/my-web-app:v1
-
Konteyneri üretim sunucunuza dağıtın
bashdocker run -d -p 80:80 --restart always --name production-app my-web-app:v1
-
İzleme ve loglama ayarlayın
bashdocker 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:
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:
# 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
# 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
# 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
# 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:
# Ç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:
# 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:
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
# 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
# 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
# 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
# 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:
# 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:
- Projeniz için yeni bir dizin oluşturun:
mkdir compose-demo
cd compose-demo
- Bir
docker-compose.yml
dosyası oluşturun:
nano docker-compose.yml
- Basit bir web uygulaması ve bir veritabanı için aşağıdaki içeriği ekleyin:
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ı
# 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:
- Bir proje dizini oluşturun:
mkdir lamp-docker
cd lamp-docker
- Gerekli alt dizinleri oluşturun:
mkdir -p www/html
mkdir mysql
- Kurulumu test etmek için basit bir PHP dosyası oluşturun:
echo '<?php
phpinfo();
?>' > www/html/index.php
- Docker Compose dosyasını oluşturun:
nano docker-compose.yml
- Aşağıdaki içeriği ekleyin:
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:
- LAMP yığınını başlatın:
docker-compose up -d
- Uygulamalarınıza erişin:
- PHP uygulaması: http://sunucunuzun-ip-adresi
- phpMyAdmin: http://sunucunuzun-ip-adresi:8080 (lamp_user/lamp_password ile giriş yapın)
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
- Bir
.env
dosyası oluşturun:
nano .env
- Ortam değişkenlerinizi ekleyin:
MYSQL_ROOT_PASSWORD=guvenliparola
MYSQL_DATABASE=uretim_db
MYSQL_USER=uretim_kullanicisi
MYSQL_PASSWORD=uretim_parolasi
- Bu değişkenleri
docker-compose.yml
dosyanızda referans alın:
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:
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:
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:
- Konteyner Kaçışı: Bir konteyner ele geçirilirse, bir saldırgan konteynerden kaçarak ana sisteme erişmeye çalışabilir.
- Kalıp Güvenlik Açıkları: Docker kalıpları savunmasız yazılımlar veya kötü amaçlı kod içerebilir.
- Aşırı Ayrıcalıklar: Gereksiz ayrıcalıklarla çalışan konteynerler güvenlik riski oluşturur.
- Güvenli Olmayan Yapılandırmalar: Yanlış yapılandırılmış konteynerler hassas verileri veya servisleri açığa çıkarabilir.
- 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:
-
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
-
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 }
-
Docker'ı yeniden başlatın:
bashsudo systemctl restart docker
Kalıp Güvenliği
Docker kalıplarınızın güvenliğini sağlayın:
-
Resmi veya Doğrulanmış Kalıpları Kullanın: Her zaman Docker Hub'dan veya doğrulanmış yayıncılardan resmi kalıpları tercih edin.
-
Kalıpları Güvenlik Açıkları İçin Tara:
bash# Docker Scan'ı yükle docker scan --version # Bir kalıbı tara docker scan nginx:latest
-
Minimal Temel Kalıpları Kullanın: Saldırı yüzeyini azaltmak için Alpine veya distroless kalıpları kullanın:
dockerfileFROM alpine:3.16 # Yerine # FROM ubuntu:22.04
-
Kalıpları Güncel Tutun: Güvenlik yamalarını dahil etmek için kalıplarınızı düzenli olarak güncelleyin:
bashdocker pull nginx:latest
-
Ç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:
-
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
-
Salt Okunur Dosya Sistemleri Kullanın:
bashdocker run --read-only --tmpfs /tmp nginx
-
Konteyner Yeteneklerini Sınırlayın:
bashdocker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
-
Kaynak Sınırları Belirleyin:
bashdocker run --memory=512m --cpus=0.5 nginx
-
Güvenlik Seçeneklerini Kullanın:
bashdocker 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:
-
Ö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
-
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
-
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:
-
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
-
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
-
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:
-
Docker Denetim Günlüğünü Etkinleştirin: Linux denetim sistemini Docker'ı izleyecek şekilde yapılandırın:
bashsudo auditctl -w /usr/bin/docker -p rwxa
-
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
-
Çalışma Zamanı Güvenlik İzlemesi Uygulayın: Çalışma zamanı güvenlik izlemesi için Falco gibi araçları düşünebilirsiniz:
bashdocker 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
-
Docker'ı en son sürüme güncelleyin
bashsudo apt update sudo apt upgrade docker-ce docker-ce-cli containerd.io
-
Docker işlemleri için adanmış bir kullanıcı oluşturun
bashsudo adduser dockeruser sudo usermod -aG docker dockeruser
-
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 }
-
Docker'ı yeniden başlatın
bashsudo systemctl restart docker
-
Güvenli bir Docker ağı oluşturun
bashdocker network create --driver bridge secure-network
-
İş 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
-
İ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:
- Sunucu ortamları için Docker ve faydalarını anlama
- Doğru işletim sistemi ve yapılandırmalarla adanmış sunucunuzu hazırlama
- Optimum performans için Docker'ı kurma ve yapılandırma
- Uygulamalarınız için Docker konteynerlerini oluşturma ve yönetme
- Çoklu konteyner uygulamaları için Docker Compose'u kullanma
- 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:
- Tüm bağımlılıkları ve çalışma zamanı gereksinimlerini belirleyin
- Ortamı kopyalayan bir Dockerfile oluşturun
- Docker kalıbını yerel olarak inşa edin ve test edin
- Konteynerleştirilmiş çalışma için yapılandırmaları ayarlayın
- Docker birimleriyle kalıcı depolama ayarlayın
- 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ğı:
- Adlandırılmış bir birim oluşturun:
docker volume create db-data
- 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
- 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:
- 'latest' yerine belirli kalıp etiketleri kullanın
- Konteynerler için sağlık kontrolleri uygulayın
- Uygun izleme ve loglama ayarlayın
- Docker Compose veya Docker Swarm veya Kubernetes gibi bir orkestrasyon aracı kullanın
- Güvenlik en iyi uygulamalarını uygulayın
- Birimler için otomatik yedeklemeler ayarlayın
- Ö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:
-
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
-
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:
- Docker'ın yerleşik araçları:
docker stats
vedocker events
- cAdvisor: Konteynere özel performans metrikleri sağlar
- Prometheus + Grafana: Metrik toplama ve görselleştirme için güçlü bir kombinasyon
- ELK Yığını: Log toplama ve analizi için
- 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:
# İ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.