Cara Mengelola Kontainer Menggunakan Podman dan Skopeo di RHEL 8


Salah satu tantangan yang dihadapi pengembang di masa lalu adalah membuat aplikasi dapat berjalan dengan andal di berbagai lingkungan komputasi. Seringkali aplikasi tidak berjalan sesuai harapan atau mengalami error dan gagal total. Dan dari situlah konsep kontainer lahir.

Apa itu Gambar Kontainer?

Gambar Container adalah file statis yang dikirimkan bersama kode yang dapat dieksekusi dan berjalan di lingkungan terisolasi. Gambar kontainer terdiri dari perpustakaan sistem, dependensi & pengaturan platform lain yang diperlukan oleh aplikasi untuk berjalan di lingkungan yang beragam.

Red Hat Linux menyediakan seperangkat alat container berguna yang dapat Anda manfaatkan untuk bekerja secara langsung dengan container Linux menggunakan perintah docker yang memerlukan. Ini termasuk:

  • Podman – Ini adalah mesin kontainer tanpa daemon untuk menjalankan dan mengelola kontainer OCI dalam mode root atau tanpa root. Podman mirip dengan Docker dan memiliki opsi perintah yang sama kecuali Docker adalah daemon. Anda dapat menarik, menjalankan, dan mengelola image container menggunakan podman dengan cara yang hampir sama seperti yang Anda lakukan dengan Docker. Podman hadir dengan banyak fitur lanjutan, terintegrasi penuh dengan sistem, dan menawarkan dukungan Namespace pengguna yang mencakup menjalankan container tanpa memerlukan pengguna root.
  • Skopeo: Ini adalah alat baris perintah yang digunakan untuk menyalin gambar kontainer dari satu registri ke registri lainnya. Anda dapat menggunakan Skopeo untuk menyalin gambar ke dan dari host tertentu serta menyalin gambar ke registri atau lingkungan kontainer lain. Selain menyalin gambar, Anda dapat menggunakannya untuk memeriksa gambar dari berbagai registri dan menggunakan tanda tangan untuk membuat dan memverifikasi gambar.
  • Buildah: Ini adalah seperangkat alat baris perintah yang digunakan untuk membuat dan mengelola gambar OCI container menggunakan file Docker.

Pada artikel ini, kita akan fokus pada Mengelola container menggunakan podman dan Skopeo.

Mencari Gambar Kontainer dari Remote Registry

Perintah penelusuran podman memungkinkan Anda menelusuri registry jarak jauh yang dipilih untuk mencari image container. Daftar default registry ditentukan dalam file registries.conf yang terletak di direktori /etc/containers/.

Registri ditentukan oleh 3 bagian.

  • [registries.search] – Bagian ini menentukan registry default yang dapat digunakan oleh podman untuk mencari gambar container. Ia mencari gambar yang diminta di registri registry.access.redhat.com, registry.redhat.io, dan docker.io.

  • [registries.insecure]– Bagian ini menentukan registry yang tidak menerapkan enkripsi TLS, yaitu registry yang tidak aman. Secara default, tidak ada entri yang ditentukan.

  • [registries.block] – Ini memblokir atau menolak akses ke registri tertentu dari sistem lokal Anda. Secara default, tidak ada entri yang ditentukan.

Sebagai pengguna biasa (non-root) yang menjalankan perintah podman, Anda dapat menentukan file registries.conf Anda sendiri di direktori home Anda ($HOME/.config /containers/registries.conf) untuk mengganti pengaturan seluruh sistem.

Aturan Saat Menentukan Registri

Saat Anda menentukan registri, ingatlah hal berikut:

  • Setiap registri harus diapit oleh tanda kutip tunggal.
  • Registri dapat ditentukan menggunakan nama host atau alamat IP.
  • Jika beberapa pendaftar ditentukan, maka pendaftar tersebut harus dipisahkan dengan koma.
  • Jika registri menggunakan port non-standar – baik port TCP port 443 untuk aman dan 80 untuk tidak aman, – nomor port harus ditentukan di samping nama registri, misalnya. registry.example.com:5566.

Untuk mencari registri untuk gambar kontainer menggunakan sintaks:

podman search registry/container_image

Misalnya, untuk mencari gambar Redis di registri registry.redhat.io, jalankan perintah:

podman search registry.redhat.io/redis

Untuk mencari gambar container MariaDB, jalankan.

podman search registry.redhat.io/mariadb

Untuk mendapatkan deskripsi yang rumit tentang gambar container, gunakan opsi --no-trunc sebelum nama gambar container dari hasil yang Anda dapatkan. Misalnya, kami akan mencoba mendapatkan penjelasan detail tentang gambar container MariaDB seperti yang ditunjukkan:

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

Menarik Gambar Kontainer

Menarik atau mengambil gambar kontainer dari registri jarak jauh mengharuskan Anda mengautentikasi terlebih dahulu sebelum melakukan hal lain. Misalnya, untuk mengambil image container MariaDB, pertama-tama login ke registri Redhat:

podman login

Berikan nama pengguna dan kata sandi Anda dan tekan 'ENTER' pada keyboard Anda. Jika semuanya berjalan dengan baik, Anda akan mendapatkan pesan konfirmasi bahwa login ke registri berhasil.

Login Succeeded!

Sekarang, Anda dapat menarik gambar menggunakan sintaks yang ditunjukkan:

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

<registry> mengacu pada host jarak jauh atau registri yang menyediakan repositori gambar kontainer pada <port> TCP. <namespace> dan <name> secara kolektif menetapkan gambar container berdasarkan <namespace> di registri. Terakhir, opsi <tag> menentukan versi gambar container. Jika tidak ada yang ditentukan, tag default – terbaru – digunakan.

Selalu disarankan untuk menambahkan registri tepercaya, yaitu registri yang menyediakan enkripsi dan tidak mengizinkan pengguna anonim membuat akun dengan nama acak.

Untuk menarik image MariaDB, jalankan perintah:

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

Untuk penarikan gambar kontainer berikutnya, tidak diperlukan login lebih lanjut karena Anda sudah diautentikasi. Untuk menarik gambar container Redis, cukup jalankan:

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

Mencantumkan Gambar Kontainer

Setelah Anda selesai menarik gambar, Anda dapat melihat gambar yang saat ini ada di host Anda dengan menjalankan perintah gambar podman.

podman images

Memeriksa Gambar Kontainer

Sebelum menjalankan sebuah container, ada baiknya untuk menyelidiki gambar tersebut dan memahami fungsinya. Perintah podman inspeksi mencetak lautan metadata tentang container seperti OS dan Arsitektur.

Untuk memeriksa gambar, jalankan perintah podman inspeksi diikuti dengan ID gambar atau repositori.

podman inspect IMAGE ID
OR
podman inspect REPOSITORY

Pada contoh di bawah, kita sedang memeriksa container MariaDB.

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

Untuk mengambil metadata tertentu untuk sebuah container, teruskan opsi --format diikuti dengan metadata dan identitas container ( ID Gambar atau nama ).

Pada contoh di bawah, kami mengambil informasi tentang arsitektur dan deskripsi container dasar RHEL 8 yang termasuk dalam bagian ‘Label’.

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

Untuk memeriksa citra jarak jauh dari registri lain, gunakan perintah skopeo inspeksi. Pada contoh di bawah, kami memeriksa gambar init RHEL 8 yang dihosting di Docker.

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

Menandai Gambar Kontainer

Seperti yang mungkin sudah Anda ketahui, nama gambar biasanya bersifat umum. Misalnya, gambar redis diberi label:

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

Memberi tag pada gambar memberi mereka nama yang lebih intuitif untuk lebih memahami isinya. Dengan menggunakan perintah tag podman, Anda dapat membuat tag gambar yang pada dasarnya merupakan alias untuk nama gambar yang terdiri dari bagian-bagian berbeda.

Ini adalah:

registry/username/NAME:tag

Misalnya, untuk mengubah nama generik gambar Redis yang memiliki ID 646f2730318c , kita akan menjalankan perintah:

podman tag 646f2730318c myredis

Untuk menambahkan tag di akhir, tambahkan titik dua penuh diikuti dengan nomor tag:

podman tag 646f2730318c myredis:5.0

Tanpa menambahkan nomor tag, itu hanya akan diberi atribut terbaru.

Menjalankan Gambar Kontainer

Untuk menjalankan container, gunakan perintah podman run. Misalnya:

podman run image_id

Untuk menjalankan container secara diam-diam di latar belakang sebagai layanan daemon, gunakan opsi -d seperti yang ditunjukkan.

podman run -d image_id

Misalnya, untuk menjalankan gambar redis dengan ID 646f2730318c, kita akan menjalankan perintah:

podman run -d 646f2730318c

Jika Anda menjalankan container berdasarkan sistem operasi seperti gambar dasar RHEL 8, Anda dapat memperoleh akses ke shell menggunakan direktif -it. Opsi -i membuat sesi interaktif sementara -t memunculkan sesi terminal. Opsi --name menyetel nama kontainer menjadi mybash sedangkan id gambar ecbc6f53bba0 dari gambar dasar.

podman run -it --name=mybash ecbc6f53bba0

Setelah itu, Anda dapat menjalankan perintah shell apa pun. Pada contoh di bawah, kami memverifikasi versi OS dari image container.

cat /etc/os-release

Untuk keluar dari container, cukup jalankan perintah exit.

exit

Setelah kontainer keluar, maka secara otomatis berhenti. Untuk memulai kembali container, gunakan perintah podman start dengan tanda -ai seperti yang ditunjukkan.

podman start -ai mybash

Sekali lagi, ini memberi Anda akses ke shell.

Mencantumkan Gambar Kontainer yang Berjalan

Untuk membuat daftar container yang sedang berjalan, gunakan perintah podman ps seperti yang ditunjukkan.

podman ps

Untuk melihat semua container termasuk yang sudah keluar setelah dijalankan, gunakan perintah:

podman ps -a

Konfigurasikan Gambar Kontainer untuk Mulai Otomatis di Layanan Systemd

Di bagian ini, kami fokus pada bagaimana sebuah container dapat dikonfigurasi untuk berjalan langsung pada sistem RHEL sebagai layanan systemd.

Pertama, dapatkan gambar pilihan Anda. Dalam hal ini, kami telah menarik gambar Redis dari hub buruh pelabuhan:

podman pull docker.io/redis

Jika SELinux berjalan di sistem Anda, Anda perlu mengaktifkan boolean container_manage_cgroup untuk menjalankan container dengan systemd.

setsebool -p container_manage_cgroup on

Setelah itu, jalankan gambar container di latar belakang dan tetapkan ke nama gambar pilihan Anda. Dalam contoh ini, kita menamai gambar kita redis_server dan memetakan port 6379 dari penampung ke host RHEL 8 kita

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

Selanjutnya, kita akan membuat file konfigurasi unit systemd untuk redis di direktori /etc/systemd/system/.

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

Tempel konten di bawah ini ke file.

[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

Simpan dan keluar dari file.

Selanjutnya, konfigurasikan container untuk memulai secara otomatis saat bootup.

systemctl enable redis-container.service

Selanjutnya, mulai penampung dan verifikasi status berjalannya.

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

Konfigurasikan Penyimpanan Persisten untuk Gambar Kontainer

Saat menjalankan container, sebaiknya konfigurasikan penyimpanan eksternal persisten di host. Ini menyediakan cadangan jika kontainer mogok atau terhapus secara tidak sengaja.

Untuk menyimpan data, kita akan memetakan direktori yang terletak di host ke direktori di dalam container.

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

Opsi --privileged diteruskan ketika SELinux disetel ke penerapan. Opsi -v menentukan volume eksternal yang terletak di host. Volume kontainer di sini adalah direktori /mnt.

Setelah kita mengakses shell, kita akan membuat file contoh testing.txt di direktori /mnt seperti yang ditunjukkan.

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

Kami kemudian akan keluar dari penampung dan memeriksa apakah file tersebut ada di penyimpanan eksternal yang berada di host

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

OutputIni menguji penyimpanan eksternal persisten.

Menghentikan dan Melepas Kontainer

Setelah selesai menjalankan container, Anda dapat menghentikannya menggunakan perintah podman stop diikuti dengan container-id yang dapat Anda peroleh dari podman ps perintah.

podman stop container-id

Untuk menghapus container yang tidak diperlukan lagi, pertama-tama pastikan Anda menghentikannya lalu aktifkan perintah podman rm diikuti dengan id atau nama container sebagai opsi.

podman rm container-id

Untuk menghapus beberapa kontainer sekaligus dalam satu perintah, tentukan id kontainer yang dipisahkan dengan spasi.

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

Untuk menghapus semua container Anda, jalankan perintah:

podman rm -a

Menghapus Gambar

Untuk menghapus sebuah gambar, pertama-tama, pastikan semua container yang dihasilkan dari gambar tersebut dihentikan dan dihapus seperti yang dibahas dalam sub-topik sebelumnya.

Selanjutnya lanjutkan dan jalankan perintah podman -rmi diikuti dengan ID gambar seperti pada gambar:

podman -rmi image-id

Kesimpulan

Ini adalah penutup bab tentang mengelola dan bekerja dengan container di RHEL 8. Kami berharap panduan ini memberikan pemahaman yang baik tentang container dan bagaimana Anda dapat berinteraksi dan mengelolanya di sistem RHEL Anda menggunakan podman dan Skopeo.