Podman 완전 가이드 — rootless·daemonless 철학과 멀티 유저 환경 구축




지금까지 다룬 세 도구(Docker Desktop, Colima, Rancher Desktop)는 본질적으로 같은 모델을 공유합니다. 백그라운드에서 데몬이 돌고, 그 데몬이 컨테이너를 관리하는 방식입니다. Podman은 그 전제 자체를 뒤집습니다.

데몬이 없습니다(daemonless). 그리고 루트 권한도 필요 없습니다(rootless). 이 두 가지 차이가 단순한 기술적 선택지가 아니라, 보안과 멀티 유저 환경의 정답을 바꾸는 결정적 차이라는 점을 이번 편에서 짚어보겠습니다.

이 가이드는 macOS(Apple Silicon)를 기준으로 하되, 8편만은 Linux 서버 멀티 유저 시나리오를 비중 있게 다룹니다. Podman의 진짜 강점이 그곳에서 빛나기 때문입니다 (4편과 자연스럽게 연결됩니다).

1. Podman 소개

Podman은 Red Hat이 주도하는 오픈소스 컨테이너 도구입니다. 이름은 “Pod Manager“의 줄임말로, 컨테이너뿐 아니라 Kubernetes의 Pod 개념을 처음부터 1급 시민으로 다룬다는 철학을 담고 있습니다.

명령어 체계는 Docker와 거의 100% 호환됩니다.

docker run nginx
podman run nginx     # 거의 동일하게 동작

이 호환성 덕분에 마이그레이션이 매우 쉽습니다. 심지어 alias docker=podman만으로도 대부분의 워크플로가 그대로 돌아갑니다.

탄생 배경

Docker Engine은 강력하지만 두 가지 구조적 약점이 있었습니다.

  1. 단일 데몬: 모든 사용자가 하나의 dockerd 프로세스를 공유. 데몬이 죽으면 모든 컨테이너가 영향을 받음.
  2. root 데몬: dockerd는 root 권한으로 동작하고, docker 그룹 사용자는 사실상 root와 동등한 권한을 가짐. 보안상 큰 문제.

Red Hat은 RHEL 같은 엔터프라이즈 리눅스 환경에서 이 문제가 특히 부담스러웠습니다. 그래서 데몬 없이 동작하고, 일반 사용자 권한으로 실행 가능한 컨테이너 도구를 만들기로 했습니다. 그것이 Podman입니다.

2. 특징과 강점/약점

강점

  • 데몬리스(daemonless) — 백그라운드 데몬 없이 podman 명령이 직접 컨테이너를 띄움
  • 루트리스(rootless) — 일반 사용자 권한으로 실행 가능, 보안 우수
  • Docker CLI 호환 — 거의 모든 명령어가 동일
  • Pod 개념 내장 — 여러 컨테이너를 묶어 Pod 단위로 관리 가능
  • Kubernetes YAML 변환podman generate kube로 Pod 정의를 K8s YAML로 자동 변환
  • systemd 통합podman generate systemd로 컨테이너를 systemd 서비스로 등록
  • Podman Desktop GUI 제공 — 비교적 최근에 성숙해진 GUI 도구
  • 완전 무료 오픈소스, 상업적 사용 제한 없음

약점

  • macOS·Windows에서는 결국 VM — 네이티브 Linux만큼 가볍지는 않음
  • 일부 Docker Compose 시나리오 호환성 이슈 — 대부분 잘 되지만 가끔 미묘한 차이
  • GUI(Podman Desktop)가 비교적 늦게 등장 — 안정성은 빠르게 좋아지고 있음
  • rootless 모드의 제약 — 1024 미만 포트 바인딩 제약 같은 root 전용 작업이 안 됨 (별도 설정 필요)

3. 설치 방법 (macOS, Apple Silicon)

Homebrew

# Podman 본체
brew install podman

# Podman Desktop (GUI, 선택)
brew install --cask podman-desktop

Podman Machine 초기화

macOS의 Podman은 내부적으로 VM을 띄웁니다. 첫 사용 전에 머신을 초기화해야 합니다.

# VM 생성 및 시작 (한 번만)
podman machine init
podman machine start

자원을 지정하려면:

podman machine init --cpus 4 --memory 8192 --disk-size 100
podman machine start

설치 확인

podman --version
podman info
podman run hello-world

Docker CLI를 그대로 쓰고 싶다면

기존 Docker 워크플로를 유지하려면 alias를 등록합니다.

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

또는 podman-mac-helper(Podman Desktop 설치 시 함께 옴)를 활성화하면 docker socket까지 호환되어, 이미 Docker용으로 작성된 도구들도 그대로 동작합니다.

sudo /opt/homebrew/bin/podman-mac-helper install
podman machine stop && podman machine start

4. 기본 사용법

명령어는 Docker와 거의 동일하므로, 차이점 위주로 짚겠습니다.

컨테이너 실행

podman run -d -p 8080:80 --name web nginx
podman ps
podman logs web
podman exec -it web /bin/bash
podman stop web
podman rm web

이미지 관리

podman pull nginx:latest
podman images
podman rmi nginx:latest
podman system prune -a

Pod 단위 관리 (Podman의 차별점)

여러 컨테이너를 하나의 Pod로 묶을 수 있습니다. Pod 안의 컨테이너는 네트워크 네임스페이스를 공유합니다 (Kubernetes의 Pod와 동일한 개념).

# Pod 생성 (포트는 Pod 단위로 매핑)
podman pod create --name myapp -p 8080:80

# Pod 안에 컨테이너 추가
podman run -d --pod myapp --name web nginx
podman run -d --pod myapp --name cache redis

# Pod 상태 확인
podman pod ps
podman pod logs myapp

# Pod 중지·삭제
podman pod stop myapp
podman pod rm myapp

Kubernetes YAML로 변환

기존 Pod·컨테이너 설정을 K8s 매니페스트로 자동 변환할 수 있습니다.

# Pod를 K8s YAML로 출력
podman generate kube myapp > myapp.yaml

# 그 YAML을 다시 Podman으로 실행 (K8s 클러스터 없이)
podman play kube myapp.yaml

이 기능은 로컬에서 K8s YAML을 테스트할 때 매우 유용합니다.

Podman Compose

podman-compose라는 별도 도구를 깔거나, Podman 4.x 이상의 내장 compose 지원을 사용합니다.

brew install podman-compose
podman-compose up -d

5. 실전 팁

Docker와 진짜로 호환될까?

대부분 호환됩니다. 다만 다음 경우엔 미묘한 차이가 있습니다.

  • Docker socket을 마운트하는 도구 (예: testcontainers, Telepresence): podman-mac-helper 활성화 필요
  • docker-compose의 일부 고급 기능: podman-compose가 아직 못 따라가는 케이스 존재
  • 네트워크 모드: 일부 host 네트워크 설정이 다르게 동작

대부분의 일상 워크플로에는 문제가 없지만, 복잡한 CI/CD 파이프라인이나 통합 테스트에서는 한 번 검증하고 가는 것을 권장합니다.

Apple Silicon에서 amd64 빌드

podman run --platform linux/amd64 some-image
podman build --platform linux/amd64 -t myapp .

Podman Desktop 활용

Podman Desktop은 단순한 GUI를 넘어 Docker Desktop과 비슷한 경험을 제공합니다.

  • 컨테이너·이미지·Pod·볼륨 GUI 관리
  • Kubernetes 클러스터 연결 (Kind, Minikube, OpenShift 등)
  • Docker Desktop에서 마이그레이션 도우미
  • Extensions 시스템

GUI가 필요하다면 Podman Desktop을 함께 깔아두는 것이 편합니다.

systemd로 컨테이너 영속화 (Linux)

리눅스 서버에서 매우 유용한 기능입니다.

# 컨테이너를 systemd 서비스로 등록
podman generate systemd --new --name myweb > ~/.config/systemd/user/myweb.service
systemctl --user daemon-reload
systemctl --user enable --now myweb.service

이렇게 하면 컨테이너가 부팅 시 자동 시작되고, systemd가 라이프사이클을 관리합니다. Docker로는 깔끔하게 되지 않는 시나리오입니다.

6. 다른 OS에서는? (이 편의 핵심 — Linux 서버 멀티 유저)

macOS / Windows

내부적으로 VM(QEMU 기반)을 띄우는 구조입니다. 사용 경험은 Docker Desktop이나 Colima와 비슷하며, rootless의 진짜 강점은 잘 드러나지 않습니다. macOS·Windows의 Podman은 “Docker 호환 + 라이선스 자유”의 의미가 큽니다.

Linux 서버 — Podman의 진짜 무대

여기서부터가 중요합니다. 여러 사용자가 한 리눅스 서버를 공유하는 환경에서 Podman은 다른 도구가 따라올 수 없는 강점을 보입니다.

설치

# RHEL/CentOS/Fedora 계열
sudo dnf install podman

# Ubuntu/Debian 계열
sudo apt install podman

Rootless 사용

설치 후 일반 사용자로 그대로 사용할 수 있습니다. 별도 설정이 거의 필요 없습니다.

# 사용자 A로 로그인
$ whoami
alice
$ podman run -d --name myweb nginx
$ podman ps
CONTAINER ID  IMAGE         STATUS  NAMES
abc123        nginx:latest  Up      myweb

# 사용자 B로 로그인 (같은 서버, 다른 SSH 세션)
$ whoami
bob
$ podman ps
CONTAINER ID  IMAGE  STATUS  NAMES
(비어 있음 — alice의 컨테이너는 보이지 않음)

$ podman run -d --name myweb nginx  # 같은 이름도 사용 가능 (네임스페이스 분리)

이게 진짜 멀티 유저 컨테이너 환경입니다. 두 사용자는 같은 머신에서 컨테이너를 돌리고 있지만, 커널 수준에서 격리되어 서로의 존재를 알지 못합니다. Docker로는 이걸 깨끗하게 구현하기가 매우 어렵습니다.

핵심 점검 사항

리눅스 서버에서 멀티 유저로 Podman을 쓸 때 확인할 것들:

  1. subuid / subgid 매핑: 각 사용자에게 UID 범위가 할당되어 있어야 함 cat /etc/subuid cat /etc/subgid # alice:100000:65536 같은 항목이 있어야 함 사용자 추가 시 useradd가 자동으로 처리하지만, 누락되었다면: sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 alice
  2. lingering 활성화: 사용자 로그아웃 후에도 컨테이너가 계속 돌게 하려면 sudo loginctl enable-linger alice
  3. 포트 바인딩: rootless는 기본적으로 1024 미만 포트를 못 씀. 필요하면: sudo sysctl net.ipv4.ip_unprivileged_port_start=80
  4. 자원 제한: 사용자별 cgroup 제한을 systemd 슬라이스로 적용 가능 (대규모 운영 시)

이런 설정만 한 번 잡아두면, 사내 공용 개발 서버에서 개발자 10명이 각자 컨테이너를 돌리면서 서로 간섭하지 않는 환경이 자연스럽게 구현됩니다. 4편에서 다룬 “사용자 분리”의 표준 답이 바로 이것입니다.

7. 어떤 사용자에게 적합한가

Podman을 추천하는 경우:

  • 리눅스 서버에서 여러 사용자가 컨테이너를 공유하는 환경 — 거의 독보적인 선택지입니다.
  • 보안·규제·감사 요구사항이 강한 환경 — 데몬리스·루트리스 구조가 감사 요구를 자연스럽게 충족합니다.
  • RHEL·CentOS·Fedora 계열을 쓰는 조직 — 공식 지원되는 표준 도구입니다.
  • Kubernetes를 자주 다루는 개발자 — Pod 개념과 K8s YAML 변환이 자연스럽게 통합됩니다.
  • Docker Desktop 라이선스를 피하려는 사용자 — Docker CLI 호환으로 마이그레이션 비용이 낮습니다.

다른 도구를 고려해야 하는 경우:

  • macOS에서 가장 매끄러운 GUI 경험을 원한다 → Docker Desktop, OrbStack
  • Apple Silicon에서 가장 빠른 환경 → OrbStack
  • 로컬에서 K8s를 GUI로 편하게 → Rancher Desktop
  • GUI 없이 가장 가벼운 환경 → Colima

정리

  • Podman은 데몬리스·루트리스 철학으로 설계된 컨테이너 도구다
  • Docker CLI와 거의 100% 호환되어 마이그레이션 비용이 낮다
  • macOS에서는 brew install podman + podman machine init/start로 시작
  • Pod 개념과 K8s YAML 변환이 차별점, systemd 통합도 강력
  • 진짜 강점은 Linux 서버 멀티 유저 환경 — 사용자별 커널 수준 격리가 자연스럽게 동작
  • 보안·규제·기업 환경에서는 거의 표준에 가까운 선택지

다음 편이 2부의 마지막입니다. macOS의 신예이자 가장 빠르고 매끄러운 사용 경험을 자랑하는 OrbStack을 다루고, 시리즈 전체를 마무리하겠습니다.




댓글 남기기