Podman Compose: Docker Compose’a Köksüz Bir Alternatif
Podman Compose, Docker Compose dosyalarını okuyan ve Podman’ın köksüz, daemon’suz mimarisini kullanarak güvenlik odaklı geliştirme ortamları için çoklu konteynerli uygulamalar çalıştıran Python tabanlı bir araçtır.
Diyelim ki aylarca sorunsuz çalışan bir docker-compose.yml dosyanız var. Ama artık Docker yerine Podman kullanmanız gerekiyor ve dosyayı düzenlemeniz mi yoksa baştan mı başlamanız gerektiğinden emin değilsiniz. Yerel geliştirme ortamınız bu Compose dosyasına bağlı ve tüm kurulumu yeniden inşa etmeye vaktiniz pek yok.
Güzel haber şu ki Podman Compose, mevcut Compose dosyalarını Docker yerine Podman ile çalıştırmanıza izin verir. Compose tanımlarınızı Podman komutlarına çeviren, Python tabanlı bir uyumluluk katmanıdır; böylece alışkın olduğunuz çoklu konteyner iş akışını kullanmaya devam edebilirsiniz.
Bu yazıda, Podman Compose’un ne olduğunu, nasıl kurulduğunu ve onunla ilk çoklu konteynerli uygulamanızı nasıl çalıştıracağınızı göstereceğim. Bu yazıdaki bazı kavramlara yeniyseniz, temelleri kavramak için Containerization and Virtualization Concepts kursumuza kaydolun.
Podman Compose Nedir?
Podman Compose, docker-compose.yml dosyalarınızı okuyan ve bunları Podman komutlarına çeviren Python tabanlı bir araçtır.
Yine standart bir Docker Compose dosyası yazarsınız; servisler, ağlar ve volumelar ile. Podman Compose bu dosyayı ayrıştırır ve konteynerlerinizi başlatmak için eşdeğer podman komutlarını çalıştırır. Yani Compose sözdizimini manuel olarak Podman CLI komutlarına dönüştürmek zorunda kalmazsınız; bu çeviri işini sizin için yapar.
Şunu belirtmek önemli: Podman Compose, Docker Compose için birebir bir ikame değil.
Bu bir uyumluluk katmanıdır. Bazı Docker Compose özellikleri kutudan çıkar çalışır, bazıları ayarlama ister, birkaçı ise hiç çalışmaz. Araç uyumluluğa odaklanır, ancak Docker Compose’un tüm davranışlarını bire bir kopyalamaz.
Bunu başka bir açıdan düşünelim: Docker Compose, doğrudan Docker daemon’ı ile konuşur. Podman Compose ise Podman CLI’ı ile konuşur; CLI da daemonsuz bir şekilde konteynerleri yönetir. Sonuç benzer görünse de, alttaki mekanikler farklıdır.
Bu da mevcut Compose dosyalarınızın büyük bölümünü yeniden kullanabileceğiniz, ancak farklılıkların nerede ortaya çıktığını anlamanız gerektiği anlamına gelir.
Neden Podman Compose Kullanılır?
Podman Compose, Docker kurmadan çoklu konteynerli uygulamalar çalıştırmanıza olanak tanır.
Docker ile karşılaştırıldığında, varsayılan olarak köksüz konteynerler elde edersiniz. Podman, kök yetkileri gerektirmeden konteyner çalıştırır. Basit bir ifadeyle, bir konteyner tehlikeye girerse risk daha azdır. Docker, üstünde köksüz konteynerler çalıştırsanız bile daemon’ın kök yetkileriyle çalışmasını gerektirir.
Bu, Podman Compose’u güvenliğe odaklı ortamlar için daha uygun kılar. Sıkı önlemlerle kilitlenmiş Linux sunucularında çalışıyorsanız ya da kök düzeyinde bir daemon çalıştırmanın izinli olmadığı ortamlarda bulunuyorsanız, Podman Compose ihtiyaç duyduğunuz çoklu konteyner iş akışını sağlar.
Geliştirme ve test için de kullanışlıdır. Yerel ortamları hızlıca ayağa kaldırabilir, konteyner yapılandırmalarını test edebilir ve Compose dosyalarınızı Docker kurmadan doğrulayabilirsiniz. Tam orkestrasyona ihtiyacınız olmadığı hafif kurulumlar için idealdir.
Ancak Podman Compose her durum için ideal değildir.
Ölçekte üretim işyükleri çalıştırıyorsanız, bunun yerine Kubernetes veya Docker Swarm isteyeceksiniz. Podman Compose’un macOS ve Windows’ta Linux’a kıyasla desteği daha zayıftır; çapraz platform geliştirme deneyiminiz o kadar akıcı olmaz. Ayrıca ekibiniz Docker ekosistemine özel eklentiler ve araçlar ile zaten yatırım yapmışsa, Podman Compose’a geçmek bu iş akışının bazı parçalarını yeniden inşa etmek anlamına gelir.
Özetle, köksüz konteynerlere, güvenlik öncelikli ortamlara veya Docker’sız bir geliştirme kurulumuna ihtiyaç duyduğunuzda Podman Compose’u kullanın.
Podman Compose’un Kurulumu
Podman Compose, Podman’ın yerel olarak çalıştığı Linux’ta en iyi çalışır.
macOS ve Windows’a da kurabilirsiniz, ancak önce Podman’ı bir sanal makine içinde çalıştırmanız gerekir. Bu, karışıklık katar ve Linux deneyimi kadar akıcı değildir. macOS veya Windows’ta ekstra kurulum adımları ve olası ağ tuhaflıkları bekleyin.
Linux’ta kurulum
Podman Compose’u kurmanın en kolay yolu pip üzerindendir.
Paket yöneticisi sürümleri genellikle PyPI’nin gerisinde kalır; bu nedenle en yeni özellikleri hemen alamayabilirsiniz.
macOS ve Windows’ta kurulum
macOS ve Windows’ta önce Podman Desktop’ı kurmanız veya bir Linux VM oluşturmak için podman machine kullanmanız gerekir. Bu çalışır duruma geldikten sonra, Podman Compose’u bu ortam içinde pip ile kurun.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return{"message":"Hello from FastAPI"}
@app.get("/health")
def health_check():
return{"status":"healthy"}Altyapı:
Docker Compose’un çoğu özelliği Podman Compose ile kutudan çıkar çalışır. Buna şunlar dahildir:
Görüntü çekme ve konteyner oluşturma
Port eşleme
Volume bağlamaları (adlandırılmış volumelar ve bind mount’lar)
Çevre değişkenleri
Servisler arası temel ağ iletişimi
Ancak bazı özellikler ayarlama ister. Compose dosyanız Docker’a özgü eklentiler, özel ağ sürücüleri veya ileri düzey build argümanları kullanıyorsa, bu bölümleri muhtemelen değiştirmeniz gerekir.
Podman Compose ağ yönetimini de farklı ele alır — servisler, Docker Compose’ta olduğu gibi birbirlerini otomatik olarak servis adıyla çözümlemez.
Temel Podman Compose komutları
Servislerinizi artık şu komutla başlatabilirsiniz:
Bu komut görüntüleri çeker, konteynerleri oluşturur ve Compose dosyanızda tanımlanan her şeyi başlatır. Günlüklerin terminalinize akmasını istemiyorsanız -d ile ayrık modda çalıştırın.
Podman çıktısı
Artık uygulamayı makinenizde (veya benim kullandığım gibi uzak bir Ubuntu sunucusunda) 8000 numaralı porttan açabilirsiniz. Şunu göreceksiniz:
Podman üzerinden çalışan FastAPI uygulaması
Çalışan servisleri durdurmak için şunu çalıştırın:
Komutlar Docker Compose sözdizimini yansıtır; bu nedenle docker-compose ile zaten aşinaysanız kendinizi yabancı hissetmezsiniz.
Podman Compose vs. Docker Compose ve Diğerleri
Podman Compose ve Docker Compose aynı amaca yönelir, ancak alt yapıda farklı çalışır. Nasıl olduğunu açıklayayım.
Köksüz çalışma
Docker Compose, kök olarak çalışan Docker daemon’ı gerektirir. Köksüz konteynerleri yapsanız bile, daemon’ın kendisi yetkili çalışmak zorundadır. Podman Compose ise varsayılan olarak tamamen kök erişimi olmadan çalışır. Konteynerleriniz bir sistem servisi olarak değil, kullanıcınız olarak başlar; bu da süldurma yüzeyini azaltır ve Podman Compose’u çok kullanıcılı ortamlarda daha güvenli kılar.
Ağ davranışı
Docker Compose, servisleriniz için varsayılan bir bridge ağı oluşturur. Konteynerler birbirlerine otomatik olarak servis adıyla erişir.
Podman Compose bunun yerine pod tabanlı ağ yönetimi kullanır. Compose dosyanızdaki tüm konteynerler tek bir Podman pod’u içinde gruplanır ve aynı ağ ad alanını paylaşır. Bu, konteynerlerin servis adları yerine localhost üzerinden iletişim kurduğu anlamına gelir; bu da Docker kullanıcılarını şaşırtabilir.
Uygulamanızın db:5432 adresindeki bir veritabanına erişmesini bekliyorsanız, Podman Compose ile çalıştırırken bunu localhost:5432 olarak değiştirmeniz gerekir.
Pod tabanlı gruplama
Docker Compose bireysel konteynerleri yönetir. Podman Compose ise konteynerlerin ağı paylaştığı ve depolamayı paylaşabileceği Kubernetes esinli bir gruplama olan pod oluşturur. Bu pod modeli, Podman Compose’u Kubernetes kalıplarıyla hizalar ve ihtiyaç duyarsanız işyüklerini daha sonra orkestrasyona taşımayı kolaylaştırır.
systemd entegrasyonu
Podman, konteynerleri sistem servisleri olarak yönetmek için systemd ile entegre olur. Çalışan konteynerlerden systemd birim dosyaları üretebilir ve bunları diğer Linux servisleri gibi yönetebilirsiniz. Docker, konteyner seviyesinde yerel systemd entegrasyonu sunmaz.
Diğer seçenekler
Podman Compose ihtiyaçlarınıza uymuyorsa şu alternatifleriniz var:
Yerel Podman + systemd ile hiç Compose dosyası kullanmadan konteynerleri servis olarak yönetebilirsiniz
Kubernetes, ölçekte üretim işyükleri çalıştırıyorsanız tam orkestrasyon sağlar; ancak Compose tarzı araçlara göre çok daha ağırdır
Podman Compose, basit konteyner komutları ile tam orkestrasyon arasında bir yerde konumlanır. Docker’ın daemon gereksinimi olmadan çoklu konteyner iş akışları sunar.
Podman Compose’da Ağ ve Volumelar (Farklı Olanlar)
Docker’dan Podman Compose’a geçenler genellikle iki şeyden yakınır: ağ ve volumelar. Bu bölümde farklılıkları ele alacağım.
Servisten servise iletişim
Docker Compose’ta diğer servislere servis adlarıyla bağlanırsınız. Bir web servisi ve db adlı bir veritabanı servisi varsa, uygulamanız db:5432 adresine bağlanır.
Podman Compose tüm servisleri tek bir pod içine koyar. Aynı poddaki konteynerler ağ ad alanını paylaşır; bu da hepsinin localhost kullandığı anlamına gelir. Veritabanı bağlantı dizgeniz db:5432 yerine localhost:5432 olarak değişir.
Bu durum sıkça gafil avlar. Uygulamanız başlar, db:5432 adresine bağlanmaya çalışır ve bu ana makine adı çözülemediğinden başarısız olur. Bağlantı dizgelerinizi veya çevre değişkenlerinizi localhost kullanacak şekilde güncellemeniz gerekir.
Varsayılan ağlar
Docker Compose, servisleriniz için bir bridge ağı oluşturur. Her konteyner bu ağda kendi IP adresini alır ve Docker’ın DNS çözücüsü servis adı sorgularlarını yönetir.
Podman Compose varsayılan olarak ayrı ağlar oluşturmaz. Pod modeli, ağı daha alt seviyede paylaşmak anlamına gelir. Compose dosyanızda özel ağlar tanımlarsanız Podman Compose bunları oluşturmaya çalışır; ancak davranış Docker ile bire bir eşleşmez.
Volume ve bind mount davranışı
Volumelar ve bind mount’lar Docker Compose ile Podman Compose arasında büyük ölçüde aynı çalışır. Bunları Compose dosyanızda tanımlarsınız, Podman da oluşturur.
Ancak izinlerle ilgili bir ayrıntı var.
Podman varsayılan olarak köksüz çalıştığı için dosya sahipliği ve izinleri farklı davranabilir. Docker’da sorunsuz çalışan bir bind mount, Podman’da izin hataları verebilir; çünkü konteyner kullanıcısı, ana makinenizdeki kullanıcınızın UID’iyle eşleşmez.
Volume konumlarının da farklı olduğunu göreceksiniz. Docker volumelarını /var/lib/docker/volumes/altında tutarken, Podman köksüz konteynerler için bunları ~/.local/share/containers/storage/volumes/ altında saklar.
Ne olup bittiğini bildiğinizde düzeltmeler kolaydır. Ağ için bağlantı dizgelerini ayarlayın ve volume sorunlarında dosya izinlerini kontrol edin.
Yaygın Kısıtlar ve Tuzaklar
Podman Compose, temel çoklu konteyner kurulumları için iyi çalışır; ancak bağlanmadan önce bilmeniz gereken kısıtları vardır.
Desteklenmeyen Compose özellikleri
Her Docker Compose özelliği Podman Compose’a bire bir çevrilmez. Karmaşık argümanlı build bağlamları sık sık başarısız olur veya farklı davranır. Docker Compose eklentileri ve uzantıları hiç çalışmaz. GPU aktarımı, ileri düzey sağlık kontrolleri ve bazı ağ modları gibi özellikler ya çalışmaz ya da geçici çözümler ister.
Compose dosyanız docker-compose.yml 3.x sürümlerinin özelliklerini yoğun kullanıyorsa, biraz deneme-yanılma bekleyin.
Docker’dan farklı ağ beklentileri
Servisler, servis adlarıyla değil localhost ile iletişim kurar. Bu da bağlantı dizgelerinde servis adlarını sabitleyen uygulamaları bozar.
Özel bridge ağları Docker ile aynı davranmaz. Pod modelinden dolayı DNS çözümlenmesi farklıdır.
Podman’ın ağ modeline uyacak şekilde yapılandırmaları ve çevre değişkenlerini güncellemeye biraz zaman ayırmayı bekleyin; ancak bu bir kerelik bir iştir.
macOS/Windows’ta platform kısıtları
Podman Compose, Linux’ta en iyi çalışır. macOS ve Windows’ta her şeyi bir Linux VM içinde çalıştırırsınız; bu da ek katmanlar demektir. Ana makine ile VM arası dosya eşitleme daha yavaş olabilir. Ana makine ile konteynerler arası ağ için ekstra yapılandırma gerekir.
Ekibiniz geliştirme için macOS veya Windows kullanıyorsa, Docker Compose genellikle daha akıcı bir seçenektir.
Araç olgunluğu ve ekosistem açıkları
Podman Compose, Docker Compose’dan daha yenidir. Topluluk daha küçüktür; bu nedenle spesifik sorunlara yanıt bulmak daha fazla araştırma gerektirir. Üçüncü taraf araçlar ve entegrasyonlar önce Docker, sonra (varsa) Podman için inşa edilir. IDE desteği ve GUI araç Docker ekosisteminin gerisindedir.
Podman Compose sorunları için bu kadar çok Stack Overflow yanıtı veya GitHub konusu bulamazsınız.
Bu kısıtlar Podman Compose’u kullanılamaz kılmaz; ancak geçmeden önce düşünmeniz gereken noktalarıdır. Docker Compose kullanıcıları bu sürtünmelere hiç maruz kalmaz.
Podman Compose Kullanımı için En İyi Uygulamalar
En yaygın Podman Compose sorunlarından nasıl kaçınacağınız burada.
Basit Compose dosyalarıyla başlayın. En karmaşık Docker kurulumunuzu ilk taşımayın. Tek servisli bir uygulamayla başlayın, çalıştığını doğrulayın, sonra kademeli olarak ekleyin. Bu sayede sorunları ortaya çıktıkça izole edebilirsiniz.
Köksüz ağ iletişimini erken test edin. Birden çok servisli bir uygulamayı ayağa kaldırın ve konteynerlerin localhost üzerinden iletişim kurabildiğini doğrulayın. Bağlantı dizgelerinizi servis adlarından localhost üzerine taşıyın. Ağ beklediğiniz gibi çalışmazsa hemen anlarsınız.
Volumelar ve portlarda açık olun. Varsayılanlara güvenmeyin. Bind mount’lar için tam yollar belirtin. Port eşlemelerini tanımlayın. Ana makine dizinlerini bağlıyorsanız dosya izinlerini açıkça ayarlayın. Podman’ın köksüz modeli, Docker’da çalışan varsayımların burada başarısız olabileceği anlamına gelir.
Podman Compose’u ağırlıklı olarak geliştirme ve hafif üretim için kullanın. Yerel geliştirme ortamları ve küçük kurulumlarda işini iyi yapar. Ölçekte üretim için Kubernetes veya başka bir orkestrasyon platformu isteyeceksiniz. Podman Compose, yüksek erişilebilirlikli kümeler veya karmaşık servis mesh’leri için tasarlanmamıştır.
Sonuç
Podman Compose, Docker yerine Podman ile çoklu konteynerli uygulamalar çalıştırmanın pratik bir yolunu sunar. Mevcut Compose dosyalarınızı okur ve bunları Podman komutlarına çevirir; böylece tamamen yeni bir iş akışı öğrenmeniz gerekmez. Ancak Docker Compose’un mükemmel bir kopyası değildir. Ağ yönetimi farklı çalışır, bazı özellikler desteklenmez ve Podman’ın pod tabanlı modeline uyacak şekilde bağlantı dizgeleri ile yapılandırmaları ayarlamanız gerekir.
Son olarak, mimari yaklaşımları ve uyumlulukları hakkında daha fazla bilgi edinmek için Docker ve Podman arası farkları okumanızı öneririm.
Hırvatistan merkezli Kıdemli Veri Bilimci. 700’ün üzerinde yayımlanmış makaleyle 10 M+ görüntüleme elde eden, önde gelen bir teknoloji yazarı. TPOT ile Makine Öğrenimi Otomasyonu kitabının yazarı.
Docker Compose SSS
Podman Compose nedir?⌄
Podman Compose, Docker Compose dosyalarını okuyan ve bunları Podman komutlarına çeviren Python tabanlı bir araçtır. Bir daemon veya kök yetkileri gerektirmeden, Docker yerine Podman kullanarak çoklu konteynerli uygulamalar çalıştırmanıza olanak tanır ve aynı Compose iş akışını sunar.
Docker Compose dosyalarını Podman Compose ile kullanabilir miyim?⌄
Evet, Podman Compose standart docker-compose.yml dosyalarını okur. Docker’ın temel özelliklerinin çoğu kutudan çıkar çalışır; ancak Podman’ın pod tabanlı ağ modelinden dolayı bağlantı dizgelerini servis adlarından localhost’a çevirmek gerekir.
Podman Compose ile Docker Compose arasındaki temel fark nedir?⌄
Podman Compose varsayılan olarak köksüz çalışır ve bir daemon gerektirmez; Docker Compose ise kök olarak çalışan Docker daemon’ına ihtiyaç duyar. Podman Compose, konteynerlerin localhost paylaştığı pod tabanlı bir ağ kullanırken, Docker Compose her servise ayrı bir ana makine adı sağlar.
Podman Compose kullanırken servislerim neden bağlantı kuramıyor?⌄
Podman Compose, tüm servisleri aynı ağ ad alanını paylaşan tek bir pod içine koyar; bu yüzden konteynerler servis adları yerine localhost üzerinden iletişim kurar. Uygulama yapılandırmalarınızda db:5432 gibi dizgeleri localhost:5432 olarak değiştirmeniz gerekir.
Podman Compose macOS ve Windows’ta çalışır mı?⌄
Evet, ancak önce Podman Desktop veya podman machine ile Podman’ı bir Linux VM içinde çalıştırmanız gerekir. Bu durum Linux’a göre daha karmaşıktır ve daha yavaş dosya eşitleme ile bazı ağ tuhaflıklarına yol açabilir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Diyelim ki aylarca sorunsuz çalışan bir
docker-compose.ymldosyanız var. Ama artık Docker yerine Podman kullanmanız gerekiyor ve dosyayı düzenlemeniz mi yoksa baştan mı başlamanız gerektiğinden emin değilsiniz. Yerel geliştirme ortamınız bu Compose dosyasına bağlı ve tüm kurulumu yeniden inşa etmeye vaktiniz pek yok.Güzel haber şu ki Podman Compose, mevcut Compose dosyalarını Docker yerine Podman ile çalıştırmanıza izin verir. Compose tanımlarınızı Podman komutlarına çeviren, Python tabanlı bir uyumluluk katmanıdır; böylece alışkın olduğunuz çoklu konteyner iş akışını kullanmaya devam edebilirsiniz.
Bu yazıda, Podman Compose’un ne olduğunu, nasıl kurulduğunu ve onunla ilk çoklu konteynerli uygulamanızı nasıl çalıştıracağınızı göstereceğim. Bu yazıdaki bazı kavramlara yeniyseniz, temelleri kavramak için Containerization and Virtualization Concepts kursumuza kaydolun.
Podman Compose Nedir?
Podman Compose,
docker-compose.ymldosyalarınızı okuyan ve bunları Podman komutlarına çeviren Python tabanlı bir araçtır.Yine standart bir Docker Compose dosyası yazarsınız; servisler, ağlar ve volumelar ile. Podman Compose bu dosyayı ayrıştırır ve konteynerlerinizi başlatmak için eşdeğer
podmankomutlarını çalıştırır. Yani Compose sözdizimini manuel olarak Podman CLI komutlarına dönüştürmek zorunda kalmazsınız; bu çeviri işini sizin için yapar.Şunu belirtmek önemli: Podman Compose, Docker Compose için birebir bir ikame değil.
Bu bir uyumluluk katmanıdır. Bazı Docker Compose özellikleri kutudan çıkar çalışır, bazıları ayarlama ister, birkaçı ise hiç çalışmaz. Araç uyumluluğa odaklanır, ancak Docker Compose’un tüm davranışlarını bire bir kopyalamaz.
Bunu başka bir açıdan düşünelim: Docker Compose, doğrudan Docker daemon’ı ile konuşur. Podman Compose ise Podman CLI’ı ile konuşur; CLI da daemonsuz bir şekilde konteynerleri yönetir. Sonuç benzer görünse de, alttaki mekanikler farklıdır.
Bu da mevcut Compose dosyalarınızın büyük bölümünü yeniden kullanabileceğiniz, ancak farklılıkların nerede ortaya çıktığını anlamanız gerektiği anlamına gelir.
Neden Podman Compose Kullanılır?
Podman Compose, Docker kurmadan çoklu konteynerli uygulamalar çalıştırmanıza olanak tanır.
Docker ile karşılaştırıldığında, varsayılan olarak köksüz konteynerler elde edersiniz. Podman, kök yetkileri gerektirmeden konteyner çalıştırır. Basit bir ifadeyle, bir konteyner tehlikeye girerse risk daha azdır. Docker, üstünde köksüz konteynerler çalıştırsanız bile daemon’ın kök yetkileriyle çalışmasını gerektirir.
Bu, Podman Compose’u güvenliğe odaklı ortamlar için daha uygun kılar. Sıkı önlemlerle kilitlenmiş Linux sunucularında çalışıyorsanız ya da kök düzeyinde bir daemon çalıştırmanın izinli olmadığı ortamlarda bulunuyorsanız, Podman Compose ihtiyaç duyduğunuz çoklu konteyner iş akışını sağlar.
Geliştirme ve test için de kullanışlıdır. Yerel ortamları hızlıca ayağa kaldırabilir, konteyner yapılandırmalarını test edebilir ve Compose dosyalarınızı Docker kurmadan doğrulayabilirsiniz. Tam orkestrasyona ihtiyacınız olmadığı hafif kurulumlar için idealdir.
Ancak Podman Compose her durum için ideal değildir.
Ölçekte üretim işyükleri çalıştırıyorsanız, bunun yerine Kubernetes veya Docker Swarm isteyeceksiniz. Podman Compose’un macOS ve Windows’ta Linux’a kıyasla desteği daha zayıftır; çapraz platform geliştirme deneyiminiz o kadar akıcı olmaz. Ayrıca ekibiniz Docker ekosistemine özel eklentiler ve araçlar ile zaten yatırım yapmışsa, Podman Compose’a geçmek bu iş akışının bazı parçalarını yeniden inşa etmek anlamına gelir.
Özetle, köksüz konteynerlere, güvenlik öncelikli ortamlara veya Docker’sız bir geliştirme kurulumuna ihtiyaç duyduğunuzda Podman Compose’u kullanın.
Podman Compose’un Kurulumu
Podman Compose, Podman’ın yerel olarak çalıştığı Linux’ta en iyi çalışır.
macOS ve Windows’a da kurabilirsiniz, ancak önce Podman’ı bir sanal makine içinde çalıştırmanız gerekir. Bu, karışıklık katar ve Linux deneyimi kadar akıcı değildir. macOS veya Windows’ta ekstra kurulum adımları ve olası ağ tuhaflıkları bekleyin.
Linux’ta kurulum
Podman Compose’u kurmanın en kolay yolu
pipüzerindendir.Linux’ta Podman Compose kurulumu
Bu işlem, PyPI’den en güncel sürümü kurar. Python sürüm yönetimiyle uğraşmanıza gerek yok — Python 3 kuruluysa hazırsınız.
Bazı Linux dağıtımları Podman Compose’u kendi depolarında da sağlar. Fedora, RHEL ve CentOS’ta şunu kullanabilirsiniz:
Ubuntu ve Debian tabanlı sistemlerde şu komutu çalıştırın:
Paket yöneticisi sürümleri genellikle PyPI’nin gerisinde kalır; bu nedenle en yeni özellikleri hemen alamayabilirsiniz.
macOS ve Windows’ta kurulum
macOS ve Windows’ta önce Podman Desktop’ı kurmanız veya bir Linux VM oluşturmak için
podman machinekullanmanız gerekir. Bu çalışır duruma geldikten sonra, Podman Compose’u bu ortam içindepipile kurun.Yani ilk adım makineye bağlanmaktır:
Podman VM’e SSH ile bağlanma
VM Fedora tabanlı olduğu için, Podman Compose’u kurmak için şu komutu çalıştırabilirsiniz:
Podman Compose kurulumu
Bu iki aşamalı süreç, Podman Compose’u doğrudan ana işletim sisteminizde değil, Podman’ın oluşturduğu Linux VM içinde çalıştırdığınız anlamına gelir.
Kurulumu doğrulama
Podman Compose’un doğru kurulduğunu kontrol etmek için bu komutu çalıştırın:
Podman Compose kurulumunu doğrulama
Terminalde sürüm numarasını görmelisiniz. "command not found" hatası alırsanız, Python
bindizininizin PATH’inizde olduğundan emin olun.Podman Compose’u kullanmaya başlamak için gerekenler bu kadar.
Podman Compose ile Bir Compose Dosyasını Çalıştırma
Podman Compose’u kurdunuz — şimdi gerçek bir uygulamayı nasıl çalıştıracağınızı göstereyim.
Mevcut bir Docker Compose dosyasını kullanma
Podman Compose, standart
docker-compose.ymldosyalarını okur. Hiçbir şeyi yeniden adlandırmanıza veya biçimi değiştirmenize gerek yok.İşte bir Compose dosyasında tanımlı basit bir FastAPI uygulaması:
Uygulama kodu da
src/main.pyiçinde:Docker Compose’un çoğu özelliği Podman Compose ile kutudan çıkar çalışır. Buna şunlar dahildir:
Ancak bazı özellikler ayarlama ister. Compose dosyanız Docker’a özgü eklentiler, özel ağ sürücüleri veya ileri düzey build argümanları kullanıyorsa, bu bölümleri muhtemelen değiştirmeniz gerekir.
Podman Compose ağ yönetimini de farklı ele alır — servisler, Docker Compose’ta olduğu gibi birbirlerini otomatik olarak servis adıyla çözümlemez.
Temel Podman Compose komutları
Servislerinizi artık şu komutla başlatabilirsiniz:
Bu komut görüntüleri çeker, konteynerleri oluşturur ve Compose dosyanızda tanımlanan her şeyi başlatır. Günlüklerin terminalinize akmasını istemiyorsanız
-dile ayrık modda çalıştırın.Podman çıktısı
Artık uygulamayı makinenizde (veya benim kullandığım gibi uzak bir Ubuntu sunucusunda) 8000 numaralı porttan açabilirsiniz. Şunu göreceksiniz:
Podman üzerinden çalışan FastAPI uygulaması
Çalışan servisleri durdurmak için şunu çalıştırın:
Bu işlem konteynerleri durdurur ve kaldırır. Volumelar, onları da kaldırmak için
--volumeseklemediğiniz sürece kalıcıdır.Servis günlüklerinizi görmek için şu komutu çalıştırın:
Gerçek zamanlı günlük takibi için
-fekleyin veya yalnızca belirli bir konteynerin günlüklerini görmek için bir servis adı belirtin.Konteynerler, ağlar ve volumelar dahil her şeyi temizlemek için şunu çalıştırın:
Komutlar Docker Compose sözdizimini yansıtır; bu nedenle
docker-composeile zaten aşinaysanız kendinizi yabancı hissetmezsiniz.Podman Compose vs. Docker Compose ve Diğerleri
Podman Compose ve Docker Compose aynı amaca yönelir, ancak alt yapıda farklı çalışır. Nasıl olduğunu açıklayayım.
Köksüz çalışma
Docker Compose, kök olarak çalışan Docker daemon’ı gerektirir. Köksüz konteynerleri yapsanız bile, daemon’ın kendisi yetkili çalışmak zorundadır. Podman Compose ise varsayılan olarak tamamen kök erişimi olmadan çalışır. Konteynerleriniz bir sistem servisi olarak değil, kullanıcınız olarak başlar; bu da süldurma yüzeyini azaltır ve Podman Compose’u çok kullanıcılı ortamlarda daha güvenli kılar.
Ağ davranışı
Docker Compose, servisleriniz için varsayılan bir bridge ağı oluşturur. Konteynerler birbirlerine otomatik olarak servis adıyla erişir.
Podman Compose bunun yerine pod tabanlı ağ yönetimi kullanır. Compose dosyanızdaki tüm konteynerler tek bir Podman pod’u içinde gruplanır ve aynı ağ ad alanını paylaşır. Bu, konteynerlerin servis adları yerine
localhostüzerinden iletişim kurduğu anlamına gelir; bu da Docker kullanıcılarını şaşırtabilir.Uygulamanızın
db:5432adresindeki bir veritabanına erişmesini bekliyorsanız, Podman Compose ile çalıştırırken bunulocalhost:5432olarak değiştirmeniz gerekir.Pod tabanlı gruplama
Docker Compose bireysel konteynerleri yönetir. Podman Compose ise konteynerlerin ağı paylaştığı ve depolamayı paylaşabileceği Kubernetes esinli bir gruplama olan pod oluşturur. Bu pod modeli, Podman Compose’u Kubernetes kalıplarıyla hizalar ve ihtiyaç duyarsanız işyüklerini daha sonra orkestrasyona taşımayı kolaylaştırır.
systemd entegrasyonu
Podman, konteynerleri sistem servisleri olarak yönetmek için systemd ile entegre olur. Çalışan konteynerlerden systemd birim dosyaları üretebilir ve bunları diğer Linux servisleri gibi yönetebilirsiniz. Docker, konteyner seviyesinde yerel systemd entegrasyonu sunmaz.
Diğer seçenekler
Podman Compose ihtiyaçlarınıza uymuyorsa şu alternatifleriniz var:
Podman Compose, basit konteyner komutları ile tam orkestrasyon arasında bir yerde konumlanır. Docker’ın daemon gereksinimi olmadan çoklu konteyner iş akışları sunar.
Podman Compose’da Ağ ve Volumelar (Farklı Olanlar)
Docker’dan Podman Compose’a geçenler genellikle iki şeyden yakınır: ağ ve volumelar. Bu bölümde farklılıkları ele alacağım.
Servisten servise iletişim
Docker Compose’ta diğer servislere servis adlarıyla bağlanırsınız. Bir web servisi ve
dbadlı bir veritabanı servisi varsa, uygulamanızdb:5432adresine bağlanır.Podman Compose tüm servisleri tek bir pod içine koyar. Aynı poddaki konteynerler ağ ad alanını paylaşır; bu da hepsinin
localhostkullandığı anlamına gelir. Veritabanı bağlantı dizgenizdb:5432yerinelocalhost:5432olarak değişir.Bu durum sıkça gafil avlar. Uygulamanız başlar,
db:5432adresine bağlanmaya çalışır ve bu ana makine adı çözülemediğinden başarısız olur. Bağlantı dizgelerinizi veya çevre değişkenlerinizilocalhostkullanacak şekilde güncellemeniz gerekir.Varsayılan ağlar
Docker Compose, servisleriniz için bir bridge ağı oluşturur. Her konteyner bu ağda kendi IP adresini alır ve Docker’ın DNS çözücüsü servis adı sorgularlarını yönetir.
Podman Compose varsayılan olarak ayrı ağlar oluşturmaz. Pod modeli, ağı daha alt seviyede paylaşmak anlamına gelir. Compose dosyanızda özel ağlar tanımlarsanız Podman Compose bunları oluşturmaya çalışır; ancak davranış Docker ile bire bir eşleşmez.
Volume ve bind mount davranışı
Volumelar ve bind mount’lar Docker Compose ile Podman Compose arasında büyük ölçüde aynı çalışır. Bunları Compose dosyanızda tanımlarsınız, Podman da oluşturur.
Ancak izinlerle ilgili bir ayrıntı var.
Podman varsayılan olarak köksüz çalıştığı için dosya sahipliği ve izinleri farklı davranabilir. Docker’da sorunsuz çalışan bir bind mount, Podman’da izin hataları verebilir; çünkü konteyner kullanıcısı, ana makinenizdeki kullanıcınızın UID’iyle eşleşmez.
Volume konumlarının da farklı olduğunu göreceksiniz. Docker volumelarını
/var/lib/docker/volumes/altında tutarken, Podman köksüz konteynerler için bunları~/.local/share/containers/storage/volumes/altında saklar.Ne olup bittiğini bildiğinizde düzeltmeler kolaydır. Ağ için bağlantı dizgelerini ayarlayın ve volume sorunlarında dosya izinlerini kontrol edin.
Yaygın Kısıtlar ve Tuzaklar
Podman Compose, temel çoklu konteyner kurulumları için iyi çalışır; ancak bağlanmadan önce bilmeniz gereken kısıtları vardır.
Desteklenmeyen Compose özellikleri
Her Docker Compose özelliği Podman Compose’a bire bir çevrilmez. Karmaşık argümanlı build bağlamları sık sık başarısız olur veya farklı davranır. Docker Compose eklentileri ve uzantıları hiç çalışmaz. GPU aktarımı, ileri düzey sağlık kontrolleri ve bazı ağ modları gibi özellikler ya çalışmaz ya da geçici çözümler ister.
Compose dosyanız
docker-compose.yml3.x sürümlerinin özelliklerini yoğun kullanıyorsa, biraz deneme-yanılma bekleyin.Docker’dan farklı ağ beklentileri
Servisler, servis adlarıyla değil
localhostile iletişim kurar. Bu da bağlantı dizgelerinde servis adlarını sabitleyen uygulamaları bozar.Özel bridge ağları Docker ile aynı davranmaz. Pod modelinden dolayı DNS çözümlenmesi farklıdır.
Podman’ın ağ modeline uyacak şekilde yapılandırmaları ve çevre değişkenlerini güncellemeye biraz zaman ayırmayı bekleyin; ancak bu bir kerelik bir iştir.
macOS/Windows’ta platform kısıtları
Podman Compose, Linux’ta en iyi çalışır. macOS ve Windows’ta her şeyi bir Linux VM içinde çalıştırırsınız; bu da ek katmanlar demektir. Ana makine ile VM arası dosya eşitleme daha yavaş olabilir. Ana makine ile konteynerler arası ağ için ekstra yapılandırma gerekir.
Ekibiniz geliştirme için macOS veya Windows kullanıyorsa, Docker Compose genellikle daha akıcı bir seçenektir.
Araç olgunluğu ve ekosistem açıkları
Podman Compose, Docker Compose’dan daha yenidir. Topluluk daha küçüktür; bu nedenle spesifik sorunlara yanıt bulmak daha fazla araştırma gerektirir. Üçüncü taraf araçlar ve entegrasyonlar önce Docker, sonra (varsa) Podman için inşa edilir. IDE desteği ve GUI araç Docker ekosisteminin gerisindedir.
Podman Compose sorunları için bu kadar çok Stack Overflow yanıtı veya GitHub konusu bulamazsınız.
Bu kısıtlar Podman Compose’u kullanılamaz kılmaz; ancak geçmeden önce düşünmeniz gereken noktalarıdır. Docker Compose kullanıcıları bu sürtünmelere hiç maruz kalmaz.
Podman Compose Kullanımı için En İyi Uygulamalar
En yaygın Podman Compose sorunlarından nasıl kaçınacağınız burada.
Basit Compose dosyalarıyla başlayın. En karmaşık Docker kurulumunuzu ilk taşımayın. Tek servisli bir uygulamayla başlayın, çalıştığını doğrulayın, sonra kademeli olarak ekleyin. Bu sayede sorunları ortaya çıktıkça izole edebilirsiniz.
Köksüz ağ iletişimini erken test edin. Birden çok servisli bir uygulamayı ayağa kaldırın ve konteynerlerin
localhostüzerinden iletişim kurabildiğini doğrulayın. Bağlantı dizgelerinizi servis adlarındanlocalhostüzerine taşıyın. Ağ beklediğiniz gibi çalışmazsa hemen anlarsınız.Volumelar ve portlarda açık olun. Varsayılanlara güvenmeyin. Bind mount’lar için tam yollar belirtin. Port eşlemelerini tanımlayın. Ana makine dizinlerini bağlıyorsanız dosya izinlerini açıkça ayarlayın. Podman’ın köksüz modeli, Docker’da çalışan varsayımların burada başarısız olabileceği anlamına gelir.
Podman Compose’u ağırlıklı olarak geliştirme ve hafif üretim için kullanın. Yerel geliştirme ortamları ve küçük kurulumlarda işini iyi yapar. Ölçekte üretim için Kubernetes veya başka bir orkestrasyon platformu isteyeceksiniz. Podman Compose, yüksek erişilebilirlikli kümeler veya karmaşık servis mesh’leri için tasarlanmamıştır.
Sonuç
Podman Compose, Docker yerine Podman ile çoklu konteynerli uygulamalar çalıştırmanın pratik bir yolunu sunar. Mevcut Compose dosyalarınızı okur ve bunları Podman komutlarına çevirir; böylece tamamen yeni bir iş akışı öğrenmeniz gerekmez. Ancak Docker Compose’un mükemmel bir kopyası değildir. Ağ yönetimi farklı çalışır, bazı özellikler desteklenmez ve Podman’ın pod tabanlı modeline uyacak şekilde bağlantı dizgeleri ile yapılandırmaları ayarlamanız gerekir.
Son olarak, mimari yaklaşımları ve uyumlulukları hakkında daha fazla bilgi edinmek için Docker ve Podman arası farkları okumanızı öneririm.