RHEL 8'de Podman ve Skopeo Kullanılarak Konteynerler Nasıl Yönetilir


Geliştiricilerin geçmişte karşılaştığı zorluklardan biri, uygulamaların birden fazla bilgi işlem ortamında güvenilir şekilde çalışmasını sağlamaktı. Çoğu zaman uygulamalar beklendiği gibi çalışmadı veya hatalarla karşılaşıldı ve tamamen başarısız oldu. İşte konteynerler kavramı da burada doğdu.

Konteyner Görselleri nedir?

Kapsayıcı görüntüleri, yalıtılmış bir ortamda çalışan yürütülebilir kodla birlikte gönderilen statik dosyalardır. Bir konteyner görüntüsü, uygulamanın çeşitli ortamlarda çalışması için ihtiyaç duyduğu sistem kitaplıklarını, bağımlılıkları ve diğer platform ayarlarını içerir.

Red Hat Linux, gerekli docker komutlarını kullanarak doğrudan Linux kapsayıcılarıyla çalışmak için kullanabileceğiniz bir dizi kullanışlı kapsayıcı araç sağlar. Bunlar şunları içerir:

  • Podman – Bu, OCI kapsayıcılarını kök veya köksüz modda çalıştırmak ve yönetmek için kullanılan, arka plan programı olmayan, kapsayıcı bir motordur. Podman, Docker'a benzer ve Docker'un bir arka plan programı olması dışında aynı komut seçeneklerine sahiptir. Podman'i kullanarak, Docker'da yaptığınız gibi, kapsayıcı görüntülerini çekebilir, çalıştırabilir ve yönetebilirsiniz. Podman pek çok gelişmiş özellikle birlikte gelir, sistemlerle tamamen entegre olur ve kök kullanıcıya ihtiyaç duymadan kapsayıcıları çalıştırmayı içeren kullanıcı Ad Alanı desteği sunar.
  • Skopeo: Bu, kapsayıcı görüntülerini bir kayıt defterinden diğerine kopyalamak için kullanılan bir komut satırı aracıdır. Görüntüleri belirli bir ana makineye veya belirli bir ana makineden kopyalamak ve ayrıca görüntüleri başka bir kapsayıcı kayıt defterine veya ortamına kopyalamak için Skopeo'yu kullanabilirsiniz. Görüntüleri kopyalamanın yanı sıra, çeşitli kayıtlardaki görüntüleri incelemek ve görüntüleri oluşturmak ve doğrulamak için imzaları kullanmak için de kullanabilirsiniz.
  • Buildah: Bu, Docker dosyalarını kullanarak kapsayıcı OCI görüntülerini oluşturmak ve yönetmek için kullanılan bir dizi komut satırı aracıdır.

Bu makalede podman ve Skopeo'yu kullanarak kapsayıcıları yönetmeye odaklanacağız.

Uzak Kayıt Defterinden Konteyner Görüntülerini Arama

Podman arama komutu, kapsayıcı görüntüler için seçilen uzak kayıtlarda arama yapmanızı sağlar. Varsayılan kayıt listesi listesi, /etc/containers/ dizininde bulunan registries.conf dosyasında tanımlanır.

Kayıtlar 3 bölümle tanımlanır.

  • [registries.search] – Bu bölüm, podman'in kapsayıcı görselleri arayabileceği varsayılan kayıtları belirtir. İstenen resmi registry.access.redhat.com, registry.redhat.io ve docker.io kayıt defterlerinde arar.

  • [registries.insecure]– Bu bölüm, TLS şifrelemesini uygulamayan kayıtları, yani güvenli olmayan kayıtları belirtir. Varsayılan olarak hiçbir giriş belirtilmez.

  • [registries.block] – Bu, yerel sisteminizden belirtilen kayıtlara erişimi engeller veya reddeder. Varsayılan olarak hiçbir giriş belirtilmez.

Podman komutunu çalıştıran normal (root olmayan) bir kullanıcı olarak, ana dizininizde ($HOME/.config) kendi registries.conf dosyanızı tanımlayabilirsiniz. Sistem genelindeki ayarları geçersiz kılmak için /containers/registries.conf) kullanın.

Kayıtları Belirlerken Kurallar

Kayıtları belirlerken aşağıdakileri aklınızda bulundurun:

  • Her kayıt defteri tek tırnak içine alınmalıdır.
  • Kayıtlar bir ana bilgisayar adı veya IP adresi kullanılarak belirtilebilir.
  • Birden fazla kayıt belirtilmişse, bunlar virgülle ayrılmalıdır.
  • Bir kayıt defteri standart olmayan bir bağlantı noktası kullanıyorsa - güvenli için 443 numaralı bağlantı noktası TCP bağlantı noktaları ve güvenli olmayan için 80 numaralı bağlantı noktası - bağlantı noktası numarası, kayıt defteri adının yanında belirtilmelidir; ör. registry.example.com:5566.

Sözdizimini kullanarak bir kapsayıcı görüntüsü için kayıt defterinde arama yapmak için:

podman search registry/container_image

Örneğin, registry.redhat.io kayıt defterinde bir Redis resmi aramak için şu komutu çağırın:

podman search registry.redhat.io/redis

MariaDB kapsayıcı görüntüsü çalıştırmasını aramak için.

podman search registry.redhat.io/mariadb

Bir kapsayıcı görüntünün ayrıntılı bir açıklamasını elde etmek için, aldığınız sonuçlardan kapsayıcı görüntünün adından önce --no-trunc seçeneğini kullanın. Örneğin, gösterildiği gibi MariaDB konteyner görüntüsünün ayrıntılı bir açıklamasını elde etmeye çalışacağız:

podman search --no-trunc registry.redhat.io/rhel8/mariadb-103

Konteyner Görüntülerini Çekme

Uzak bir kayıt defterinden kapsayıcı görüntülerini çekmek veya almak, her şeyden önce kimlik doğrulamanızı gerektirir. Örneğin, MariaDB kapsayıcı görüntüsünü almak için önce Redhat kayıt defterinde oturum açın:

podman login

Kullanıcı adınızı ve şifrenizi girin ve klavyenizde 'ENTER' tuşuna basın. Her şey yolunda giderse, kayıt defterine girişin başarılı olduğunu belirten bir onay mesajı almalısınız.

Login Succeeded!

Artık gösterilen sözdizimini kullanarak görüntüyü çekebilirsiniz:

podman pull <registry>[:<port>]/[<namespace>/]<name>:<tag>

<registry>, TCP <port> üzerindeki kapsayıcı görüntülerinin deposunu sağlayan uzak ana bilgisayarı veya kayıt defterini ifade eder. <namespace> ve <name> toplu olarak kayıt defterindeki <namespace> temel alınarak bir kapsayıcı görüntüsü belirtir. Son olarak <tag> seçeneği konteyner görüntüsünün sürümünü belirtir. Hiçbiri belirtilmezse varsayılan etiket (en son) kullanılır.

Şifreleme sağlayan ve anonim kullanıcıların rastgele adlarla hesap oluşturmasına izin vermeyen güvenilir kayıt defterlerinin eklenmesi her zaman önerilir.

MariaDB görüntüsünü çekmek için şu komutu çalıştırın:

podman pull registry.redhat.io/rhel8/mariadb-103
  • <registry> – kayıt defteri.redhat.io
  • <namespace> – rhel8
  • – MariaDB
  • – 103

Sonraki konteyner görüntüleri çekimi için, zaten kimliğiniz doğrulanmış olduğundan başka oturum açmanıza gerek yoktur. Bir Redis kapsayıcı görüntüsünü çekmek için şunu çalıştırmanız yeterlidir:

podman pull registry.redhat.io/rhscl/redis-5-rhel7

Kapsayıcı Görüntülerini Listeleme

Görüntüleri çekmeyi tamamladığınızda, podman görüntüleri komutunu çalıştırarak ana makinenizde mevcut olan görüntüleri görüntüleyebilirsiniz.

podman images

Container Görüntülerini İnceleme

Bir konteyneri çalıştırmadan önce görüntüyü incelemek ve ne yaptığını anlamak her zaman iyi bir fikirdir. Podman inspect komutu, işletim sistemi ve Mimari gibi kapsayıcı hakkında bir dizi meta veri yazdırır.

Bir görüntüyü incelemek için podman inspect komutunu ve ardından görüntü kimliğini veya deposunu çalıştırın.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

Aşağıdaki örnekte MariaDB kapsayıcısını inceliyoruz.

podman inspect registry.redhat.io/rhel8/mariadb-103

Bir kapsayıcıya ilişkin belirli meta verileri çekmek için --format seçeneğini ve ardından meta verileri ve kapsayıcı kimliğini ( Görüntü Kimliği veya adı ) iletin.

Aşağıdaki örnekte, "Etiketler" bölümünün altına giren RHEL 8 temel konteynerinin mimarisi ve açıklaması hakkında bilgi alıyoruz.

podman inspect --format=’{{.Labels.architecture}}’ image ID
podman inspect --format=’{{.Labels.description}}’ image ID

Başka bir kayıt defterindeki uzak bir görüntüyü incelemek için skopeo inspect komutunu kullanın. Aşağıdaki örnekte Docker'da barındırılan bir RHEL 8 başlangıç görüntüsünü inceliyoruz.

skopeo inspect docker://registry.redhat.io/rhel8-beta/rhel-init

Kapsayıcı Görüntülerini Etiketleme

Sizin de fark etmiş olabileceğiniz gibi, resim adları genellikle genel niteliktedir. Örneğin, redis görüntüsü şu şekilde etiketlenmiştir:

registry.redhat.io/rhscl/redis-5-rhel7

Resimleri etiketlemek, içerdiklerini daha iyi anlamaları için onlara daha sezgisel bir ad verir. Podman etiketi komutunu kullanarak, aslında farklı parçalardan oluşan bir resim adının takma adı olan bir resim etiketi oluşturabilirsiniz.

Bunlar:

registry/username/NAME:tag

Örneğin, 646f2730318c kimliğine sahip Redis görüntüsünün genel adını değiştirmek için şu komutu uygulayacağız:

podman tag 646f2730318c myredis

Sona bir etiket eklemek için tam iki nokta üst üste ve ardından etiket numarasını ekleyin:

podman tag 646f2730318c myredis:5.0

Etiket numarası eklenmeden yalnızca en son özellik atanacaktır.

Konteyner Görüntülerini Çalıştırma

Bir kapsayıcıyı çalıştırmak için podman run komutunu kullanın. Örneğin:

podman run image_id

Bir kapsayıcıyı arka planda sessizce bir daemon hizmeti olarak çalıştırmak için gösterildiği gibi -d seçeneğini kullanın.

podman run -d image_id

Örneğin, 646f2730318c kimliğiyle redis görüntüsünü çalıştırmak için şu komutu çağıracağız:

podman run -d 646f2730318c

RHEL 8 temel görüntüsü gibi bir işletim sistemini temel alan bir kapsayıcı çalıştırıyorsanız, -it yönergesini kullanarak kabuğa erişim sağlayabilirsiniz. -i seçeneği etkileşimli bir oturum oluştururken, -t bir terminal oturumu oluşturur. --name seçeneği kapsayıcı adını mybash olarak ayarlarken, temel görüntünün ecbc6f53bba0 görüntü kimliğidir.

podman run -it --name=mybash ecbc6f53bba0

Daha sonra herhangi bir kabuk komutunu çalıştırabilirsiniz. Aşağıdaki örnekte kapsayıcı görüntüsünün işletim sistemi sürümünü doğruluyoruz.

cat /etc/os-release

Konteynerden çıkmak için çıkış komutunu çağırmanız yeterlidir.

exit

Konteynerden çıkıldığında otomatik olarak durur. Kabı yeniden başlatmak için podman start komutunu gösterildiği gibi -ai işaretiyle kullanın.

podman start -ai mybash

Bu bir kez daha kabuğa erişmenizi sağlar.

Çalışan Container Görüntülerini Listeleme

Şu anda çalışan kapsayıcıları listelemek için gösterildiği gibi podman ps komutunu kullanın.

podman ps

Çalıştırdıktan sonra çıkanlar da dahil olmak üzere tüm kapsayıcıları görüntülemek için şu komutu kullanın:

podman ps -a

Konteyner Görüntülerini Systemd Hizmeti Altında Otomatik Başlatılacak Şekilde Yapılandırma

Bu bölümde, bir konteynerin doğrudan RHEL sisteminde bir systemd hizmeti olarak çalışacak şekilde nasıl yapılandırılabileceğine odaklanıyoruz.

İlk önce tercih ettiğiniz resmi alın. Bu durumda, Redis görüntüsünü docker hub'ından aldık:

podman pull docker.io/redis

Sisteminizde SELinux çalışıyorsa, konteynerleri systemd ile çalıştırmak için container_manage_cgroup boolean'ını etkinleştirmeniz gerekir.

setsebool -p container_manage_cgroup on

Daha sonra konteyner görüntüsünü arka planda çalıştırın ve tercih ettiğiniz görüntü adına atayın. Bu örnekte, görüntümüze redis_server adını verdik ve 6379 bağlantı noktasını kapsayıcıdan RHEL 8 ana makinemize eşledik

podman run -d --name redis_server -p 6379:6379 redis

Daha sonra, /etc/systemd/system/ dizininde redis için bir systemd birim yapılandırma dosyası oluşturacağız.

vim /etc/systemd/system/redis-container.service

Aşağıdaki içeriği dosyaya yapıştırın.

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

Dosyayı kaydedip çıkın.

Daha sonra, kapsayıcıyı açılışta otomatik olarak başlayacak şekilde yapılandırın.

systemctl enable redis-container.service

Daha sonra kapsayıcıyı başlatın ve çalışma durumunu doğrulayın.

systemctl start redis-container.service
systemctl status redis-container.service

Konteyner Görüntüleri için Kalıcı Depolamayı Yapılandırma

Konteynerleri çalıştırırken, ana bilgisayarda kalıcı harici depolamayı yapılandırmak akıllıca olacaktır. Bu, konteynerin çökmesi veya yanlışlıkla kaldırılması durumunda bir yedekleme sağlar.

Verileri kalıcı kılmak için, ana makinede bulunan bir dizini kapsayıcının içindeki bir dizine eşleyeceğiz.

podman run --privileged -it -v /var/lib/containers/backup_storage:/mnt registry.redhat.io/ubi8/ubi /bin/bash

SELinux zorunlu kılınacak şekilde ayarlandığında --privileged seçeneği iletilir. -v seçeneği, ana bilgisayarda bulunan harici birimi belirtir. Buradaki kapsayıcı birimi /mnt dizinidir.

Kabuğa eriştikten sonra, gösterildiği gibi /mnt dizininde testing.txt örnek dosyasını oluşturacağız.

echo "This tests persistent external storage" > /mnt/testing.txt

Daha sonra kapsayıcıdan çıkacağız ve dosyanın ana makinede bulunan harici depolama biriminde bulunup bulunmadığını kontrol edeceğiz

exit
cat /var/lib/containers/backup_storage/testing.txt

ÇıktıBu, kalıcı harici depolamayı test eder.

Konteynerlerin Durdurulması ve Çıkarılması

Kapsayıcınızı çalıştırmayı tamamladığınızda, podman stop komutunu ve ardından podman ps<'den alabileceğiniz konteyner kimliğini kullanarak onu durdurabilirsiniz. komutu.

podman stop container-id

Artık ihtiyacınız olmayan kapsayıcıları kaldırmak için öncelikle onu durdurduğunuzdan emin olun ve ardından podman rm komutunu ve ardından bir seçenek olarak kapsayıcı kimliğini veya adını çağırın.

podman rm container-id

Tek komutla birden fazla kapsayıcıyı tek seferde kaldırmak için kapsayıcı kimliklerini boşlukla ayırarak belirtin.

podman rm container-id-1 container-id-2 container-id-3

Tüm kaplarınızı temizlemek için şu komutu çalıştırın:

podman rm -a

Bir Resmin Kaldırılması

Bir görüntüyü kaldırmak için öncelikle görüntülerden oluşturulan tüm kapsayıcıların durdurulduğundan ve önceki alt başlıkta tartışıldığı gibi kaldırıldığından emin olun.

Ardından, podman -rmi komutunu çalıştırın ve ardından gösterildiği gibi görüntünün kimliğini girin:

podman -rmi image-id

Çözüm

Bu, RHEL 8'de kapsayıcıları yönetme ve bunlarla çalışma hakkındaki bu bölümü tamamlıyor. Bu kılavuzun kapsayıcılar hakkında yeterli bir anlayış sağladığını ve podman ve Skopeo'yu kullanarak RHEL sisteminizde bunları nasıl etkileşime geçirebileceğinizi ve yönetebileceğinizi umuyoruz.