05. Docker vs Podman

Docker vs Podman — 데몬리스, 루트리스, 호환성 비교


📚 시리즈 네비게이션

이전현재다음
Docker ComposeDocker vs Podman-

시리즈 목차


🎯 개요

항목DockerPodman
개발Docker Inc.Red Hat
라이선스Apache 2.0Apache 2.0
아키텍처클라이언트-서버 (데몬)데몬리스
루트 권한기본 필요Rootless 기본
RHEL/CentOS 8+제거됨기본 포함

🏗️ 아키텍처 비교

Docker

flowchart TD
    CLI["Docker CLI"]
    Daemon["Docker Daemon<br/>(dockerd)<br/>[root 권한]"]
    Containerd["containerd"]
    Runc["runc<br/>(컨테이너)"]
    
    CLI -->|"REST API"| Daemon
    Daemon --> Containerd
    Containerd --> Runc

특징:

  • 중앙 데몬 (dockerd)이 모든 컨테이너 관리
  • 데몬이 죽으면 모든 컨테이너 영향
  • 기본적으로 root 권한 필요

Podman

flowchart TD
    CLI["Podman CLI"]
    Conmon["conmon<br/>(컨테이너별 모니터)"]
    Runc["runc<br/>(컨테이너)"]
    
    CLI -->|"직접 호출"| Conmon
    Conmon --> Runc

특징:

  • 데몬 없음 (Daemonless)
  • 각 컨테이너가 독립적
  • Rootless 기본 지원

🔑 주요 차이점

1. 데몬 유무

항목DockerPodman
데몬dockerd 필요없음
시작systemctl start docker바로 사용
데몬 장애모든 컨테이너 영향해당 컨테이너만
리소스상시 데몬 실행필요할 때만

2. 루트 권한

# Docker (기본)
sudo docker run nginx
# 또는 docker 그룹에 사용자 추가 필요
 
# Podman (rootless 기본)
podman run nginx
# 일반 사용자로 바로 실행

Rootless 장점:

  • 보안 강화 (권한 최소화)
  • 다중 사용자 환경에 적합
  • 컨테이너 탈출 시 피해 최소화

3. 명령어 호환성

대부분의 명령어가 동일함.

# Docker
docker run -d -p 8080:80 nginx
docker ps
docker images
docker build -t myapp .
 
# Podman (동일!)
podman run -d -p 8080:80 nginx
podman ps
podman images
podman build -t myapp .

alias 설정:

alias docker=podman

4. Docker Compose 대응

DockerPodman
docker composepodman-compose 또는 podman compose
# podman-compose 설치
pip install podman-compose
 
# 사용
podman-compose up -d
podman-compose down
 
# 또는 Podman 4.1+ (내장)
podman compose up -d

5. 이미지 호환성

완전 호환. 같은 OCI 표준 사용.

# Docker Hub 이미지 그대로 사용
podman pull docker.io/nginx
podman pull docker.io/mysql:8.0
 
# 이미지 빌드도 동일
podman build -t myapp .

📊 상세 비교

항목DockerPodman
데몬필요 (dockerd)없음
루트 권한기본 필요Rootless 기본
Systemd 통합제한적네이티브 지원
Pod 개념없음 (Swarm/K8s)네이티브 지원
Windows/MacDocker DesktopPodman Desktop
RHEL/CentOS 8+제거됨기본 포함
Kubernetes YAML변환 필요직접 지원
커뮤니티/생태계매우 큼성장 중
기업 지원Docker Inc.Red Hat

🐳 Podman 고유 기능

Pod 지원

Kubernetes의 Pod 개념을 로컬에서 사용.

# Pod 생성
podman pod create --name mypod -p 8080:80
 
# Pod에 컨테이너 추가
podman run -d --pod mypod nginx
podman run -d --pod mypod redis
 
# Pod 내 컨테이너는 localhost로 통신
# Pod 상태 확인
podman pod ps
podman pod inspect mypod
 
# Pod 중지/삭제
podman pod stop mypod
podman pod rm mypod

Kubernetes YAML 생성

# 컨테이너에서 K8s YAML 생성
podman generate kube mypod > mypod.yaml
 
# K8s YAML로 실행
podman play kube mypod.yaml

Systemd 통합

# 컨테이너를 systemd 서비스로 생성
podman generate systemd --name mycontainer --files --new
 
# 서비스 파일 생성됨
# container-mycontainer.service
 
# 사용자 서비스로 등록 (rootless)
mkdir -p ~/.config/systemd/user
mv container-mycontainer.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now container-mycontainer

📦 설치

RHEL/CentOS/Fedora

# 기본 포함 또는
sudo dnf install podman

Ubuntu/Debian

sudo apt update
sudo apt install podman

macOS

brew install podman
podman machine init
podman machine start

Windows

Podman Desktop 설치.


🔄 Docker에서 Podman 전환

1. alias 설정

# ~/.bashrc 또는 ~/.zshrc
alias docker=podman
alias docker-compose=podman-compose

2. 소켓 호환 (Docker API)

Docker API를 사용하는 도구와 호환됨.

# Podman 소켓 활성화
systemctl --user enable --now podman.socket
 
# Docker 소켓 경로로 심볼릭 링크
export DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock

3. 주의사항

항목DockerPodman
네트워크 기본값bridgeslirp4netns (rootless)
볼륨 권한root사용자 UID
빌드 캐시공유별도

🎯 언제 뭘 쓰나

Docker 선택

상황이유
학습/입문자료 많음, 표준
팀 협업널리 사용됨
Docker DesktopmacOS/Windows 편의성
기존 CI/CDDocker 기반 파이프라인

Podman 선택

상황이유
RHEL/CentOS 8+기본 탑재, Docker 제거됨
보안 중요Rootless 기본
다중 사용자권한 분리
Kubernetes 연습Pod, YAML 지원
시스템 서비스Systemd 통합

공존

# 둘 다 설치 가능
# 이미지도 공유 가능 (OCI 표준)
 
# Docker로 빌드
docker build -t myapp .
 
# Podman으로 실행
podman run myapp

📋 명령어 비교 요약

용도DockerPodman
실행docker runpodman run
목록docker pspodman ps
이미지docker imagespodman images
빌드docker buildpodman build
Composedocker composepodman-compose / podman compose
Pod-podman pod
K8s YAML-podman generate kube
Systemd-podman generate systemd

💡 정리

항목DockerPodman
성숙도
생태계
보안
RHEL/CentOS
K8s 친화
호환성-◎ (Docker 호환)
  • 입문/학습: Docker
  • 보안/RHEL: Podman
  • 둘 다 알아두면 좋음 (명령어 거의 동일)

🔗 시리즈 네비게이션

이전다음
Docker Compose-

시리즈 목차로 돌아가기


🔗 참고 자료