liminfo

Podman Reference

Podman CLI, rootless 컨테이너, pod 관리 레퍼런스

20개 결과

Podman Reference 소개

Podman 레퍼런스는 Red Hat이 개발한 데몬리스 OCI 호환 컨테이너 엔진인 Podman을 위한 실용적인 명령어 치트 시트입니다. 5개 카테고리를 다룹니다: 컨테이너 생명주기 관리(podman run, ps, stop, rm, logs, exec, inspect), 이미지 작업(Containerfile/Dockerfile로부터의 podman build, pull, push, images 목록, rmi), Pod 관리(podman pod create, start/stop, ps), systemd 통합(유닛 파일 생성을 위한 podman generate systemd, 레지스트리 레이블을 사용한 podman auto-update), Kubernetes 상호운용성(YAML에서 컨테이너를 실행하는 podman play kube, 기존 컨테이너를 내보내는 podman generate kube, Docker Compose 호환성을 위한 podman-compose).

Podman은 RHEL, Fedora, CentOS 시스템에서 선호되는 컨테이너 런타임이며, 루트리스·데몬리스 Docker 대안으로 채택이 늘고 있습니다. Docker와 달리 Podman은 중앙 데몬 없이 컨테이너를 실행하고, 루트리스 컨테이너를 기본적으로 지원하며, 컨테이너 생명주기 관리를 위해 systemd와 직접 통합합니다. 이 레퍼런스는 Red Hat 에코시스템에서 작업하거나 데몬 없이 Docker 호환 CLI를 찾는 DevOps 엔지니어, 시스템 관리자, 개발자에게 유용합니다.

레퍼런스는 일반적인 Podman 워크플로를 따라 구성됩니다: 이미지 풀 및 빌드, 컨테이너 실행 및 관리, 관련 컨테이너를 Pod로 그룹화, 부팅 시 자동 시작을 위해 실행 중인 컨테이너를 호스트의 systemd와 통합, Kubernetes YAML 매니페스트를 생성하거나 소비하여 Podman과 Kubernetes 간의 다리 역할. 모든 명령어 항목에는 일반적인 플래그와 함께 완전한 예제가 포함되어 있습니다.

주요 기능

  • 컨테이너 관리: -d/-p/--name 플래그를 사용한 podman run, ps -a, stop, rm -f, logs -f, exec -it
  • 자세한 JSON 설정 및 네트워크 정보를 위한 podman inspect
  • 이미지 작업: podman build -t, docker.io에서 pull, 레지스트리에 push, images --filter, rmi -a
  • 포트 매핑을 포함한 Pod 생성 및 관리: podman pod create, pod start/stop, pod ps
  • 유닛 파일 생성을 위한 Systemd 통합: podman generate systemd --new --files
  • 자동 이미지 업데이트를 위한 io.containers.autoupdate=registry 레이블과 podman auto-update
  • Kubernetes 브릿지: YAML에서 실행하는 podman play kube, Pod 내보내기를 위한 podman generate kube
  • Docker Compose 파일 호환성을 위한 podman-compose (up -d, down)

자주 묻는 질문

Podman이란 무엇이며 Docker와 어떻게 다른가요?

Podman(Pod Manager)은 중앙 데몬 프로세스 없이 컨테이너를 실행하는 OCI 호환 컨테이너 엔진입니다. root로 실행되는 dockerd 데몬이 필요한 Docker와 달리, Podman은 각 컨테이너를 직접 자식 프로세스로 실행하고, 루트리스 컨테이너(기본적으로 비루트 사용자로 실행)를 지원하며, 컨테이너 생명주기 관리를 위해 systemd와 통합합니다. Podman CLI는 Docker와 호환되도록 설계되어 대부분의 `docker` 명령어가 `podman`으로 그대로 작동합니다.

Podman으로 백그라운드에서 컨테이너를 실행하는 방법은?

`podman run -d -p 8080:80 --name web nginx:alpine`을 사용합니다. `-d` 플래그는 컨테이너를 분리(백그라운드) 모드로 실행합니다. `-p 8080:80`은 호스트 포트 8080을 컨테이너 포트 80에 매핑합니다. `--name web`은 `podman logs web`이나 `podman exec -it web /bin/sh` 같은 다른 명령어에서 사용할 수 있는 사람이 읽을 수 있는 이름을 컨테이너에 지정합니다. `podman ps`로 실행 중인지 확인하고 `podman stop web`으로 중지합니다.

Podman Pod란 무엇이며 독립 실행형 컨테이너와 어떻게 다른가요?

Podman Pod는 동일한 네트워크 네임스페이스를 공유하는 컨테이너 그룹으로, localhost를 통해 통신하고 포트 매핑을 공유할 수 있습니다. 이는 Kubernetes Pod와 유사합니다. `podman pod create --name mypod -p 8080:80`으로 Pod를 만든 후, `podman run`에 `--pod mypod`를 추가해 Pod 내에서 컨테이너를 실행합니다. Pod는 네트워크 컨텍스트를 공유해야 하는 긴밀하게 결합된 서비스(예: 앱 컨테이너와 사이드카 프록시)에 유용합니다.

Podman 컨테이너가 시스템 부팅 시 자동으로 시작되도록 하는 방법은?

`podman generate systemd --name web --new --files`를 사용해 "web" 컨테이너의 systemd 유닛 파일을 생성합니다. `--new` 플래그는 유닛 파일이 기존 컨테이너를 시작하는 대신 시작 시 컨테이너를 다시 생성하도록 합니다. 생성된 유닛 파일을 루트리스의 경우 `~/.config/systemd/user/`에, root의 경우 `/etc/systemd/system/`에 복사한 후, `systemctl --user enable container-web.service`를 실행해 자동 시작을 활성화합니다. 루트리스 컨테이너의 경우 `loginctl enable-linger $USER`도 실행하세요.

podman auto-update는 어떻게 작동하나요?

`podman auto-update`는 `io.containers.autoupdate=registry` 레이블이 있는 모든 실행 중인 컨테이너를 확인하고 레지스트리에서 업데이트된 이미지를 풀합니다. 더 새로운 이미지가 있으면 컨테이너가 새 이미지로 다시 생성됩니다. 컨테이너를 생성할 때나 Containerfile에 레이블을 추가하세요. systemd와 결합하면 `podman auto-update`를 주기적으로 실행하는 systemd 타이머를 만들거나(또는 Fedora/RHEL의 내장 `podman-auto-update.timer` 사용) 수동 개입 없이 자동 이미지 업데이트를 활성화할 수 있습니다.

Podman으로 Kubernetes YAML 매니페스트를 실행하는 방법은?

`podman play kube deployment.yaml`을 사용해 Kubernetes Pod 또는 Deployment YAML 매니페스트에서 컨테이너를 생성하고 실행합니다. Podman은 Pod 스펙, 영구 볼륨 클레임, ConfigMap을 포함한 Kubernetes YAML의 일부를 지원합니다. 전체 클러스터 없이 Kubernetes 워크로드를 로컬에서 개발하고 테스트하는 데 유용합니다. `podman play kube --down deployment.yaml`로 생성된 리소스를 중지하고 제거합니다.

기존 Podman Pod를 Kubernetes YAML로 내보내는 방법은?

`podman generate kube mypod > pod.yaml`을 사용해 실행 중이거나 중지된 Pod에서 Kubernetes 호환 YAML 파일을 생성합니다. 이 YAML은 `kubectl apply -f pod.yaml`로 실제 Kubernetes 클러스터에 적용할 수 있습니다. 생성된 YAML에는 컨테이너 스펙, 포트 매핑, 환경 변수가 포함됩니다. 이를 통해 Podman은 궁극적으로 Kubernetes에서 실행될 워크로드를 빌드하는 유용한 로컬 개발 도구가 됩니다.

Podman으로 Docker Compose 파일을 사용할 수 있나요?

네. `podman-compose`(Podman 코어가 아닌 Python 도구)를 설치하고 `podman-compose up -d`로 `docker-compose.yml` 파일에 정의된 서비스를 시작하고, `podman-compose down`으로 중지합니다. Podman은 최신 버전에서 `podman compose`(Docker Compose 호환 백엔드 사용)도 지원합니다. 대부분의 Docker Compose v2 구문이 지원되지만 네트워크 별칭 같은 일부 고급 기능은 다르게 동작할 수 있습니다.