Takip et

Yerel Podman Kayıt Defteri Kurulumu ve Podman İmajlarının Özelleştirilmesi

Günümüz yazılım geliştirme süreçlerinde konteyner teknolojileri, uygulamaların tutarlı, taşınabilir ve izole bir şekilde çalıştırılmasını…

Yerel Podman Kayıt Defteri Kurulumu ve Podman İmajlarının Özelleştirilmesi

Günümüz yazılım geliştirme süreçlerinde konteyner teknolojileri, uygulamaların tutarlı, taşınabilir ve izole bir şekilde çalıştırılmasını sağlayarak vazgeçilmez bir araç haline gelmiştir. Podman, Docker’a güçlü bir alternatif olarak ortaya çıkmış, daemon’sız mimarisi ve rootless çalışma yeteneğiyle özellikle geliştiriciler arasında popülerlik kazanmıştır. Bu makalede, Podman kullanarak yerel bir kayıt defteri (registry) nasıl kurulacağını ve mevcut Podman imajlarının ihtiyaçlarınıza göre nasıl özelleştirileceğini adım adım inceleyeceğiz. Yerel bir kayıt defteri, geliştirme ve test ortamlarında imajları güvenli ve hızlı bir şekilde depolamanıza, ağ bağlantısı olmadan çalışmanıza ve hassas imajlarınızı bulut ortamlarına göndermeden önce test etmenize olanak tanır.

1. Podman Ortamının Hazırlanması

Yerel bir kayıt defteri kurmaya ve imajları özelleştirmeye başlamadan önce, sisteminizde Podman’ın kurulu ve çalışır durumda olduğundan emin olmalıyız. Bu bölüm, Podman’ın kurulumunu ve temel komutlarını kapsayacaktır.

Podman Kurulumu

Podman, çoğu Linux dağıtımında varsayılan paket yöneticileri aracılığıyla kolayca kurulabilir. Windows ve macOS kullanıcıları için Podman Desktop veya Podman Machine (VM tabanlı) önerilir. Aşağıda bazı popüler Linux dağıtımları için kurulum komutları bulunmaktadır:

  • Fedora/CentOS/RHEL:
    sudo dnf install podman

  • Debian/Ubuntu:
    sudo apt update
    sudo apt install podman

  • Arch Linux:
    sudo pacman -S podman

Kurulumdan sonra Podman'ın doğru bir şekilde kurulduğunu kontrol etmek için sürüm bilgisini sorgulayabilirsiniz:

podman --version

Temel Podman Komutları

Podman ile çalışırken sıkça kullanacağınız bazı temel komutlar şunlardır:

  • podman pull [imaj_adı]: Uzak bir kayıt defterinden imaj çeker.
  • podman images: Yerel olarak depolanan imajları listeler.
  • podman run [imaj_adı]: Bir imajdan yeni bir konteyner başlatır.
  • podman ps -a: Tüm konteynerleri (çalışan ve durmuş) listeler.
  • podman stop [konteyner_adı_veya_id]: Çalışan bir konteyneri durdurur.
  • podman rm [konteyner_adı_veya_id]: Bir konteyneri siler.
  • podman rmi [imaj_adı_veya_id]: Bir imajı siler.

2. Yerel Podman Kayıt Defteri Kurulumu

Yerel bir kayıt defteri, imajlarınızı kendi makinenizde depolamanızı sağlar. Bu, geliştirme döngüsünü hızlandırır, ağ bağımlılığını azaltır ve hassas imajlar için ek bir güvenlik katmanı sunar.

Kayıt Defteri Konteynerini Çalıştırma

Yerel bir kayıt defteri kurmanın en kolay yolu, resmi registry imajını Podman kullanarak çalıştırmaktır. Bu imaj, temel bir kayıt defteri sunar.

podman run -d -p 5000:5000 --name local-registry registry:2

Bu komut:

  • -d: Konteyneri arka planda (detached mode) çalıştırır.
  • -p 5000:5000: Host makinenin 5000 numaralı portunu konteynerin 5000 numaralı portuna eşler.
  • --name local-registry: Konteynere 'local-registry' adını verir.
  • registry:2: Kullanılacak imajın adıdır (resmi Docker Registry imajının 2. sürümü).

Konteynerin çalıştığını doğrulamak için podman ps komutunu kullanabilirsiniz.

Podman'ı Yerel Kayıt Defteriyle Konuşlandırma

Varsayılan olarak, Podman (ve Docker) güvenli olmayan (HTTP) kayıt defterlerine imaj itmenize izin vermez. Yerel kayıt defterimiz başlangıçta HTTP üzerinden çalıştığı için Podman'a bu kayıt defterine güvenmesi gerektiğini bildirmemiz gerekir. Bunun için /etc/containers/registries.conf (veya rootless kullanıcılar için $HOME/.config/containers/registries.conf) dosyasını düzenlememiz gerekir.

Dosyayı açın ve [registries.insecure] bölümüne yerel kayıt defterinizin adresini ekleyin:

# /etc/containers/registries.conf (veya $HOME/.config/containers/registries.conf)

[registries.insecure]
registries = ['localhost:5000']

Bu değişiklikten sonra Podman servisini yeniden başlatmanıza gerek yoktur, ancak bazı durumlarda Podman Desktop kullanıyorsanız uygulamanın yeniden başlatılması gerekebilir.

Kayıt Defteri Verilerinin Kalıcılığı

Yukarıdaki kurulumda, kayıt defteri konteyneri silindiğinde tüm imajlarınız da silinecektir. Verilerin kalıcı olması için bir Podman volume'u kullanmalıyız:

podman volume create local-registry-data
podman run -d -p 5000:5000 --name local-registry -v local-registry-data:/var/lib/registry registry:2

Burada -v local-registry-data:/var/lib/registry komutu, local-registry-data adında bir Podman volume'unu konteyner içindeki /var/lib/registry dizinine bağlar. Böylece konteyner silinse bile imaj verileriniz volume'da kalmaya devam eder.

3. İmajları Yerel Kayıt Defterine İtme ve Çekme

Yerel kayıt defterimiz hazır olduğuna göre, artık imajları bu kayıt defterine itebilir ve çekebiliriz. Bu, geliştirme ve test süreçlerinizde büyük esneklik sağlar.

Mevcut Bir İmajı Çekme ve Etiketleme

Öncelikle, uzak bir kayıt defterinden bir imaj çekelim ve onu yerel kayıt defterimize uygun bir şekilde etiketleyelim (tagging). Örneğin, bir Nginx imajı çekelim:

podman pull nginx:latest

Şimdi bu imajı yerel kayıt defterimize itebilmek için yeniden etiketlememiz gerekiyor. Etiketleme formatı [yerel_kayıt_defteri_adresi]/[imaj_adı]:[etiket] şeklinde olmalıdır:

podman tag nginx:latest localhost:5000/my-nginx:1.0

podman images komutunu çalıştırarak yeni etiketi görebilirsiniz.

İmajı Yerel Kayıt Defterine İtme (Push)

Etiketlediğimiz imajı yerel kayıt defterimize itmek için podman push komutunu kullanırız:

podman push localhost:5000/my-nginx:1.0

Eğer registries.conf dosyasını doğru yapılandırdıysanız, imajınız başarıyla yerel kayıt defterinize yüklenecektir.

İmajı Yerel Kayıt Defterinden Çekme (Pull)

Yerel kayıt defterinize ittiğiniz bir imajı çekmek de oldukça basittir. Öncelikle yerel imajı silerek test edelim:

podman rmi localhost:5000/my-nginx:1.0
podman rmi nginx:latest # Orijinal imajı da silebilirsiniz

Şimdi imajı yerel kayıt defterimizden çekelim:

podman pull localhost:5000/my-nginx:1.0

İmajın başarıyla çekildiğini podman images komutuyla doğrulayabilirsiniz.

4. Podman İmajlarını Özelleştirme: Dockerfile ile

Çoğu zaman, mevcut bir imajı doğrudan kullanmak yerine, ihtiyaçlarınıza göre özelleştirmeniz gerekir. Dockerfile, imaj oluşturma sürecini otomatikleştiren ve tekrarlanabilir hale getiren metin tabanlı bir betiktir.

Dockerfile Temelleri ve Yapısı

Dockerfile, adım adım komutları içeren bir metin dosyasıdır. Her komut, imajın bir katmanını oluşturur. Temel Dockerfile komutları şunlardır:

  • FROM: Temel imajı belirtir (örneğin, FROM ubuntu:latest).
  • RUN: İmaj oluşturma sırasında çalıştırılacak komutları belirtir (örneğin, paket yükleme).
  • COPY: Yerel dosyaları imaja kopyalar.
  • ADD: Yerel dosyaları veya URL'den dosyaları imaja kopyalar ve arşivleri açabilir.
  • WORKDIR: Sonraki komutlar için çalışma dizinini ayarlar.
  • EXPOSE: Konteynerin hangi portları dinleyeceğini belirtir.
  • ENV: Ortam değişkenleri tanımlar.
  • CMD: Konteyner başlatıldığında çalıştırılacak varsayılan komutu belirtir.
  • ENTRYPOINT: Konteynerin ana yürütülebilir dosyasını belirtir.

Örnek Bir Dockerfile Oluşturma ve İmajı Derleme

Basit bir Python uygulamasını içeren bir imaj oluşturalım. Öncelikle, projeniz için bir dizin oluşturun ve içine app.py ve Dockerfile adında iki dosya ekleyin.

app.py:

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Merhaba, Podman ve Özelleştirilmiş İmajlar Dünyası!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

Dockerfile:

# Dockerfile
FROM python:3.9-slim-buster

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app.py .

EXPOSE 8080

CMD ["python", "app.py"]

requirements.txt:

flask

Şimdi bu Dockerfile'ı kullanarak imajı derleyelim. Dockerfile'ın bulunduğu dizinde aşağıdaki komutu çalıştırın:

podman build -t my-custom-app:1.0 .

  • -t my-custom-app:1.0: Oluşturulan imaja my-custom-app:1.0 etiketini verir.
  • .: Dockerfile'ın ve bağlamın (context) mevcut dizinde olduğunu belirtir.

İmajın başarıyla oluşturulduğunu podman images komutuyla kontrol edebilirsiniz.

Çok Aşamalı Derlemeler (Multi-stage Builds)

Büyük uygulamalar için imaj boyutunu küçültmek ve güvenlik risklerini azaltmak amacıyla çok aşamalı derlemeler kullanmak önemlidir. Bu teknik, derleme bağımlılıklarını nihai üretim imajına dahil etmeden, farklı aşamalarda derleme ve çalışma zamanı ortamlarını ayırmanıza olanak tanır.

Örnek olarak, bir React uygulamasını derleyip sadece statik dosyalarını Nginx ile sunan bir Dockerfile düşünebilirsiniz. İlk aşamada Node.js ile uygulama derlenir, ikinci aşamada ise sadece derlenmiş statik dosyalar hafif bir Nginx imajına kopyalanır.

5. Özelleştirilmiş İmajı Kayıt Defterine Yükleme ve Kullanma

Oluşturduğumuz özelleştirilmiş imajı yerel kayıt defterimize iterek, diğer geliştiricilerin veya CI/CD sistemlerinin bu imaja kolayca erişmesini sağlayabiliriz.

Özelleştirilmiş İmajı Etiketleme ve İtme

Önceki bölümde oluşturduğumuz my-custom-app:1.0 imajını yerel kayıt defterimize itmek için etiketlememiz gerekiyor:

podman tag my-custom-app:1.0 localhost:5000/my-custom-app:1.0

Şimdi etiketlenmiş imajı yerel kayıt defterine itebiliriz:

podman push localhost:5000/my-custom-app:1.0

Bu komut, imajınızı yerel kayıt defterinize yükleyecektir. Artık bu imaj, ağ bağlantısı olmadan bile yerel ortamınızda kullanılabilir durumdadır.

Kayıt Defterindeki İmajı Kullanarak Konteyner Çalıştırma

Yerel kayıt defterinizden bir imajı çekip bir konteyner olarak çalıştırmak için aşağıdaki komutu kullanabilirsiniz:

podman run -d -p 8080:8080 --name my-custom-web-app localhost:5000/my-custom-app:1.0

Bu komut, yerel kayıt defterinizdeki my-custom-app:1.0 imajını kullanarak bir konteyner başlatır ve host makinenizin 8080 portunu konteynerin 8080 portuna eşler. Tarayıcınızda http://localhost:8080 adresine giderek uygulamanızın çalıştığını görebilirsiniz.

6. Güvenlik ve En İyi Uygulamalar

Yerel kayıt defteri ve imaj özelleştirme süreçlerinde güvenlik ve en iyi uygulamaları göz önünde bulundurmak, daha sağlam ve yönetilebilir bir ortam sağlar.

HTTPS ile Güvenli Kayıt Defteri

Üretim ortamlarında veya hassas verilerle çalışırken yerel kayıt defterinizi HTTP yerine HTTPS ile güvence altına almanız şiddetle tavsiye edilir. Bu, iletişim şifrelemesi sağlar ve man-in-the-middle saldırılarını önler. Kendi imzalı sertifikalar (self-signed certificates) oluşturarak veya bir sertifika yetkilisinden (CA) sertifika alarak HTTPS'i etkinleştirebilirsiniz. Bu kurulum biraz daha karmaşık olup sertifika yönetimi ve Podman'ın güvenilen sertifikaları yapılandırmasını gerektirir.

İmaj Güvenliği ve Boyut Optimizasyonu

İmajlarınızın güvenliğini sağlamak için her zaman güvenilir temel imajlar kullanın, gereksiz paketleri ve bağımlılıkları dahil etmeyin, hassas bilgileri (API anahtarları, parolalar) imaj içinde saklamayın ve imajları düzenli olarak güncelleyin. Çok aşamalı derlemeler, imaj boyutunu küçültmek ve nihai imajda gereksiz derleme araçlarını bırakmamak için harika bir yöntemdir.

Rootless Podman Kullanımı

Podman'ın en önemli özelliklerinden biri rootless (köksüz) modda çalışabilmesidir. Bu, konteynerleri root ayrıcalıkları olmadan çalıştırmanıza olanak tanıyarak güvenlik risklerini önemli ölçüde azaltır. Rootless modda kayıt defteri kurmak veya imajları özelleştirmek için tüm Podman komutlarını root kullanıcısı olmadan çalıştırabilirsiniz. Kayıt defteri yapılandırma dosyası $HOME/.config/containers/registries.conf yolunda bulunacaktır.

Sonuç

Bu makalede, Podman kullanarak yerel bir kayıt defterini nasıl kuracağınızı, imajları nasıl itip çekeceğinizi ve Dockerfile aracılığıyla Podman imajlarını nasıl özelleştireceğinizi detaylı bir şekilde öğrendiniz. Yerel bir kayıt defteri, geliştirme ve test süreçlerinizi hızlandırırken, imaj özelleştirme yeteneği uygulamalarınızı spesifik ihtiyaçlarınıza göre uyarlamanızı sağlar. Podman'ın daemon'sız ve rootless mimarisi, bu işlemleri daha güvenli ve verimli hale getirir. Artık kendi konteyner tabanlı geliştirme ortamınızı daha etkin bir şekilde yönetmek için gerekli bilgiye sahipsiniz.

SSS (Sık Sorulan Sorular)

1. Podman yerine Docker kullanabilir miyim?

Evet, bu makalede anlatılan çoğu kavram (yerel kayıt defteri çalıştırma, Dockerfile ile imaj özelleştirme, imaj itme/çekme) Podman ile Docker arasında büyük ölçüde benzerdir. Komutlar genellikle aynıdır veya çok küçük farklılıklar gösterir. Örneğin, podman build yerine docker build kullanmanız yeterlidir.

2. Yerel kayıt defteri neden HTTPS kullanmalı?

HTTPS, ağ üzerinden iletilen verileri şifreleyerek güvenlik sağlar. HTTP kullanıldığında, imajlarınız veya hassas verileriniz ağda dinlenebilir veya değiştirilebilir. Geliştirme ortamında HTTP genellikle kabul edilebilir olsa da, üretim veya hassas verilerin olduğu ortamlarda HTTPS kullanmak kritik öneme sahiptir.

3. Kayıt defterindeki verilerim silinir mi?

Eğer kayıt defteri konteynerini -v (volume) seçeneği olmadan çalıştırırsanız, konteyner silindiğinde içindeki tüm imaj verileri de silinir. Verilerin kalıcı olması için podman volume create komutuyla bir volume oluşturup bu volume'u kayıt defteri konteynerine bağlamanız gerekir.

4. Özelleştirilmiş imajlarımın boyutunu nasıl küçültebilirim?

İmaj boyutunu küçültmek için şunları yapabilirsiniz: daha küçük temel imajlar kullanın (örneğin, alpine veya slim etiketli imajlar), çok aşamalı derlemeler kullanın, gereksiz paketleri ve bağımlılıkları derleme sonrası kaldırın, .dockerignore dosyası ile gereksiz dosyaların imaja kopyalanmasını engelleyin ve RUN komutlarını zincirleyerek katman sayısını azaltın.

5. Podman rootless modda çalışır mı ve bu ne anlama gelir?

Evet, Podman rootless (köksüz) modda çalışabilir. Bu, konteynerleri root ayrıcalıkları olmadan, standart bir kullanıcı olarak çalıştırabileceğiniz anlamına gelir. Bu, güvenlik açısından büyük bir avantajdır çünkü bir konteynerden kaçış durumunda, saldırganın elde edeceği ayrıcalıklar sınırlı olacaktır. Rootless modda çalışırken yapılandırma dosyaları genellikle kullanıcının ev dizinindeki $HOME/.config/containers/ altında bulunur.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık