Ana içeriğe geç
Kategoriye Dön

Portainer ile Docker Yönetimi: Web Arayüzlü Konteyner Kontrolü

Portainer CE kurulumu, Docker ve Kubernetes yönetimi, stack deployment, volume/network yönetimi, kullanıcı yetkilendirme, webhook ve GitOps entegrasyonu.

Okuma süresi: 13 dk Self-Hosting
portainerdockerkubernetesweb arayüzükonteyner yönetimiself-hosting

İçindekiler

Portainer ile Docker Yönetimi: Web Arayüzlü Konteyner Kontrolü

Portainer, Docker ve Kubernetes ortamlarını web tarayıcısı üzerinden yönetmenizi sağlayan açık kaynaklı bir konteyner yönetim platformudur. Komut satırı bilgisi gerektirmeden container başlatma, durdurma, log görüntüleme ve stack deploy etme gibi işlemleri kolayca yapabilirsiniz.

Portainer CE Nedir?

Portainer Community Edition (CE) ücretsiz ve açık kaynaklıdır. Temel özellikleri:

  • Container Yönetimi: Başlatma, durdurma, yeniden başlatma, silme
  • Image Yönetimi: Pull, push, build, tag işlemleri
  • Stack Deploy: Docker Compose dosyalarını web arayüzünden deploy etme
  • Volume/Network: Depolama ve ağ yönetimi
  • Log Görüntüleme: Gerçek zamanlı container logları
  • Konsol Erişimi: Container içine web terminal ile bağlanma
  • Kullanıcı Yönetimi: Rol tabanlı erişim kontrolü

Kurulum

Docker Volume Oluşturma

hljs bash
# Portainer verilerini saklamak için volume oluştur
docker volume create portainer_data

Portainer CE Kurulumu

hljs bash
docker run -d \
  --name portainer \
  --restart=always \
  -p 8000:8000 \
  -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Kurulum tamamlandıktan sonra:

https://SUNUCU_IP:9443

İlk girişte admin şifresi belirlemeniz gerekir. 5 dakika içinde giriş yapmazsanız Portainer güvenlik nedeniyle yeniden başlatılması gerekir.

Docker Compose ile Kurulum

hljs yaml
# portainer-compose.yml
version: '3.8'
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "8000:8000"
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    security_opt:
      - no-new-privileges:true

volumes:
  portainer_data:
hljs bash
docker compose -f portainer-compose.yml up -d

Docker Socket Bağlantısı

Portainer, Docker daemon ile /var/run/docker.sock üzerinden iletişim kurar. Bu socket'e erişim Docker üzerinde tam kontrol sağlar:

hljs bash
# Socket izinlerini kontrol et
ls -la /var/run/docker.sock
# srw-rw---- 1 root docker 0 ... /var/run/docker.sock

# Kullanıcıyı docker grubuna ekle (gerekirse)
usermod -aG docker $USER

Docker socket'e erişim root yetkisine eşdeğerdir. Portainer'ı güvenilir ağlarda çalıştırın ve güçlü şifre kullanın.

Stack (Docker Compose) Deploy Etme

Web Arayüzünden Stack Deploy

  1. StacksAdd Stack
  2. Stack adı girin
  3. Docker Compose içeriğini yapıştırın veya Git repository URL'i girin
  4. Environment variables ekleyin
  5. Deploy the stack butonuna tıklayın
hljs yaml
# Örnek: WordPress Stack
version: '3.8'
services:
  wordpress:
    image: wordpress:latest
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

Git Repository'den Stack Deploy

  1. Stack oluştururken Repository seçeneğini seçin
  2. Git URL girin: https://github.com/user/repo
  3. Branch ve compose dosya yolunu belirtin
  4. Otomatik güncelleme için GitOps updates etkinleştirin

Container Yönetimi

Container İşlemleri

Portainer arayüzünden container üzerinde yapabileceğiniz işlemler:

hljs bash
# Portainer arayüzünde:
# Containers → container seç → Actions:
# - Start / Stop / Restart / Kill / Pause
# - Logs (gerçek zamanlı)
# - Console (web terminal)
# - Inspect (JSON detayları)
# - Stats (CPU, RAM, Network kullanımı)

Web Terminal (Exec Console)

Container içine web tarayıcısından terminal açabilirsiniz:

  1. Containers → Container adına tıklayın
  2. Console sekmesi → Connect
  3. Shell seçin: /bin/bash veya /bin/sh
hljs bash
# Container içinde çalıştırılabilecek komutlar:
ls -la /app
cat /etc/nginx/nginx.conf
nginx -t
env | grep DATABASE

Image Yönetimi

hljs bash
# Portainer arayüzünden:
# Images → Pull Image
# Registry: docker.io (varsayılan)
# Image: nginx:latest

# Özel registry eklemek için:
# Registries → Add Registry
# URL: registry.example.com
# Kullanıcı adı ve şifre girin

Volume Yönetimi

hljs bash
# Portainer arayüzünden:
# Volumes → Add Volume
# Name: myapp_data
# Driver: local

# Volume detayları:
# - Hangi container'ların kullandığı
# - Disk kullanımı
# - Mount point: /var/lib/docker/volumes/myapp_data/_data

Network Yönetimi

hljs bash
# Portainer arayüzünden:
# Networks → Add Network
# Name: myapp-network
# Driver: bridge
# Subnet: 172.20.0.0/16

# Container'ları ağa bağlama:
# Container → Network → Join Network

Kullanıcı ve Ekip Yönetimi

Kullanıcı Oluşturma

  1. SettingsUsersAdd User
  2. Kullanıcı adı ve şifre belirleyin
  3. Rol atayın: Administrator veya Standard User

Ekip Oluşturma

hljs bash
# Portainer arayüzünden:
# Settings → Teams → Add Team
# Team adı: developers
# Üye ekle: kullanici1, kullanici2

Ortam Erişim Kontrolü

hljs bash
# Environments → Environment seç → Access Control
# Belirli kullanıcı veya ekiplere erişim ver
# Rol: Manager (tam yetki) veya Operator (sınırlı)

Webhook ile Otomatik Güncelleme

hljs bash
# Stack veya Service için webhook oluşturma:
# Stack → Stack adı → Webhooks
# Webhook URL kopyala

# GitHub Actions'da kullanım:
curl -X POST https://portainer.example.com/api/webhooks/WEBHOOK_TOKEN

# GitLab CI'da kullanım:
wget --post-data '' https://portainer.example.com/api/webhooks/WEBHOOK_TOKEN

Edge Agent (Uzak Sunucu Yönetimi)

Firewall arkasındaki sunucuları yönetmek için Edge Agent kullanın:

hljs bash
# Portainer'da:
# Environments → Add Environment → Edge Agent
# Edge ID ve Edge Key kopyala

# Uzak sunucuda Edge Agent kur:
docker run -d \
  --name portainer_edge_agent \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes \
  -v /:/host \
  -v portainer_agent_data:/data \
  -e EDGE=1 \
  -e EDGE_ID=EDGE_ID_BURAYA \
  -e EDGE_KEY=EDGE_KEY_BURAYA \
  -e EDGE_INSECURE_POLL=1 \
  portainer/agent:latest

Portainer Güncelleme

hljs bash
# Mevcut container'ı durdur ve sil
docker stop portainer
docker rm portainer

# En son image'ı çek
docker pull portainer/portainer-ce:latest

# Yeniden başlat (aynı komutla, veriler volume'da korunur)
docker run -d \
  --name portainer \
  --restart=always \
  -p 8000:8000 \
  -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

REXE sunucularında Portainer kurarak tüm Docker container'larınızı tek bir web arayüzünden yönetebilirsiniz. Özellikle birden fazla servis çalıştıran sunucularda büyük kolaylık sağlar.