Image dan Kontainer

Mencari Image

Cari image dengan kata kunci:

$ podman search fedora
$ podman search homeassistant

Registri yang akan dicari dikonfigurasi dalam file /etc/containers/registry.conf.

Hasil pencarian akan mencakup lokasi registri dan nama image.

  • Nama registri mungkin menyertakan nomor port.

  • Nama image terdiri dari USER/REPO. Pengguna dapat berupa individu, tim, atau perusahaan yang mengunggah image ke registri.

  • Repositori image berisi image yang telah diberi tag dan lapisan tersembunyi. Sebagian besar repositori berisi image dengan tag 'latest'.

  • Saat mengunduh image dengan perintah pull, run, atau build, Anda dapat menentukan image dengan tag tertentu. Defaultnya adalah menarik image yang diberi tag 'latest'.

Perintah skopeo adalah utilitas untuk bekerja dengan image di berbagai lingkungan kontainer. Perintah ini dibuat untuk melihat informasi di registri jarak jauh dan kini menjadi perintah sekaligus pustaka untuk menyalin image dengan berbagai transport. Perintah ini digunakan untuk mengelola image kontainer dan penyimpanan image dari jarak jauh maupun secara lokal, semuanya tanpa memerlukan akses root. Perintah ini juga dapat meneruskan kredensial autentikasi bila diperlukan oleh repositori.

Lihat tanggal pembuatan, arsitektur, label, tag, dan checksum lapisan dari repositori image jarak jauh:

$ skopeo inspect docker://registry.fedoraproject.org/fedora-minimal

Mengelola Image Lokal

Saat Anda menjalankan kontainer, image terlebih dahulu diunduh ke sistem lokal. Terkadang berguna untuk mengunduh image terlebih dahulu sebagai perintah terpisah.

Defaultnya adalah menarik image terbaru dari registri default:

$ podman pull fedora

Anda juga dapat menentukan registri, pengguna, tag, atau seperti pada contoh berikut, beberapa kombinasi:

$ podman pull registry.fedoraproject.org/fedora-minimal:rawhide

Tampilkan daftar image lokal:

$ podman images
REPOSITORY                                           TAG       IMAGE ID       CREATED       SIZE
registry.fedoraproject.org/fedora-minimal            rawhide   8ecda3b9bc0d   2 days ago    164MB
docker.io/homeassistant/raspberrypi3-homeassistant   latest    3c74046ca2a7   3 days ago    1.05GB
docker.io/library/fedora                             latest    8b38e3af7237   4 weeks ago   315MB

Keluaran yang sama ditampilkan dengan podman image ls. Perhatikan perintah tunggal 'image' sebelum perintah tambahan 'ls'. Jika Anda memiliki banyak image, Anda mungkin ingin menentukan filter atau mengurutkan berdasarkan nilai selain tanggal pembuatan.

Sebagai pengguna, image lokal akan disimpan di direktori ~/.local/share/containers/. Setiap pengguna memiliki namespace-nya sendiri sehingga ini terpisah dari kontainer yang dijalankan sebagai root. Menampilkan daftar image yang tersedia untuk root akan menampilkan daftar yang berbeda atau kosong:

$ sudo podman images

Beberapa tindakan tidak dapat dilakukan dengan kontainer tanpa root (rootless). Beberapa perangkat dan volume akan mengharuskan Anda menarik dan menjalankan kontainer dalam namespace root. Podman v1.0 saat ini juga memerlukan root untuk penerbitan port. Versi berikutnya akan memungkinkan penerbitan port tanpa root.

Seperti image jarak jauh, image lokal juga dapat diperiksa:

$ podman inspect fedora

Untuk memeriksa image dengan tag selain 'latest', sertakan tag-nya:

$ podman inspect fedora-minimal:rawhide

Menjalankan Kontainer

Untuk meluncurkan kontainer gunakan:

$ podman run fedora

Dengan image fedora, kontainer akan mulai berjalan lalu keluar karena tidak ada yang berjalan lagi. Beberapa image dikonfigurasi untuk menjalankan aplikasi di latar depan dan kontainer tidak akan berhenti sampai aplikasi tersebut berhenti.

Untuk menampilkan daftar kontainer yang sedang berjalan gunakan:

$ podman container ls

Untuk melihat semua kontainer, termasuk yang telah keluar:

$ podman container ls -a
CONTAINER ID   IMAGE                             COMMAND     CREATED              STATUS                      PORTS   NAMES            IS INFRA
7835aaadd2d1   docker.io/library/fedora:latest   /bin/bash   About a minute ago   Exited (0) 14 seconds ago           hopeful_beaver   false

Kontainer yang telah keluar tetap disimpan agar data apa pun, termasuk log, dapat diperiksa sebelum hilang. Anda dapat memulai ulang kontainer yang telah keluar, namun alur kerja yang umum biasanya menghapus kontainer yang telah digunakan dan meluncurkan kontainer baru saat diperlukan.

Opsi pada perintah run dapat mengubah perilaku peluncuran kontainer:

$ podman run -it \ (1)
> --name demo \ (2)
> --rm \ (3)
> fedora /bin/bash (4)
bash-4.4#  (5)
1 Opsi -it mengaktifkan mode interaktif dan mengalokasikan pseudo-TTY.
2 Anda dapat memberi nama pada kontainer Anda. Tanpa opsi ini, nama acak akan dibuat secara otomatis.
3 Opsi --rm menyebabkan kontainer dihapus saat dihentikan. Ini menghemat ruang dan memungkinkan kontainer baru dimulai dengan nama yang sama.
4 Perintah yang akan dijalankan. Perintah tersebut harus ada di dalam image. Tidak semua image menyertakan bash.
5 Proses /bin/bash berjalan di latar depan. Saat Anda keluar dari shell, kontainer akan berhenti.

Menerbitkan Port

Jika aplikasi Anda mendengarkan di jaringan, Anda perlu memetakan port kontainer ke port lokal di perangkat Anda. Pada versi saat ini, penerbitan port memerlukan akses root sehingga image harus tersedia di namespace root.

Tambahkan opsi -p saat Anda meluncurkan kontainer:

$ sudo podman run -p 127.0.0.1:8080:80 --name demo mydemohttp:latest

Anda kemudian dapat terhubung ke aplikasi Anda melalui 127.0.0.1:8080

Formatnya adalah ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort.

Opsi lain untuk menerbitkan port dan banyak opsi run lainnya tersedia dan terdokumentasi dengan baik di halaman manual podman-run.

Memetakan direktori lokal

Anda mungkin ingin aplikasi Anda menulis log atau mengumpulkan data ke direktori di host. Beberapa kontainer mengharapkan file konfigurasi yang disesuaikan berada di perangkat host. Dalam kedua kasus tersebut, Anda dapat membuat bind mount dengan opsi --volume. Tentukan direktori host, titik mount di dalam kontainer, dan opsi mount apa pun.

Misalnya, Home Assistant mengharapkan file konfigurasi berada di perangkat host:

$ podman run -d --name="home-assistant" -v /home/pi/homeassistant:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/raspberrypi3-homeassistant

Memetakan perangkat lokal

Opsi --device akan menambahkan perangkat host ke kontainer. Tentukan nama perangkat host dan secara opsional, nama perangkat di kontainer beserta izin apa pun. Beberapa perangkat, seperti perangkat GPIO, akan memerlukan akses root.

Untuk mengakses perangkat GPIO host dari kontainer:

$ sudo podman run -it --rm --name demo-gpio --device=/dev/gpiochip0 fedora:latest /bin/bash

Terhubung ke Kontainer yang Sedang Berjalan

Anda juga dapat terhubung ke kontainer yang sedang berjalan. Tentukan nama atau ID kontainer dan perintah yang akan dijalankan:

$ podman exec -it demo /bin/bash

Anda juga dapat melihat log kontainer secara langsung dengan podman:

$ podman logs demo

Perintah exec dan logs juga merupakan bagian dari perintah podman container.

Menghapus Kontainer dan Image

Tampilkan daftar kontainer untuk melihat 'Container ID' dan 'name' dari setiap kontainer. Hapus kontainer dengan menentukan ID atau nama kontainer:

$ podman container rm demo

Penghapusan kontainer terjadi secara otomatis saat kontainer berhenti jika kontainer dimulai dengan opsi --rm.

Menghapus kontainer tidak menghapus image. Tampilkan daftar image lokal dengan podman images atau podman image ls. Hapus image menggunakan 'IMAGE ID' atau nama repositori beserta tag-nya:

$ podman rmi registry.fedoraproject.org/fedora-minimal:rawhide

Anda juga dapat menghapus image dengan perintah image:

$ podman image rm registry.fedoraproject.org/fedora-minimal:rawhide