Podman ve Docker: Hangisini Seçmeli?

Yayınlanan: 2022-11-23

Sanallaştırma ve konteynerleştirme dünyasındaysanız, muhtemelen Podman ve Docker ile karşılaşmışsınızdır ve bunların birbirlerinden nasıl farklı olduklarını merak ediyor olabilirsiniz.

Bu yazıda Docker ve Podman arasındaki farkları inceleyeceğiz ve hangisinin sizin için doğru seçim olacağını bulmaya çalışacağız!

Liman işçisi

liman işçisi

Docker, bir projede her düzeyde (geliştirme ve devreye alma) bağımlılık yönetimini kolaylaştıran bir konteynerleştirme teknolojisidir.

Linux, Windows ve Mac OS'de bulunan Docker'ın mekanizması, kapsayıcılar ve bunların orkestrasyonu etrafında toplanıyor ve kapsayıcılığın sanallaştırmadan farkı burada.

Docker'ın iki ana yapı taşı vardır: Docker CLI ve Docker Daemon.

Docker Arka Plan Programı:

Docker görüntülerini, kapsayıcılarını, ağlarını ve depolama birimlerini yönetmeye yardımcı olan sürekli bir arka plan işlemidir. Docker, HTTP protokolü aracılığıyla erişilen Docker arka plan programıyla etkileşim kurmak için Docker Engine REST API'sini kullanır.

Liman işçisi CLI'sı:

Liman işçisi
İmaj Kredisi: Redhat

Docker arka plan programı ile etkileşim için Docker komut satırı istemcisidir. Herhangi bir Docker komutunu çalıştırdığınızda kullandığınız şey budur.

Docker'ın çalışması, Linux çekirdeğine ve bu çekirdeğin cgroups ve namespaces gibi işlevlerine dayanır. Bu işlevler, kapsayıcıların amacı birden çok işlemi ve uygulamayı ayrı ayrı çalıştırmak olduğundan, bağımsız olarak çalışabilmeleri için işlemleri ayırır.

Bu, ayrı sistemlere kıyasla güvenlik seviyesini düşürmeden altyapının kullanımını optimize etmeyi mümkün kılan şeydir.

Docker gibi tüm kapsayıcı araçları, görüntü tabanlı bir dağıtım modeliyle birlikte gelir. Bu model, bir uygulamanın veya hizmet kümesinin birden çok ortamda paylaşılmasını basitleştirir.

Ek olarak Docker, uygulamaların bir kapsayıcı ortamında devreye alınmasını otomatikleştirmeye yardımcı olur. Kullanıcılar bu çeşitli araçlarla uygulamalara tam erişim elde eder ve dağıtımı hızlandırabilir, sürümleri kontrol edebilir ve atayabilir.

Podman

Podman (POD YÖNETİCİSİ), OCI kapsayıcılarını ve kapsayıcı görüntülerini oluşturur, çalıştırır ve yönetir. Red Hat tarafından geliştirilmiştir ve orijinal olarak kendi kuruluşu olan Linux 8 için tasarlanmıştır. Konteyner yönetimi için kullanılır ve Docker'ın resmi halefi olarak hareket eder.

podman

Sonuç olarak Red Hat, Docker desteğini sonlandırdı, ancak başlangıçta yalnızca bir hata ayıklama aracı olarak tasarlanmış olmasına rağmen Podman Docker'ı temel aldığı için geçişin kullanıcılar için kolay olacağından emin oldu.

Libpod kitaplığını kullanarak tüm konteyner ekosistemini yönetir. Podman yalnızca Linux platformlarında çalıştığından, Mac ve Windows sistemlerinin hizmeti çağırmasına izin vermek için bir REST API ve istemciler şu anda geliştirilmektedir.

Yine de,   şu anda Linux tabanlı bir Podman sunucusuyla uzaktan iletişime izin veren, Mac veya Windows platformlarında çalışan Varlink tabanlı bir uzak istemci bulunmaktadır. Libpod kitaplığı, görüntüleri güvenli bir şekilde yüklemek için güven ve görüntü doğrulama dahil olmak üzere birden çok yöntemi destekler.

Ayrıca, kapsayıcı gruplarını birlikte yönetmek için bölmeleri ve OCI ve Docker görüntü biçimleri dahil olmak üzere birden çok görüntü biçimini destekler.

Çok küçük ve yönetilebilir ortamlarda Podman, Kubernet'lerin öncüsü olarak bile hizmet edebilir. Kapsayıcı çılgınlığının ilk yıllarından itibaren bireysel örneklerin tekil yönetimi ile Kubernetes ile modern orkestrasyon arasında köprü kuruyor.

Hırslı konteyner kullanıcıları, bölmelerle şimdiden bir sonraki seviyenin keyfini çıkarabilir. Bir Kubernetes kümesinin oluşturulması ve işletilmesi artık gerekli değildir. En basit durumda, yeni tasarlanan bölmeler bireysel işlemlerde test edilebilir ve geliştirilebilir. Daha sonra Kubernetes'e aktarım bile mümkündür.

podman generate kube komutu, karşılık gelen yapılandırma dosyalarını sağlar. Bunlar daha sonra Kubernetes aracı kubectl için bire bir girdi görevi görür.

Podman'ın mevcut sürümleri, systemd için yapılandırma dosyaları bile oluşturabilir; bu, konteyner orkestrasyonu için her yerde bulunan init halefini kullanan herkes için bir zevktir.

podman-oluşturmak
İmaj Kredisi: Redhat

Podman ve Docker: Farklar

Docker, kapsayıcıları yönetmek için kısa sürede hobi atı haline geldi. Bununla birlikte, Docker'ın birçok avantajı ve her şeyden önce hızla büyüyen görüntü repertuarının yanı sıra dezavantajları ve olası güvenlik riskleri vardır. Ayrıca, Docker artık Kubernetes için bir kapsayıcı olarak desteklenmemektedir.

Container'ların sanal sistemlerin aksine kernel gerektirmemesi genellikle en büyük avantajlarından biri olarak görülüyor. Ancak Docker kapsayıcıları yalnızca kök ayrıcalıklarıyla çalıştırılabildiği için Docker ile büyük bir güvenlik riski oluşturur.

Kaplarda çalışan süreçlerin kök ayrıcalıklarıyla çekirdeğe erişmesine ve böylece ana sisteme saldırmasına izin verir.

İlk ayrım, ilk kullandığınızda belirgindir. Docker, önce Docker daemon'unun başlatılmasını gerektirse de, bir Podman konteyneri doğrudan komut satırından başlatılabilir. Yani herhangi bir arka plan işlemi yoktur ve uygulama sadece ihtiyaç duyulduğunda çalıştırılır.

Güvenlik açısından bakıldığında, bu iyidir çünkü arka plan programının süper kullanıcı ayrıcalıklarıyla 7/24 çalışması gerekmiyorsa Podman saldırılara karşı daha az savunmasızdır. Podman, Docker'dan temelde farklı olan mimarisi nedeniyle bir arka plan işlemi gerektirmez.

Docker, Docker istemcisinin Docker arka plan programı ile bir API aracılığıyla iletişim kurduğu istemci-sunucu modelini takip ederken, Podman fork-exec modelini takip eder. Her konteyner, Podman'ın bir alt süreci olarak çalışır.

Podman normal kullanıcı ayrıcalıklarıyla çalıştırıldığında ilk kullanımda bir kullanıcı ad alanı oluşturulur. Kullanıcı ad alanında, Podman kök ayrıcalıklarıyla çalışır ve dosya sistemlerini bağlama ve kapsayıcılar oluşturma haklarına sahiptir.

Buna göre, Podman kapsayıcısı yalnızca yürüten kullanıcının sahip olduğu haklara sahiptir. Kullanıcı ad alanlarını kullanmak, her kullanıcının kendi kapsayıcılarını oluşturabileceği ve yönetebileceği anlamına gelir, ancak bunlar diğer kullanıcılar ve süper kullanıcı tarafından görülmez.

Podman, Docker'dan bağımsız olarak çalıştırıldığından, geliştiricilerin çok fazla hareket alanı vardır ve topluluğun isteklerine yanıt verebilirler. Podman'a ilginç eklemeler arasında mount/unmount komutu ve systemd entegrasyonu yer alır.

Ana bilgisayar, örneğin dosyalara erişmek veya bunları değiştirmek ve ardından yeniden bağlantısını kesmek için kabın dosya sistemini bağlamak için mount/unmount komutunu kullanabilir.

Docker with Podman'daki arka plan programı nedeniyle systemd kullanarak kapları izleme çalışmazken, kapsayıcılar sistemd aracılığıyla başlatılabilir, izlenebilir ve hatta yeniden başlatılabilir.

Ek olarak, Podman, ilgili kapsayıcı için karşılık gelen bir systemd hizmeti oluşturan ve böylece kullanıcıyı systemd hizmetlerini oluşturma zahmetinden kurtaran, yani ana sistem üzerinde entegrasyonun mevcut olduğu anlamına gelen podman generate systemd komutunu sağlar.

Podman ve Docker arasındaki bir diğer önemli fark, ikincisinin dahili bir ağ oluşturma yeteneği nedeniyle güvenlik duvarı kurallarını veya mevcut dnsmasq kurulumunu değiştirmemesidir. Buna karşılık, Docker'ın konteynerler arası iletişimi etkinleştirmek için güvenlik duvarı kurallarının üzerine yazması gerekir.

Podman Liman işçisi
Mimari arka plan programı arka plan programı daha az
Hizmet Yönetimi sistemd Docker Motoru
Güvenlik Duvarı Uyumluluğu Güvenlik duvarı kurallarının üzerine yazar Güvenlik duvarı kurallarına saygı duyar
platformu Linux için yerel destek Linux, Windows ve Mac

Docker'dan Podman'a ne zaman geçiş yapmalısınız?

Kapsayıcıları RHEL tabanlı bir ortamda dağıtıyorsanız, bu durumda Podman'i RHEL yerel olduğu için kullanmak dışında pek fazla seçeneğiniz yoktur. Ayrıca, birkaç kapsayıcı içeren küçük dağıtımlarınız varsa Docker yerine Podman'a geçiş yapabilir veya bunu seçebilirsiniz.

Bununla birlikte, bundan daha karmaşık olmak istiyorsanız, bir ağ üzerinden docker-compose/podman-compose ile birden çok konteynere ve bir koordinasyon konteyner yığınına sahip olun. Ağ oluşturmayı çok daha iyi idare ettiği için Docker'ı kullanmak daha iyidir.

Benzer şekilde, kapsayıcı dünyasına yeni girmeye başlıyorsanız, bu durumda Docker daha iyi bir seçenektir çünkü kararlıdır, uygun belgelerle sağlam bir şekilde oluşturulmuştur ve hala kararlılıktan yoksun olan Podman'a kıyasla sığ bir öğrenme eğrisine sahiptir. iyi tanımlanmış belgelere sahip değildir.

Podman'dan Docker'a Geçiş

Komut satırındaysanız, Docker Engine'den Podman'a geçiş yapmak oldukça kolaydır. En basit haliyle, $ alias docker=podman komutu çoğu zaman çalışır.

Elbette bu, sistemde uygun yazılımın yüklü olduğunu varsayar. Linux söz konusu olduğunda, bu da bir sorun değildir; piyasada bulunan dağıtımlar için hazır yazılım paketleri mevcuttur.

Windows veya macOS, desteklenen işletim sistemleri arasında değildir. Takma ad yaklaşımı işe yarar çünkü birçok Docker komutunun bir Podman eşdeğeri vardır.

Ancak bazı Docker komutlarının Podman dünyasında karşılığı olmadığı için istisnalar da vardır. Benzer şekilde, bazı komutlar Docker'da Podman evrenindekinden farklı davranır. Şu anda, bu yalnızca zaten ayarlanmış olan birimlerin işlenmesini etkiler.

Docker Desktop gibi grafiksel araçlar kullanımdayken geçiş biraz daha zordur. Özellikle Windows veya macOS ile çalışan geliştiricileri etkilemelidir.

Docker Desktop kullanıcılarının komut satırına alışması gerekecek ve aynısı Docker oluşturma için de geçerli. Ancak, podman-compose projesi var. Python'da yazılan yazılım, Docker compose'un yerine geçer.

Son sözler

Docker'ın Podman tarafından değiştirilmesi neredeyse tamamlanmış sayılabilir. Kullanıcılar ve yöneticiler için bu değişikliğin çoğu yönü kolaydır. Birçok Docker özelliğinin Podman'da aynı eşdeğerleri vardır.

Gerçek bir fayda, konteyner gruplarının doğal kullanımı bir yana, tekil bir arka plan programı sürecinin ve kök ayrıcalıklarının olmamasıdır. Bununla birlikte, Docker'ın kapsayıcılarla ilgili ana teknoloji olmaya devam ettiğini belirtmekte fayda var, ancak bu büyük olasılıkla uzun vadede değişecek.

Konteynerleri yönetmek için bazı Docker komutlarını da keşfedebilirsiniz.