Gantek
Podman

Podman

Konteyner Teknolojisi

Podman ile ilgili bilgi aktarmadan önce  kısaca konteyner teknolojisinden bahsetmek istiyoruz.

Yazılım uygulamaları genellikle sistem kitaplıklarına, yapılandırma dosyalarına veya çalışma zamanı ortamlarının sağladığı hizmetlere bağlıdır. Geleneksel olarak, yazılım uygulamalarının çalışma ortamı, fiziksel bir ana makinede veya sanal bir makinede çalışan bir işletim sistemi üzerinde kurulur. Daha sonra sistem yöneticileri, uygulama bağımlılıklarını işletim sistemi üzerinee yüklerler.

Yöneticilerin uygulama bağımlılıklarını yönetmelerine yardımcı olan RPM gibi paketleme sistemleri, Red Hat Enterprise Linux'ta bulunur. Apache httpd paketini kurduğunuzda, RPM sistemi doğru kitaplıkların ve diğer bağımlılıkların da kurulmasını sağlar.

Geleneksel olarak dağıtılan yazılım uygulamalarının en büyük dezavantajı, bağımlılıkların çalışma zamanı ortamıyla karışık olmasıdır. Bir uygulama, işletim sistemiyle birlikte sağlanan yazılımdan daha eski veya daha yeni destekleyici yazılım sürümleri gerektirebilir. Benzer şekilde, aynı sistemdeki iki uygulama aynı yazılımın farklı ve uyumsuz sürümlerini gerektirebilir. [5]

Uygulamaların bir konteyner olarak paketlenmesi ve dağıtılması, bu çakışmaların çözülmesine yardımcı olabilir. Bir konteyner, sistemden izole edilmiş bir veya daha fazla işlem kümesidir. Yazılım konteynerleri, uygulamaların paketlenmesi ve dağıtılması için bir yol sağlar ve yönetimlerini kolaylaştırır.

Nakliye için çalışan bir konteyner/kargo gemisi düşünün. Bir nakliye konteyneri, malları paketlemek ve göndermek için standart bir yoldur. Etiketlenir, yüklenir, boşaltılır ve bir kutu olarak bir yerden başka bir yere taşınır. Konteynerin içerikleri diğer konteynerlerin içeriklerinden birbirini etkilemeyecek şekilde izole edilir. Bu temel prensipler, yazılım konteynerleri için de geçerlidir.

Red Hat Enterprise Linux, aşağıdaki temel teknolojileri kullanarak konteynerleri destekler:

  1. cgroups (control groups): İşletim sistemi kaynaklarına erişimi sınırlamak için kullanılır.
  2. namespaces: Sistemdeki kaynakların sanal bir bölgede izole edilmesine izin verir.
  3. SELinux (Security-Enhanced Linux): Linux çekirdeği için güvenlik modülüdür. İşletim sistemi seviyesinde izin kontrolleri gerçekleştirir.

Konteynerler ve Sanal Makineler Arasındaki Farklar

Konteynerler, sanal makineler gibi birçok fayda sağlar: güvenlik, depolama ve ağ izolasyonu gibi. Her iki teknolojide, uygulama kütüphanelerini ve çalışma zamanı kaynaklarını ana işletim sistemi veya hipervizörden izole eder ve aynı şekilde, ana işletim sistemi veya hipervizör de bu kaynaklardan izole edilir.

Konteynerler ve sanal makineler, donanım ve altındaki işletim sistemiyle farklı şekilde etkileşime girerler.

Şekil-1 (https://www.atlassian.com/microservices/cloud-computing/containers-vs-vms)

Bir sanal makine aşağıdaki özelliklere sahiptir:

• Tek bir donanım platformunda birden fazla işletim sisteminin aynı anda çalışmasına izin verir.

• Donanımı birden çok sanal donanım sistemine bölmek için bir hipervizör kullanır.

• Uygulamayı desteklemek için eksiksiz bir işletim sistemi ortamı gerektirir.

Bir konteyner aşağıdaki özelliklere sahiptir:

• Doğrudan ana işletim sisteminde çalışır ve sistemdeki tüm konteynerlerle kaynakları paylaşır.

• Ana bilgisayarın çekirdeğini paylaşır, ancak uygulama işlemlerini sistemdeki diğer kısımlardan izole eder.

• Sanal makinelerden çok daha az donanım kaynağı gerektirdiğinden, konteynerler  daha hızlı başlatılır.

• Sistem ve programlama bağımlılıkları ile yapılandırma ayarları gibi tüm bağımlılıkları içerir.

Podman

Podman, açık kaynaklı bir araçtır ve Linux sistemlerinde konteyner geliştirmek, yönetmek ve çalıştırmak için kullanılır. Başlangıçta Red Hat mühendisleri ve açık kaynak topluluğu tarafından geliştirilen Podman, libpod kütüphanesini kullanarak tüm konteyner ekosistemini yönetir.

Podman'ın daemon'sız ve kapsayıcı mimarisi, konteyner yönetimi için daha güvenli ve erişilebilir bir seçenek yapar ve Buildah ve Skopeo gibi eşlik eden araçları ve özellikleri, geliştiricilerin ihtiyaçlarına en uygun konteyner ortamlarını özelleştirmelerine olanak tanır.

Podman, Linux sistemlerinde konteynerleri yönetmek için Docker'a alternatif bir konteyner motoru sağlar. Docker gibi diğer konteyner motorlarıyla Podman arasında bazı temel farklılıklar vardır:

1.     Podman, daemon işlemi gerektirmeyen bir mimari kullanır: Konteynerleri yönetmek için bir daemon işlemi gerektiren Docker'a alternatif, Podman, ayrı bir daemon işlemine ihtiyaç duymadan konteynerleri çalıştırmaya olanak sağlayan bir mimari kullanır. Bu, ayrıcalıklı bir işleme olan ihtiyacı ortadan kaldırdığı için kullanımı daha kolay ve daha güvenli hale getirir.

2.     Podman konteynerleri, ana sistemde düzenli işlemler olarak çalıştırılır, bu da onları systemd veya systemctl gibi standart Linux işlem yönetimi araçlarıyla yönetilebilecek hale getirir. Bu, mevcut sistem yönetimi araçları ve iş akışlarıyla daha kolay entegre olmasını sağlar.

3.     Podman ile root (kök) ayrıcalıklarına ihtiyaç duymadan konteynerleri normal bir kullanıcı olarak çalıştırmak mümkündür. Bu, konteyner ortamlarını daha kolay güvenli hale getirir ve kullanıcıların ana sistemde root erişimine sahip olmasına gerek kalmaz.

Genel olarak Podman, kullanım kolaylığına ve mevcut sistem yönetimi araçlarıyla entegrasyona odaklanarak, Linux sistemlerinde kapsayıcıları yönetmenin hafif, güvenli ve esnek bir yolunu sunar.

Podman Kurulumu

Podman'ı tek satırda indirmek mümkündür. Bu çalışmada RHEL 9 kullanıldı. Diğer dağıtım ve işletim sistemlerindeki kurulumlara bu linkten ulaşabilirsiniz

Ø  sudo yum -y install podman

O zaman gelenek olarak önce bir Hello-World programını çalıştıralım:

Ø  podman run quay.io/podman/hello

Podman Konteyner Depolama

Her sistem kullanıcısı kendi konteyner depolama alanına sahiptir. Farklı kullanıcı oturumlarından görüntü çekmeye çalışırsanız, yerel görüntü yerine uzak kayıttan görüntü çeker. Yani farklı kullanıcıların oturum açtığı durumlarda, bu kullanıcıların kendi konteyner depolama alanlarına erişebileceklerini ve bu depolama alanlarında saklanan görüntülerin diğer kullanıcıların depolama alanlarında bulunmadığını ifade etmektedir. Dolayısıyla, bir kullanıcının kendi depolama alanındaki bir görüntüyü kullanmak istediğinde, bu görüntü yerel olarak mevcut olmayabilir ve uzak kayıttan indirilmesi gerekebilir.

Örneğin, root kullanıcısı için konteynerler, /var/lib/containers/storage dizininde saklanırken,

Diğer kullanıcılar için, $HOME/.local/share/containers/storage/ dizininde saklanır

Bu yapılandırma, her kullanıcının kendi konteynerlerine erişebilmesini sağlar ve farklı kullanıcıların konteynerleri arasında karışıklık yaşanmasını önler. Örneğin, bir kullanıcının konteynerinde yüklü bir uygulama, başka bir kullanıcının konteynerinde çalışmayabilir veya farklı bir sürüm olabilir. Bu nedenle, her kullanıcının kendi konteyner depolama alanına sahip olması, sistemde daha iyi bir kullanıcı deneyimi sağlar.

Podman Kullanarak Konteyner Oluşturma

1.     Öncelikle, Podman'ın kurulu olduğundan emin olun:

Ø  podman --version

2.     Ardından, bir Docker imaj’ı(görüntüsü) indirelir. Örneğin, Nginx web sunucusu görüntüsünü indirmek için şu komutu kullanabilirsiniz:

Ø  podman pull nginx

Örneğin, buradaki depomuz (repository) docker.io/librariy/nginx'tir. Aşağıdaki komut ile hangi repoyu indirmek istediğimizi seçebiliriz.

Ø  podman search nginx

Uzun bir çıktı aldık. Burada Repository’i açıklamalarıyla birlikte bulabiliriz. Örneğin kullandığımız repo buradaki sarı kısımdaki resmi imaj olduğu için varsayılan olarak bu imaj’ı indirdik.

3.     Ardından, konteyner oluşturmak için aşağıdaki komutu kullanabilirsiniz:

Ø  podman run -d –name mynginx -p 8080:80 nginx

Bu komut "mynginx" adında bir konteyner oluşturur ve 8080 numaralı bağlantı noktasını 80 numaralı bağlantı noktasına iletir. "-d" opsiyonu, konteynerin arka planda çalışacağını belirtir. Komutun en sonuna ise indirmek istediğimiz imaj ismini belirtiyoruz.

4.     Konteynerin çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

Ø  podman ps

Her satır, konteyner hakkındaki bilgileri açıklar:

CONTAINER ID: Her bir konteyner, oluşturulduğunda ona özgü onaltılık bir sayı olan bir konteyner kimliği (ID) alır. Bu kimlik, imaj kimliği gibi görünse de birbiriyle ilgisi yoktur.

IMAGE: IMAGE alanı, konteynerin başlatılması için kullanılan konteyner görüntüsünü belirtir.

COMMAN: DCOMMAND alanı, konteyner başlatıldığında yürütülen komutu belirtir.

CREATED: CREATED alanı, konteynerin başlatıldığı tarih ve saat bilgisini gösterir.

STATUS: STATUS alanı, konteynerin toplam çalışma süresini veya hala çalışıyorsa süresini veya sonlandırıldıysa sonlandırılma tarihini gösterir.

PORTS: PORTS alanı, konteyner tarafından açılan veya yapılandırılmış olan herhangi bir port yönlendirmesi ile birlikte açılan portları belirtir.

NAMES: NAMES alanı, konteyner adını belirtir.

5.     Bu komutu konteyneri test etmek için kullanabilirsiniz. Private IP adresinden sonra yönlendirdiğimiz portu girerek erişim sağladık.

Ø  curl http://172.0.0.62:8080

6.     Konteyneri durdurmak için aşağıdaki komutu kullanabilirsiniz:

Ø  podman stop mynginx

                                 

7.     Konteyneri silmek için ise aşağıdaki komutu kullanabilirsiniz:

Ø  podman rm mynginx

Bu örnek senaryo, Podman kullanarak basit bir Nginx web sunucusu kapsayıcısı oluşturma sürecini gösterir. Elbette farklı görseller ve parametreler kullanarak farklı senaryolar da oluşturabilirsiniz.

Podman Kullanarak Konteyner İmajlarını Yönetme

Zaman zaman biraz yardıma ihtiyaç duyabilir, bu amaçla şu komutu kullanabiliriz:

Ø  podman --help | more

Ya da alternatif olarak, yüklenmiş ise manuel sayfasını inceleyebilirsiniz:

Ø  man podman

Yine Podman’in daha alt komutları hakkında da bilgi sahibi olabilirsiniz:

Ø  podman images --help | more

Podman Konteynerleri Nasıl Yönetiyor?

Kullanıcılar kendi depolarından konteynerleri Podman CLI aracılığıyla çekebilirler. Podman, yapılandırılmış konteyner çalıştırıcısını çağırmak için kullanılır ve systemd ile entegre olarak, systemd servislerini kullanarak konteynerlerin güncellenmesi ve arka planda çalıştırılması sağlanır.

Kullanıcılar, kendi systemd birimleriyle kendi konteynerlerini otomatik olarak başlatabilir ve yönetebilirler. Bu, her kullanıcının ayrı konteyner ve imaj kümesine sahip olmasını ve Podman'ı aynı ana bilgisayarda eşzamanlı olarak kullanmasını sağlar. Kullanıcılar, işlerini bitirdiklerinde, değişiklikleri ortak bir depoya yükleyerek imajlarını diğerleriyle paylaşabilirler.

                  

Podman ayrıca, RESTful API ile birlikte gelir, bu sayede konteynerleri yönetmek için CURL, Postman, Google'ın Gelişmiş REST istemcisi gibi platformlardan Podman'a çağrı yapılabilir. Bu, kullanıcıların Podman'ı harici araçlarla da kullanmasını sağlar.

Yerel Konteyner İmajı Kayıt Defteri'ni Başlatma:

Podman yerel kayıt defteri, Podman konteynerlerini yerel ağınızda kaydedip paylaşabileceğiniz bir araçtır. Bu araç, yerel bir kayıt defteri sunucusu olarak hareket eder ve Podman konteynerlerini oluşturmak, çalıştırmak veya durdurmak için kullanılabilecek imajları barındırır.

Podman yerel kayıt defteri, yerel ağda barındırılan ve paylaşılan imajları yönetmeyi kolaylaştırır. Bu sayede, imajları birden fazla makine arasında paylaşmak mümkün hale gelir. Bu araç, Docker hub gibi bir genel kayıt defteri hizmeti sağlamaz, sadece yerel ağınızda barındırılan imajlar için bir kayıt defteri hizmeti sağlar.

Podman yerel kayıt defterinin kullanımı oldukça basittir ve yerel ağda birkaç adımda kurulabilir. Podman, imajları yerel kayıt defterine kaydettiğinde, imajların kayıt defterinde depolanacağına dair bir etiket atayarak imajların yerel kayıt defterinde depolanacağını belirtmeniz gerekiyor. Bu etiketin konumu genellikle localhost:5000'dir, ancak isteğe bağlı olarak değiştirilebilir.

Deployment

Kayıt defterini deploy etmenin en kolay yolu aşağıdaki komutu çalıştırmaktır:

Ø  podman container run -dt 5000:5000 --name registry --volume registry:/var/lib/registry:Z docker.io/library/registry:2

Bu Podman komutu, Docker hub'da bulunan docker.io/library/registry:2 imajından bir Podman konteyneri oluşturur. Konteynerin adı registry olarak belirlenir. Ayrıca konteyner, ana makinedeki /var/lib/registry dizinine Podman tarafından bir volum olarak bağlanır ve "Z" seçeneği ile volumün SELinux bağlamını ayarlar.

Komut, 5000 portunu Podman konteynerinin 5000 portuna eşler, bu sayede konteyner dışındaki uygulamalar Podman konteynerine bağlanarak yerel bir Docker kayıt defterine erişebilir. Bu nedenle, komut, yerel bir Docker kayıt defteri olarak kullanılmak üzere bir Docker kayıt defteri konteyneri oluşturur. -d opsiyonu, konteyneri arka planda çalıştırırken -t opsiyonu konteyner için bir TTY bağlantısı oluşturur.

Volume’leri kontrol etmek ve incelemek için:

Ø  podman volume ls

Ø  podman volume inspect registry

Görüldüğü gibi, veriler home dizininde depolanacaktır ve bu nedenle konteyneri yeniden başlatabilir ve hatta kaldırabilirsiniz. Yeni bir konteyner başlatır ve aynı birimi yeniden kullanırsanız, zaten depolanan imajlara erişebilirsiniz.

Test

İşlevselliği test etmek için bir resim indirebilir ve yerel kayıt defterine yükleyebiliriz.

1.     registry.access.redhat.com kayıt defterinden en son ubi8 imajını alın:

Ø  Podman pull registry.access.redhat.com/ubi8/ubi:latest

2.     Bir konteyner görüntüsünün meta verilerine gidin:

Ø  podman inspect image ubi |more

3.     Mevcut olan imajlarda etiketleri(label) değiştirme/güncelleme:

(Etiketler, imajlar hakkında ek bilgi sağlamak için kullanılır ve genellikle versiyon numaraları, oluşturulma tarihleri, yapımcı bilgileri, lisanslar vb. bilgileri içerirler. Relable işlemi, bu etiketlerin değiştirilmesi veya güncellenmesi anlamına gelir.)

Ø  Podman tag ubi:latest localhost:5000/ubi8/ubi

UBI görüntüsü için ek etiketi şimdi görebiliriz. Her ikisinin de aynı imaj ID değerine sahip olduğuna dikkat edin.

4.     Sıradaki adımda, imajı yerel kayıt defterimize yükleyeceğiz

Ø  podman push --remove-signatures localhost:5000/ubi8/ubi:latest --tls-verify=false

--remove-signatures opsiyonu, imajdaki imza (signature) verilerini kayıt defterine yüklemeden önce kaldırır. Bu, imzaların kayıt defteri tarafından yeniden doğrulanması gerektiği için imajı kayıt defterine yüklemek için bir imza anahtarına sahip olmak yerine, güvenlik önlemlerini atlamak isteyenler tarafından kullanılabilir.

Test kayıt defterinde geçerli bir sertifika olmadığından, komutumuza --tls-verify=false seçeneğini eklememiz gerekiyor.

Bundan sonra kayıt defterinde arama yapabilirsiniz:

Ø  podman image search localhost:5000/ --tls-verify=false

5.     Şimdi, yerel imajınızı kaldırabilir ve isterseniz yerel kayıt defterinizden tekrar çekebilirsiniz.

#Yerel imajı kaldır:

Ø  Podman rmi registry.access.redhat.com/ubi8/ubi

#İmajı yerel kayıt defterinden indirin:

Ø  podman pull localhost:5000/ubi8/ubi:latest --tls-verify=false

6.     Eğer her şey bitti ise, imajları, volumleri ve konteynerleri temizleyebilirsiniz.

# Konteyner kaldır/sil

$ podman container rm -f registry

# Volume kaldır/sil

$ podman volume rm registry

# İmaj kaldır/sil

$ podman image rm docker.io/library/registry:2

Temel komutları aşağıdaki gibi özetleyebiliriz:

Komut

Açıklama

podman build

Konteyner dosyasına sahip bir konteyner görüntüsü oluşturun.

podman run

Yeni bir konteynerde bir komut çalıştırın.

podman images

podman image ls

Yerel depolamada imajları listeleyin.

podman ps

Konteynerler hakkında bilgi yazdırın.

podman inspect

Bir konteyner, imaj, volume, ağ veya pod konfig dosyalarını görüntüleme.

podman pull

Bir kayıt defterinden bir imaj indirin.

podman cp

Dosyaları veya dizinleri bir konteyner ve yerel dosya sistemi arasında kopyalayın.

podman exec

Çalışan bir konteynerde bir komut yürütün.

podman rm

Bir veya daha fazla konteyner silin.

podman rmi

Bir veya daha fazla imajları silin.

podman search

Bir imajı kayıt defterinde arayın.

Podman hakkında daha fazla komuta bu link üzerinden ulaşabilirsiniz.

Pod nedir?

Podman pod’ları, birden fazla konteyneri bir araya getirerek onları tek bir birim olarak yönetmenize olanak sağlar. Podman pod’ları, aynı ağ ad alanını ve dosya sistemi paylaşan bir veya daha fazla konteyner grubudur. Bu, konteynerlerin sanki aynı makinede çalışıyormuş gibi birbirleriyle iletişim kurabileceği ve aynı dosyalara ve dizinlere erişebileceği anlamına gelir.

Pod’ları kullanmanın bir avantajı, konteynerleri ayrı ayrı çalıştırmaktan daha izole bir ortam sağlamalarıdır. Konteynerleri ayrı ayrı çalıştırdığınızda, aynı ağ ad alanını paylaşırlar, bu da doğrudan birbirleriyle iletişim kurabildikleri anlamına gelir. Ancak pod içinde her bir konteyner kendi ağ ad alanına sahiptir, bu da ek izolasyon sağlar.

Podman pod’ları ayrıca bir konteyner grubunun yaşam döngüsünü yönetmenin bir yolunu sağlar. Bir pod’u tek bir birim olarak başlatabilir, durdurabilir ve silebilirsiniz, bu da birbirleriyle çalışması gereken birden fazla konteyneri içeren karmaşık uygulamaları yönetmeyi daha kolay hale getirir.

Genel olarak, Podman pod’ları, birbirleriyle daha izole ve daha düzenli bir şekilde çalışan konteyner gruplarını yönetmek için kullanışlı bir araçtır.

Şekil-2[2]

Infra Container: Pod ile ilişkili ad alanlarını tutar ve podman'ın diğer konteynerleri pod’a bağlamasına olanak tanır.

Konteyner(ler): Uygulamanızın bulunduğu normal konteynerlerdir. Paylaşılan ağ ad alanını kullanarak pod içindeki diğer konteynerlarla iletişim kurabilirler.

Bazı podman pod komutları şunlardır:

Komut

Açıklama

podman pod create

Yeni bir pod oluşturur.

podman pod rm

Bir pod'u siler.

podman pod prune

Kullanılmayan podları silmek için kullanılır.

podman pod start

Bir pod'u başlatır.

podman pod stop

Bir pod'u durdurur.

podman pod restart 

Bir pod'u yeniden başlatır.

podman pod pause

Bir pod'u duraklatır

podman pod unpause

Duraklatılan bir pod'u devam ettirir.

podman pod kill

Belirtilen pod’daki tüm çalışan konteynerlere SIGKILL sinyali göndererek poddaki tüm işlemleri durdurur.

podman pod top

Bir pod'daki işlemleri görüntüler.

podman pod logs

Bir pod'un günlüklerini görüntüler.

podman pod inspect

Bir pod'un ayrıntılarını görüntüler.

podman pod stats

Bir pod'un kaynak kullanım istatistiklerini görüntüler.

Rootless (Köksüz) pod çalıştırma:

1.     Var olabilecek rootless konteyner ve pod'ları kontrol etmek için, --pod seçeneğini kullanarak konteynerlerin ait olduğu pod'un kimliğini ve adını gösterin:

2.     Var olan pod'ları kontrol edin:

Ø  podman ps -a --pod

Ø  podman pod ps

3.     Pod'un içindeki 80 numaralı portun, ana makinedeki 8080 numaralı porta yönlendirildiği my-pod adlı bir pod oluşturalım:

4.     Var olan pod'ları ve konteynerleri tekrar kontrol edin:

Ø  podman pod create --name my-pod -p 8080:80

Ø  podman pod ps

Varsayılan olarak my-pod ile oluşturulan infra konteyneri şimdi listelenmelidir. Ayrıca pod'un yayınlanan portları da listelenir ve 80 numaralı portun 8080'e yönlendirildiği doğrulanır.

5.     Aşağıdaki parametreler ve ortam değişkenleriyle my-pod pod'una mariadb adında bir konteyner ekleyin:

• --restart=always ayarına sahip olacak şekilde ayarlanır.

• MYSQL_ROOT_PASSWORD dbpass olarak ayarlanır.

• MYSQL_DATABASE my olarak ayarlanır.

• MYSQL_USER wordpress olarak ayarlanır.

• MYSQL_PASSWORD mypass olarak ayarlanır.

Ø  podman run -d --restart=always --pod=my-pod -e MYSQL_ROOT_PASSWORD= “dbpass” -e MYSQL_DATABASE=”my” -e MYSQL_USER=”wordpress” -e MYSQL_PASSWORD=”mypass” –name=my-db mariadb

6.     Aşağıdaki parametreler ve ortam değişkenleriyle my-pod pod'una my-web adında bir Wordpress konteyneri ekleyin:

• --restart=always ayarına sahip olacak şekilde ayarlanır.

• WORDPRESS_DB_NAME my olarak ayarlanır.

WORDPRESS_DB_USER wordpress olarak ayarlanır.

• WORDPRESS_DB_PASSWORD mypass olarak ayarlanır.

• WORDPRESS_DB_HOST 127.0.0.1 olarak ayarlanır.

Ø  podman run -d --restart=always --pod=my-pod -e WORDPRESS_DB_NAME = “my” -e WORDPRESS_DB_USER =” wordpress” -e WORDPRESS_DB_PASSWORD =”mypass” -e WORDPRESS_DB_HOST =”127.0.0.1” –name=my-web wordpress

7.     Curl kullanarak, Wordpress sunucusundaki web sunucusunun yayınlanan portlar aracılığıyla erişilebilir ve düzgün çalıştığından emin olunuz:

Ø  curl -s http://localhost:8080

Hiçbir şey dönmeyecektir.

8.     Hemen çıkış kodunu kontrol edin:

Ø  echo $?

9.     Podman pod stop komutunu kullanarak pod'u ve içindeki tüm konteynerleri durdurabiliriz:

                         

My-Pod Pod ve Web, My-DB ve infra konteynerleri, çıkış olarak listelenmeli veya durdurulmalıdır.

10.  Podman pod start komutunu kullanarak pod ve konteynerlerini tekrar başlatın:

11.  Podman pod restart komutunu kullanarak pod'u ve konteynerlerini yeniden başlatın:

my-pod pod'u ve my-web, my-db ve infra konteynerleri, tümü de çalışıyor veya çalışıyor olarak listelenmelidir.

 

Podman vs. Docker

                              Şekil-3(https://devopscube.com/podman-tutorial-beginners/)

Docker, konteynerleştirme teknolojisi olarak bilinen ve Linux konteynerlerinin oluşturulması ve kullanımını sağlayan bir araçtır. Temel fark, Podman'ın daemon'suz mimarisi ile birlikte gelen özelliği ile Docker'dan ayrılır. Podman konteynerleri her zaman rootless olurken, Docker rootless moduna son zamanlarda bir daemon yapılandırmasına eklemiştir. Docker, konteyner oluşturma ve yönetimi için tek bir araçtır, ancak Podman ve Buildah gibi ilgili araçlar, konteynerleştirme için belirli yönleri için daha özelleşmiş ve ihtiyaçlarınıza göre özelleştirilebilir.

Podman, Docker'a güçlü bir alternatiftir ve birlikte de kullanılabilirler. Kullanıcılar, kolayca geçiş yapmak için Docker'ı Podman'a (alias docker=podman) ve tersi gibi değiştirebilirler. Ayrıca, 'docker' komutunu gerektiren ortamlar için Podman'a geçişi kolaylaştırmak için "podman-docker" adlı bir rpm, 'docker'ı sistem uygulama PATH'ına bırakabilir ve Podman'ı çağıran Docker'a geçişi kolaylaştırabilir. Podman'ın CLI'si Docker Container Engine ile benzerdir ve biriyle aşina olan kullanıcıların diğerinde de başarılı olma olasılığı yüksektir. [1]

Docker'da yaptığımız komutları podman ile de çalıştırabiliriz. Ayrıca, Dockerfile ve Containerfile adlı dosyalarla da podman çalışabilir.

Ø  FROM docker.io/library/alpine:latest
RUN apk update && apk add git
vim Dockerfile

Ø  pod build -t my-git-image .

komutun en sonunda Dockerfile’ın bulunduğu dizini belirtiyoruz.

Ø  podman run -it my-git-image

Podman, Buildah, and Skopeo

Podman, Buildah ve Skopeo, konteynerleştirme için kullanılan üç farklı araçtır. Bu araçlar, modüler bir konteynerleştirme yaklaşımını benimser ve birlikte kullanıldıklarında esnek ve hafif bir ortam sağlarlar.

Buildah, konteyner imajları oluşturmak ve yönetmek için kullanılan bir araçtır. Buildah, Dockerfile yerine Podmanfile adı verilen bir yapılandırma dosyası kullanır ve imajları sıfırdan oluşturabilir veya başlangıç noktası olarak mevcut bir imajı kullanabilir. Buildah, ayrıca, Dockerfile yerine bir dizi komut kullanarak imajların yapılandırmasını da sağlar.

Skopeo, farklı kaynaklar arasında konteyner imajlarının kopyalanması ve taşınması için kullanılan bir araçtır. Skopeo, farklı kaynaklarda depolanan imajlar arasında geçiş yapmak için kullanılabilir. Örneğin, docker.io veya quay.io gibi depolama sistemleri arasında imajların kopyalanmasına olanak tanır. [1]

Podman, konteynerleri başlatmak için kullanılan bir araçtır ve Docker'ın alternatifi olarak kabul edilir. Podman, Docker'a benzer bir komut satırı arabirimi sunar ancak farklı bir mimari kullanır. Podman, daemonsuz bir mimariye sahiptir ve rootless olarak çalışır. Podman, ayrıca, runC adı verilen bir OCI çalışma zamanını kullanır.

Red Hat bu ilişkiyi İsviçre Çakısına benzetiyor ve en büyük bıçağı podman olarak yorumluyor.

Podman ve Buildah arasında ki ilişkiyi incelemek için bu linke bakabilirsiniz.

Podman Desktop

Podman Desktop, podman konteynerlerini yönetmek için bir GUI aracıdır. Windows, MAC ve Linux sistemleri için mevcuttur. Podman Desktop, grafik arayüzü sayesinde konteynerleri görüntülemeyi, başlatmayı, durdurmayı ve yönetmeyi kolaylaştırır. Podman Desktop, aynı zamanda birçok özelliği de destekler. Örneğin, birden fazla konteyneri aynı anda çalıştırabilir ve izleyebilirsiniz. Ayrıca, uygulamanızın gerektiği gibi çalıştığından emin olmak için ayrıntılı günlükler alabilirsiniz.

Docker Desktop’u kullanmaya alışmış ve GUI ile kendini daha rahat hisseden kullanıcılar için Podman bu konuda da çözüm üretmiştir. Bu yüzden bu konuya da değinmek istedik.

Şekil-4(https://developers.redhat.com/articles/2022/10/24/podman-expands-desktop)

Podman Desktop’ı bu link üzerinden indirip kurabilirsiniz.

Sonuçlar ve Gelecek Çalışmalar

Sonuç olarak, Podman, diğer konteyner motorlarına (örneğin Docker) göre birkaç avantaj sağlayan güçlü ve esnek bir konteyner motorudur. Daemon’suz mimarisi onu daha güvenli ve kullanımı daha kolay hale getirirken, rootless konteynerlerin desteği, konteyner ortamlarının yönetiminde daha fazla esneklik sağlar.

Podman'ın konteynerleri ana sistemin normal işlemleri olarak çalıştırabilme yeteneği, mevcut sistem yönetimi araçları ve iş akışlarıyla daha kolay entegre olabilmesini sağlarken, Kubernetes desteği de konteyner tabanlı uygulamaların bir Kubernetes ortamında dağıtımı için uygun bir seçenek sunar.

Gelecekteki yazımızda, Podman’i daha detaylı irdeleyerek, Podman network ve izleme kısımlarından ve yukarıda kısaca değindiğimiz konteyner araçları (skopeo, buildah) hakkında daha detaylı konuşacağız.

Kaynaklar

1.Red Hat. (2021). What is Podman?  Erişim tarihi: Mart 17, 2023, from https://www.redhat.com/en/topics/containers/what-is-podman#how-does-podman-manage-containers

2. ACloudGuru. (n.d.). Hands-On with Podman Containers. Erişim tarihi: Mart 17, 2023, from https://learn.acloud.guru/course/hands-on-with-podman-containers/dashboard

3.Podman documentation. (n.d.). Erişim tarihi: Mart 17, 2023, from https://docs.podman.io/en/latest/

4.Red Hat. (n.d.). podman(1) - Linux man page. Erişim tarihi: Mart 17, 2023, from https://www.systutorials.com/docs/linux/man/1-podman/

5. Red Hat. (n.d.). Managing containers with Podman. Erişim tarihi: Mart 17, 2023, from https://rol.redhat.com/rol/app/courses/rh134-9.0/pages/ch11