Dokumentasi Podman

Pengenalan Container

Container adalah pembungkus yang berisi aplikasi dan juga dependensi yang dibutuhkan untuk menjalankan aplikasi tersebut. Menggunakan container memungkinkan kita untuk menjalankan suatu aplikasi tanpa tergantung pada sistem operasi.

APP Deployment

Untuk deployment suatu aplikasi ada beberapa metode, sebagai berikut:

Traditional

Traditiona deployment mengacu pada metode dimana aplikasi diinstall dan dijalankan langsung diatas sistem operasi yang sudah terinstall. Kelebihan menggunakan traditional deployment adalah sederhana dan langsung, sering digunakan untuk aplikasi dengan persyaratan yang stabil dan tidak memerlukan isolasi. Sedangkan kekurangannya aplikasi mungkin berbagi sumber daya dengan aplikasi lain yang berjalan di sistem operasi, yang dapat menyebabkan masalah jika ada konflik dependensi atau konfigurasi.

Virtualization

Virtualization deployment mengacu pada metode dimana aplikasi diinstall dan dijalankan diatas virtual machine yang sudah terinstall sistem operasi. Kelebihan menggunakan metode ini adalah dapat menjalankan berbagai sistem operasi untuk aplikasi yang akan dijalankan, dan aplikasi tersebut bisa saling terisolasi. Sedangkan kekurangan menggunakan metode ini adalah membuang” resource (RAM, CPU, Storage) karena butuh resource untuk menjalankan sistem operasi tersebut.

Container

Container deployment mengacu pada metode dimana aplikasi beserta dependensinya dibungkus dalam suatu container dan masing” container saling terisolasi. Kelebihan menggunakan metode ini adalah lebih ringan dan cepat dibandingkan menggunakan vm, dan juga lebih efisien. Sedangkan kekurangannya adalah sistem operasi host berbagi kernel dengan container, jadi untuk keamanan bisa dibilang kurang.

Container Runtime

Container runtime adalah sebuah software yang digunakan untuk menjalankan dan memanage container. Berikut adalah beberapa contoh container runtime.

  1. Docker
  2. Podman

Podman

Podman adalah alat bantu asli Linux tanpa daemon, sumber terbuka, yang dirancang untuk memudahkan menemukan, menjalankan, membangun, berbagi, dan menggunakan aplikasi menggunakan Open Containers Initiative (OCI) Containers dan Container Images. Podman menyediakan antarmuka baris perintah (CLI) yang akrab bagi siapa pun yang telah menggunakan Docker Container Engine. Sebagian besar pengguna dapat dengan mudah melakukan alias Docker ke Podman (alias docker = podman) tanpa masalah. Mirip dengan Mesin Kontainer umum lainnya (Docker, CRI-O, containerd), Podman bergantung pada Container Runtime yang sesuai dengan OCI (runc, crun, runv, dll) untuk berinteraksi dengan sistem operasi dan membuat kontainer yang sedang berjalan. Hal ini membuat kontainer berjalan yang dibuat oleh Podman hampir tidak dapat dibedakan dengan kontainer yang dibuat oleh mesin kontainer umum lainnya.

Arsitektur Podman

Basic Podman

attach: Menghubungkan ke kontainer yang sedang berjalan.
auto-update: Memperbarui kontainer secara otomatis sesuai kebijakan pembaruan mereka.
build: Membangun image dari Containerfile.
commit: Membuat image baru berdasarkan perubahan pada kontainer.
container: Mengelola kontainer.
cp: Menyalin file antara kontainer dan sistem file lokal.
create: Membuat kontainer tanpa memulainya.
diff: Menampilkan perubahan pada sistem file kontainer.
events: Menampilkan event sistem Podman.
exec: Menjalankan proses di kontainer yang sedang berjalan.
export: Mengekspor sistem file kontainer sebagai arsip tar.
farm: Mendistribusikan build ke mesin remote.
generate: Menghasilkan data terstruktur (misalnya, YAML) dari kontainer, pod, atau volume.
healthcheck: Mengelola cek kesehatan kontainer.
history: Menampilkan riwayat dari image yang ditentukan.
image: Mengelola image kontainer.
images: Daftar image di penyimpanan lokal.
import: Membuat image sistem file dari tarball.
info: Menampilkan informasi sistem Podman.
init: Menginisialisasi satu atau lebih kontainer.
inspect: Menampilkan konfigurasi objek berdasarkan ID.
kill: Membunuh satu atau lebih kontainer yang sedang berjalan dengan sinyal tertentu.
kube: Mengelola kontainer, pod, atau volume dari file terstruktur.
load: Memuat image dari arsip tar.
login: Masuk ke registry kontainer.
logout: Keluar dari registry kontainer.
logs: Mengambil log dari satu atau lebih kontainer.
machine: Mengelola mesin virtual.
manifest: Memanipulasi manifest image dan indeks.
mount: Memasang sistem file root kontainer.
network: Mengelola jaringan.
pause: Menjeda semua proses di satu atau lebih kontainer.
pod: Mengelola pod.
port: Menampilkan atau menunjukkan pemetaan port untuk kontainer.
ps: Daftar kontainer yang sedang berjalan.
pull: Mengambil image dari registry.
push: Mengirim image ke registry.
rename: Mengganti nama kontainer yang ada.
restart: Memulai ulang satu atau lebih kontainer.
rm: Menghapus satu atau lebih kontainer.
rmi: Menghapus satu atau lebih image.
run: Menjalankan perintah di kontainer baru.
save: Menyimpan image ke arsip.
search: Mencari image di registry.
secret: Mengelola rahasia.
start: Memulai satu atau lebih kontainer.
stats: Menampilkan statistik penggunaan sumber daya kontainer secara langsung.
stop: Menghentikan satu atau lebih kontainer.
system: Mengelola sistem Podman.
tag: Menambahkan tag pada image lokal.
top: Menampilkan proses yang sedang berjalan di kontainer.
unmount: Melepas sistem file root kontainer.
unpause: Mengaktifkan kembali proses di satu atau lebih kontainer.
unshare: Menjalankan perintah di namespace pengguna yang dimodifikasi.
untag: Menghapus tag dari image lokal.
update: Memperbarui kontainer yang ada.
version: Menampilkan informasi versi Podman.
volume: Mengelola volume.
wait: Menunggu hingga satu atau lebih kontainer berhenti.

HA WordPress dengan Haproxy + Podman

Instalasi Mysql, Podman, Haproxy, Podman Compose

srv
[root@srv ~]# dnf update -y[root@srv ~]# dnf install -y mysql-server containers-tools haproxy python3 python3-pip[root@srv ~]# pip3 install podman-compose

Maksure Service Running Well

srv
[root@srv ~]# systemctl enable –now mysqld podman haproxy

Create Database dan User

srv
[root@srv ~]# mysqlmysql> create database wpdb;mysql> create user ‘wpuser’@’%’ identified by ‘wppassword’;mysql> grant all privileges on wpdb.* to ‘wpuser’@’%’;mysql> flush privileges;

Membuat File Konfigurasi podman-compose 

srv
[root@srv ~]# mkdir wordpress[root@srv ~]# cd wordpress[root@srv wordpress]# nano docker-compose.yml…………………………services:  wordpress1:    image: docker.io/bitnami/wordpress:6    container_name: wp1    environment:      – WORDPRESS_DATABASE_HOST=172.23.15.15      – WORDPRESS_DATABASE_PORT_NUMBER=3306      – WORDPRESS_DATABASE_USER=wpuser      – WORDPRESS_DATABASE_PASSWORD=wppassword      – WORDPRESS_DATABASE_NAME=wpdb    networks:      wpnetwork:        ipv4_address: 192.168.89.101
  wordpress2:    image: docker.io/bitnami/wordpress:6    container_name: wp2    environment:      – WORDPRESS_DATABASE_HOST=172.23.15.15      – WORDPRESS_DATABASE_PORT_NUMBER=3306      – WORDPRESS_DATABASE_USER=wpuser      – WORDPRESS_DATABASE_PASSWORD=wppassword      – WORDPRESS_DATABASE_NAME=wpdb    networks:      wpnetwork:        ipv4_address: 192.168.89.102
  wordpress3:    image: docker.io/bitnami/wordpress:6    container_name: wp3    environment:      – WORDPRESS_DATABASE_HOST=172.23.15.15      – WORDPRESS_DATABASE_PORT_NUMBER=3306      – WORDPRESS_DATABASE_USER=wpuser      – WORDPRESS_DATABASE_PASSWORD=wppassword      – WORDPRESS_DATABASE_NAME=wpdb    networks:      wpnetwork:        ipv4_address: 192.168.89.103
networks:  wpnetwork:    driver: bridge    ipam:      config:        – subnet: 192.168.89.0/24          gateway: 192.168.89.1…………………………[root@srv wordpress]# podman-compose up -d

Membuat Ssl Certificate

srv
[root@srv wordpress]# cd /etc/haproxy[root@srv haproxy]# openssl genrsa -out server.key 2048[root@srv haproxy]# openssl rsa -in server.key -out server.key[root@srv haproxy]# openssl req -new -days 3650 -key server.key -out server.csr—–Country Name (2 letter code) [AU]:IDState or Province Name (full name) [Some-State]:JAKARTA    Locality Name (eg, city) []:WEST JAKARTAOrganization Name (eg, company) [Internet Widgits Pty Ltd]:ID NETWORKERS ACADEMYOrganizational Unit Name (eg, section) []:SYSADMINCommon Name (e.g. server FQDN or YOUR name) []:idn-academy.idEmail Address []:hostmaster@idn-academy.id
Please enter the following ‘extra’ attributesto be sent with your certificate requestA challenge password []:An optional company name []:—–[root@srv haproxy]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650Certificate request self-signature oksubject=C = ID, ST = JAKARTA, L = WEST JAKARTA, O = ID NETWORKERS ACADEMY, OU = SYSADMIN, CN = idn-academy.id, emailAddress = hostmaster@idn-academy.id…………………………[root@srv haproxy]# cat server.crt server.key > fullchain.pem[root@srv haproxy]# nano haproxy.cfgglobal  stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners  log stdout format raw local0 info
defaults  mode http  timeout client 10s  timeout connect 5s  timeout server 10s  timeout http-request 10s  log global
frontend stats  bind *:8404  stats enable  stats uri /  stats refresh 10s
frontend http  bind :80  default_backend container
backend container  balance roundrobin  server wp1 192.168.89.101:8080 check  server wp2 192.168.89.102:8080 check  server wp3 192.168.89.103:8080 check
frontend https  bind :443 ssl crt /etc/haproxy/fullchain.pem  default_backend containers
backend containers  balance roundrobin  server wp1 192.168.89.101:8443 check ssl verify none  server wp2 192.168.89.102:8443 check ssl verify none  server wp3 192.168.89.103:8443 check ssl verify none…………………………[root@srv haproxy]# systemctl restart haproxy

Konfigurasi Firewall

srv
[root@srv haproxy]# firewall-cmd –add-port=80/tcp –permanent[root@srv haproxy]# firewall-cmd –add-port=443/tcp –permanent[root@srv haproxy]# firewall-cmd –reload

Test WordPress

Tertarik mengikuti training di ID-Networkers, kami menyediakan berbagai pilihan training yang bisa kamu ikuti. Klik disini untuk info lengkapnya.

Penulis : Achmad Alif Nasrulloh