- Docker는 백그라운드 데몬(dockerd) 구조로 인해 보안 취약점과 자원 소모 문제가 꾸준히 지적되어 왔음
- Podman은 데몬 없는 구조를 채택해 컨테이너가 사용자 권한에서 직접 실행되며, 공격 표면을 줄이고 안정성을 강화함
- Systemd 통합, Kubernetes 친화적 설계, Buildah/Skopeo 등 유닉스 철학 기반의 분리된 도구 지원으로 운영 효율성이 높음
- Docker CLI와 높은 호환성을 유지해,
alias docker=podman만으로도 대부분 기존 워크플로우가 그대로 작동함 - 실제 운영 환경에서도 보안과 리소스 관리가 단순해지며, 신규 프로젝트에서는 Podman이 더 합리적이고 미래지향적 선택지가 되고 있음
Docker의 한계와 보안 문제
- Docker는 dockerd 데몬이 항상 root 권한으로 실행되는 구조를 가짐
- 데몬 취약점이 발견되면 전체 호스트가 위험에 노출될 수 있음
- 주요 보안 이슈 사례
- 2019: runC 컨테이너 탈출(CVE-2019-5736)
- 2022: Linux Dirty Pipe 취약점, cgroups v1 탈출
- 2024: runC “Leaky Vessels”, BuildKit 취약점
- 2024: Docker API 노출을 통한 크립토재킹 캠페인
- 이런 사건들이 반복되며 데몬 기반 구조의 근본적 위험성이 드러남
Podman의 데몬리스 구조
- Podman은 백그라운드 데몬을 사용하지 않음
podman run실행 시, 컨테이너는 명령 실행자의 직접 자식 프로세스로 동작- rootless 모드에서 실행되므로 컨테이너 내 root 권한도 호스트에서는 일반 사용자 권한에 불과함
- 장점
- 보안 강화: 컨테이너 탈출 시 피해 범위 축소
- 안정성 확보: 하나의 컨테이너가 죽어도 다른 컨테이너는 영향 없음
- 리소스 효율: 불필요한 데몬이 상주하지 않아 메모리 사용량 감소
Podman의 차별화된 기능
- Systemd 통합
podman generate systemd로 systemd 유닛 파일 자동 생성- 표준
systemctl명령어로 서비스 관리 가능
- Kubernetes 친화성
- Pod 개념이 기본 내장되어 있어 멀티 컨테이너 앱 개발 용이
podman generate kube로 바로 Kubernetes YAML 생성 가능
- 유닉스 철학
- Podman은 컨테이너 실행에 집중, 이미지 빌드는 Buildah, 레지스트리 관리에는 Skopeo 사용
- 목적별 최적화 도구 활용 가능
전환 과정과 호환성
- Docker에서 Podman으로의 전환은 거의 무중단
- CLI가 호환되어
docker대신podman을 그대로 사용할 수 있음 - 기존 Dockerfile도 그대로 작동
- CLI가 호환되어
- 차이점
- rootless 모드에서 1024 이하 포트 바인딩 불가 → reverse proxy 권장
- 볼륨 권한 관리 필요
- Docker 소켓 의존 도구는 Podman의 Docker API 호환 모드 사용 가능
실무 적용과 이점
- 운영 환경에서 Podman 사용 후
- 보안 점검 부담 완화, rootless 보안 기본 적용
- 리소스 사용 패턴이 더 단순하고 예측 가능해짐
- Docker는 여전히 대중적이지만, 새로운 프로젝트나 기술 선택 자유도가 있는 경우 Podman이 더 적합
- Linux 관리 체계와의 자연스러운 통합
- Kubernetes 지향적 아키텍처
- 더 안전하고 합리적인 컨테이너 실행 환경 제공
FastAPI 전환 가이드 요약
- 기존 Dockerfile 그대로 사용 가능
podman build,podman run으로 간단히 대체podman generate systemd로 systemd 서비스 등록- Pod를 활용해 DB 등 멀티 서비스 환경 지원
- Docker Compose 워크플로우는
podman-compose또는kompose변환으로 대응 가능