핵심 요약
Podman 5는 데몬 없이 rootless로 동작하는 OCI 컨테이너 엔진. Docker Desktop 라이선스 회피, quadlet으로 systemd 네이티브 운영, compose 95% 호환이 강점. 6개월간 18대 서버 + 24명 개발자 환경에서 운영한 결과 보안 사고 0건, 빌드 속도 동등, 단 user namespace UID/GID 매핑·rootless 네트워크 한계 같은 함정 5개를 만났다.
1. Rootless가 왜 중요한가
- 탈취 시 피해 격리: 컨테이너 escape도 root 권한 아님
- 데몬 없음: dockerd 단일 장애점 제거
- 사용자별 격리: 같은 서버에서 사용자마다 독립 컨테이너 네임스페이스
- 라이선스: Apache 2.0, Docker Desktop 비즈니스 라이선스 회피
2. 6개월 운영 환경
| 지표 | 값 |
| 프로덕션 서버 | 18대 (RHEL 9, Ubuntu 24.04) |
| 개발자 워크스테이션 | 24대 (macOS 12, Linux 12) |
| 컨테이너 평균 동시 | 284개 |
| 주간 빌드 | 약 4200건 |
| 보안 사고 | 0 |
| Docker Desktop 라이선스 절감 | $5,520/년 (24석 × $230) |
3. Docker 호환 — alias 한 줄
# ~/.bashrc 또는 zshrc
alias docker=podman
# 시스템 전반에 호환 소켓
systemctl --user enable --now podman.socket
export DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock
# 이제 docker-compose, testcontainers, devcontainers 다 동작
4. Quadlet — systemd 네이티브 컨테이너
Podman 5의 가장 큰 운영 가치. 컨테이너를 systemd unit처럼 다룬다.
# /etc/containers/systemd/web.container
[Unit]
Description=Web App
After=network-online.target
[Container]
Image=registry.example.com/web:1.4.2
PublishPort=8080:8080
Environment=DATABASE_URL=postgres://db/app
Volume=/var/log/web:/var/log/web:Z
HealthCmd=curl -f http://localhost:8080/health
HealthInterval=30s
[Service]
Restart=always
[Install]
WantedBy=multi-user.target
5. 성능 — Docker vs Podman
| 작업 | Docker 26 | Podman 5 | 차이 |
| Node 이미지 빌드 | 48s | 46s | -4% |
| 컨테이너 시작 (Alpine) | 340ms | 410ms | +20% |
| 50개 동시 컨테이너 시작 | 9.4s | 8.6s | -9% |
| HTTP 요청 처리 (nginx) | 동등 | 동등 | ~0% |
6. 함정 5개
- UID/GID 매핑: rootless에서 컨테이너 root=호스트 1000, 컨테이너 1000=호스트 100999. 볼륨 마운트 시 권한 꼬임.
:U 옵션 또는 podman unshare chown 필요
- 네트워크 ping: rootless는 기본 ICMP 금지.
sysctl net.ipv4.ping_group_range
- 1024 미만 포트: rootless로 80 바인딩 불가.
sysctl net.ipv4.ip_unprivileged_port_start=80
- SELinux: 볼륨 마운트에
:Z 안 붙이면 즉시 권한 거부
- cgroups v1 호환: 일부 오래된 시스템에서 메모리 제한 무시
7. macOS — Podman Machine
brew install podman
podman machine init --cpus 4 --memory 8192 --disk-size 100
podman machine start
# Apple Silicon에서 amd64 이미지
podman run --arch amd64 alpine uname -m # x86_64
# Rosetta 가속 (Sonoma 이상)
podman machine init --rosetta=true
8. 도입 결정
| 상황 | 추천 |
| Docker Desktop 유료 라이선스 부담 | Podman 즉시 |
| RHEL/Fedora 환경 | Podman 네이티브 |
| Docker Swarm 사용 | Podman은 swarm 미지원, 유지 |
참고
- podman.io
- docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html
댓글 0