Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

คู่มือเริ่มต้น Podman Containers บน Linux

Podman (Pod Manager) เป็น container engine แบบ daemonless ตรงข้ามกับ Docker ที่ต้องการ daemon (dockerd) รันเป็น root Podman รันได้แบบ rootless → สูงกว่า, เบากว่า, เข้ากันได้กับ Docker CLI/Images

Container คืออะไร?

Virtualization ระดับ OS: แยก process, network, filesystem, users แต่ง kernel เดียวกัน เบากว่า VM มาก เริ่มในวินาที

Podman vs Docker

คุณสมบัติDockerPodman
ArchitectureClient-Server (daemon)Daemonless (fork/exec)
Root requiredใช่ (ปกติ)ไม่ (rootless mode)
SecurityRoot escape riskRootless = user namespace isolation
CLI Compatibilityมาตรฐานเกือบเหมือน Docker (alias docker=podman)
PodsDocker Compose/SwarmBuilt-in Pod concept (คล้าย Kubernetes)

ติดตั้ง Podman

# Ubuntu/Debian
sudo apt install podman
# Fedora/RHEL/CentOS/AlmaLinux
sudo dnf install podman
# Arch/Manjaro
sudo pacman -S podman
# openSUSE
sudo zypper install podman

ใช้งานพื้นฐาน

รัน Container (Apache httpd ตัวอย่าง):

podman run -dt -p 8080:8080/tcp \
  -e HTTPD_VAR_RUN=/run/httpd \
  -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \
  -e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \
  -e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \
  registry.fedoraproject.org/f29/httpd /usr/bin/run-httpd

ดู Container ที่รันอยู่:

podman ps

ทดสอบเว็บเซิร์ฟเวอร์:

curl https://localhost:8080

จัดการ Images

# ค้นหา image
podman search ubuntu

# ดึง image (แนะนำระบุ full registry path)
podman pull docker.io/library/ubuntu:22.04

# ดู images local
podman images

# ลบ image
podman rmi ubuntu:22.04

ควบคุม Container

# หยุด container ล่าสุด
podman stop -l

# หยุดทั้งหมด
podman stop -a

# ลบ container
podman rm container_id

# ดู logs
podman logs container_id

# เข้า shell ใน container
podman exec -it container_id /bin/bash

Rootless Containers (ความปลอดภัยสูง)

Podman สร้าง user namespace เอง UID/GID ใน container map ไป user จริง หาก attacker escape ออกมาได้แค่ user ธรรมดา ไม่ใช่ root

ตั้งค่า (ปกติ distro สมัยใหม่ตั้งให้แล้ว):

# /etc/subuid, /etc/subgid ต้องมี entry สำหรับ user
# ตัวอย่าง: user:100000:65536
# เปิดใช้งาน linger (รัน container ได้ตอนไม่ login)
loginctl enable-linger $USER

Pods (คล้าย Kubernetes Pod)

กลุ่ม container ที่ share network, IPC, cgroups:

# สร้าง pod
podman pod create --name mypod -p 8080:80

# รัน container ใน pod
podman run -dt --pod mypod nginx
podman run -dt --pod mypod redis

Alias Docker → Podman

echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrc

คำสั่ง docker ทั้งหมดจะรันผ่าน podman แทน

สรุป

Podman = Docker-compatible, daemonless, rootless, pod-native เหมาะสำหรับ developer, CI/CD, production ที่เน้น security ลองเล่นดูได้เลยด้วย podman run -it ubuntu bash