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.
- Docker
- 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