바로 가기

Podman이란?

URL 복사

Podman(POD 관리자)은 Linux® 시스템에서 컨테이너를 개발, 관리, 실행하기 위한 오픈소스 툴입니다. Red Hat® 엔지니어가 오픈소스 커뮤니티와 함께 처음 개발한 Podman은 libpod 라이브러리를 사용하여 컨테이너 에코시스템 전체를 관리합니다. 

Podman은 데몬이 없는 포괄적인 아키텍처로 컨테이너를 더 안전하고 손쉽게 관리할 수 있게 해주며, BuildahSkopeo와 같은 관련 툴과 기능을 통해 개발자는 컨테이너 환경을 사용자 정의 방식으로 요구 사항에 가장 적합하게 설정할 수 있습니다. 

포드는 모두 함께 실행되며 동일한 리소스를 공유하는 컨테이너 그룹으로, 쿠버네티스 포드와 유사합니다. Podman은 컨테이너, 포드, 컨테이너 이미지 및 볼륨을 위한 API를 제공하는 간단한 커맨드라인 인터페이스(CLI)와 libpod 라이브러리를 통해 이러한 포드를 관리합니다. Podman의 CLI는 컨테이너 런타임과 형식을 위한 업계 표준을 준수하도록 설계된 Open Container Initiative(OCI) 컨테이너를 생성하고 지원합니다. 하지만 더욱 고도화된 빌드 기능은 상호 보완적인 프로젝트인 Buildah에서 제공됩니다. 사용자는 Red Hat Enterprise Linux, Fedora, CentOS, Ubuntu와 같은 다양한 Linux 배포판에서 Podman을 실행할 수 있습니다. 

각 포드는 하나의 인프라 컨테이너와 다수의 일반적인 컨테이너로 구성되어 있습니다. 인프라 컨테이너는 포드를 실행하고 사용자 네임스페이스를 유지 관리하여 컨테이너를 호스트로부터 분리합니다 다른 일반 컨테이너는 프로세스를 추적하고 빈 컨테이너를 찾을 수 있도록 모니터를 갖추고 있습니다. 비기능성 컨테이너라도 리소스 일부가 여전히 사용되기 때문에 환경에서 제거할 수는 없습니다.

Podman은 데몬이 없다는 점에서 다른 컨테이너 엔진과 다릅니다. 데몬은 사용자 인터페이스 없이 컨테이너를 실행하는 것과 같이 어려운 작업을 하기 위해 시스템 백그라운드에서 실행되는 프로세스입니다. 사용자와 컨테이너 사이에서 통신을 중계한다고 생각하면 됩니다. 

데몬은 컨테이너 환경을 관리하는 하나의 편리한 방법이기도 하지만 동시에 보안 취약점을 가져올 수도 있습니다. 다수의 데몬이 루트 권한을 통해 실행됩니다. Linux 시스템에서 루트 계정은 관리자 액세스를 부여받은(동시에 관리자 검증 절차를 건너뛰는) 슈퍼 사용자(superuser) 역할을 하면서 파일을 읽고, 프로그램을 설치하고, 애플리케이션을 수정합니다. 따라서 데몬은 컨테이너를 장악하고 호스트 시스템에 잠입하려는 해커들에게 매우 좋은 표적이 될 수 있습니다. 

Podman은 데몬을 제거하고 일반적인 사용자가 루트를 보유한 데몬과 상호 작용할 필요 없이 컨테이너를 실행하거나 루트리스(rootless) 컨테이너를 사용할 수 있도록 합니다. 루트리스 컨테이너로 사용자는 프로세스에 관리 권한이 없어도 컨테이너를 생성, 실행, 관리할 수 있어, 더 손쉽게 액세스할 수 있는 컨테이너 환경을 만드는 동시에 보안 리스크를 줄일 수 있습니다. 또한 Podman은 security-enhanced linux(SELinux) 레이블이 있는 각 컨테이너를 실행하여 관리자가 컨테이너 프로세스에 제공되는 리소스와 기능을 제어할 수 있도록 권한을 부여합니다.

사용자는 커맨드라인에서 Podman을 호출하여 리포지토리에서 컨테이너를 가져와 실행할 수 있습니다. Podman은 구성된 컨테이너 런타임을 호출해 실행 중인 컨테이너를 생성합니다.  그러나 전용 데몬 없이도 Podman은 Linux 운영 체제를 위한 시스템 및 서비스 관리자를 의미하는 systemd를 사용하여 업데이트하고 백그라운드에서 컨테이너를 지속적으로 실행할 수 있습니다. systemd와 Podman을 통합하여 컨테이너를 위한 제어 유닛을 생성하고 자동 지원되는 systemd로 컨테이너를 실행할 수 있습니다.

사용자는 시스템의 자체 리포지토리와 systemd 유닛을 관리하여 컨테이너를 자동으로 시작하고 관리하도록 제어할 수 있습니다. 사용자가 자체 리소스를 관리하고 컨테이너를 루트리스로 실행하도록 지원하면 /var/lib/containers를 어디서나 쓰기 가능한 디렉터리로 만드는 잘못된 사례나 애플리케이션을 추가적인 보안 문제에 노출시킬 수 있는 기타 시스템 관리 사례를 방지할 수 있습니다. 이렇게 하면 모든 사용자가 별도의 컨테이너와 이미지 세트를 보유하게 되어 서로 방해하지 않고 동일한 호스트에서 Podman을 동시에 사용할 수도 있습니다. 사용자가 작업을 마치면 공통 레지스트리로 변경 사항을 푸시하여 다른 사람과 이미지를 공유할 수 있습니다.

또한 Podman은 컨테이너를 관리하기 위해 RESTful API(REST API)를 배포합니다. REST는 Representational State Transfer의 줄임말입니다. REST API는 REST 아키텍처 스타일의 제약 조건을 준수하고 RESTful 웹 서비스와 상호 작용할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스입니다. REST API를 통해 cURL, Postman, Google의 Advanced REST Client 및 그 외 다양한 플랫폼에서 Podman을 호출할 수 있습니다.

Podman은 모듈식 컨테이너 엔진으로, 컨테이너를 구축하고 이동하려면 Buildah 및 Skopeo와 같은 툴을 함께 사용해야 합니다. Buildah를 사용하면 처음부터 또는 이미지를 시작점으로 사용하여 컨테이너를 구축할 수 있습니다. Skopeo는 다양한 스토리지 시스템 간에 컨테이너 이미지를 이동하여 docker.io, quay.io, 내부 레지스트리와 같은 레지스트리 간 또는 로컬 시스템 상 다양한 유형의 스토리지 간에 이미지를 복사할 수 있도록 합니다. 컨테이너화를 위한 이러한 모듈식 접근 방식을 통해 간접비를 줄이고 목표 달성에 필요한 기능을 분리하여 유연하고 가벼운 환경을 구축할 수 있습니다. 더 작아지고 모듈화된 툴은 빠르게 변화할 수도 있으며, 각 툴을 단일한 용도로 사용할 수 있습니다. 

Podman, Buildah, Skopeo는 마치 전문 스위스 군용 나이프처럼 함께 사용하면 거의 모든 컨테이너 활용 사례를 충족할 수 있습니다. 그 중에서도 Podman은 가장 큰 나이프에 해당합니다. 

Podman과 Buildah는 컨테이너를 시작하기 위해 기본적으로 OCI 런타임인 runC를 사용합니다. 따라서 runC로 이미지를 구축하고 실행하거나 Docker 형식의 이미지를 실행할 수 있습니다. 이 Go 언어 기반의 툴은 런타임 사양을 읽고 Linux 커널을 구성하여, 컨테이너 프로세스를 생성하고 시작합니다. 일부 구성을 변경해 Podman을 crun과 같은 기타 설치 공간과 함께 사용할 수도 있습니다.

DockerLinux 컨테이너를 만들고 사용할 수 있도록 지원하는 컨테이너화 기술입니다. Podman과 Docker의 주요한 차이점은 바로 Podman이 데몬이 없는 아키텍처를 보유하고 있다는 점입니다. Podman 컨테이너는 항상 루트리스였으나, Docker는 최근 들어서야 데몬 구성에 루트리스 모드를 추가했습니다. Docker는 컨테이너 생성 및 관리를 위한 올인원 툴인 반면, Podman과 Buildah 및 Skopeo 등의 관련 툴은 컨테이너화의 특정 측면에 더욱 전문화되어 사용자가 클라우드 네이티브 애플리케이션에서 필요한 사항에 따라 사용자 정의할 수 있습니다. 

Podman은 Docker의 대안이 되는 강력한 컨테이너 엔진이지만, 이 두 엔진은 함께 사용할 수 있습니다. 사용자는 Podman에 대해 Docker의 별칭을 설정(alias docker=podman)하거나 그 반대로 설정하여 간편하게 Podman과 Docker를 전환하여 사용할 수 있습니다. podman-docker로 불리는 rpm이 'docker' 커맨드가 필요한 환경에서 Podman을 호출하는 시스템 애플리케이션 PATH에 'docker'를 실행하여 Docker로의 전환을 손쉽게 만들어줍니다. Podman의 CLI는 Docker 컨테이너 엔진과 유사하기 때문에 Podman에 익숙한 사용자가 Docker도 익숙하게 느끼는 경우가 많습니다. 

일부 개발자는 개발 단계에서 Docker를 사용하고 런타임 환경에서 프로그램을 Podman으로 이전해 Podman과 Docker를 모두 활용함으로써 더욱 높은 수준의 보안을 구현하기도 합니다. 

Podman은 쿠버네티스나 OpenShift Container Platform을 사용하지 않고 컨테이너를 실행하는 개발자에게 최적화되어 있습니다. CRI-O는 Red Hat OpenShift® Container Platform과 같은 쿠버네티스 컨테이너 오케스트레이션을 위한 커뮤니티 중심의 오픈소스 컨테이너 엔진입니다.

Podman은 시장을 선도하는 컨테이너 엔진과 동일한 고성능 기능을 제공함으로써 컨테이너 환경에 변화를 가져왔으며, 많은 개발 팀이 바라는 유연성, 접근성, 강화된 보안까지 갖추고 있습니다. Podman은 다음을 지원합니다.

  • 실행, 네트워크 연결, 체크포인트 설정, 삭제를 비롯한 전체 컨테이너 라이프사이클과 컨테이너 이미지를 관리합니다.
  • 루트리스 컨테이너와 포드를 위한 리소스를 실행하고 분리합니다.
  • OCI, Docker 이미지를 비롯하여 Docker와 호환 가능한 CLI를 지원합니다.
  • 데몬이 없는 환경을 조성하여 보안을 강화하고 유휴 리소스 사용을 줄입니다. 
  • REST API를 배포하여 Podman의 고급 기능을 지원합니다.
  • 유저스페이스의 체크포인트/복원(CRIU) 툴로 Linux 컨테이너에 체크포인트/복원 기능을 구현합니다. CRIU는 실행 중인 컨테이너를 중지하고 메모리 콘텐츠 및 상태를 디스크에 저장하여 컨테이너화된 워크로드를 더 빠르게 재시작할 수 있습니다.
  • 컨테이너를 자동으로 업데이트합니다. Podman은 업데이트된 컨테이너가 시작되지 않고 최종 작업 버전으로 자동 롤백하는 경우 이를 감지합니다. 따라서 애플리케이션 신뢰성을 한 차원 높은 수준으로 끌어올립니다. 

Podman에는 Red Hat Enterprise Linux 서브스크립션이 포함되어 있으므로 신뢰할 수 있고, 지원 가능하며, 안정적인 Universal Base Image(UBI)를 사용하여 구축된 OCI 호환 컨테이너를 실행할 수 있습니다. Red Hat Enterprise Linux는 엔터프라이즈 환경에서 Linux 컨테이너를 실행하는 표준이 됩니다. 따라서 개발자들이 간편하게 컨테이너를 가동하고, 배포를 관리하며, 새로운 애플리케이션 개발 속도를 높일 수 있습니다. 오픈 하이브리드 클라우드 전반에서 Red Hat Enterprise Linux에 구축된 이식 가능한 애플리케이션과 컨테이너를 활용하면 변화하는 환경에 따라 민첩성을 유지하고 트랜스포메이션 목표를 달성할 수 있습니다.

Red Hat Enterprise Linux 웹 콘솔은 사용이 간편한 웹 인터페이스를 통해 시스템의 배포 및 일상적인 관리를 간소화합니다. Podman은 웹 콘솔의 구성 요소로 사용할 수 있으며, 컨테이너와 이미지를 관리할 수 있도록 지원합니다. 웹 콘솔의 대시보드에서 컨테이너 호스트에 액세스하고 시스템 부하를 모니터링하여 컨테이너가 CPU와 메모리를 얼마나 사용하고 있는지 모니터링할 수 있습니다. 웹 콘솔을 활용하면, 일반적인 태스크는 물론 복잡한 운영까지도 간소화할 수 있어 컨테이너 관리가 더욱 간소화됩니다.

Ansible Playbook을 사용하는 Red Hat Ansible® Automation Platform은 설치, 컨테이너 배포 및 시간과 리소스를 자주 사용하는 기타 태스크와 같은 Podman 기능을 자동화합니다. 

Podman과 그 밖의 오픈 표준 기반 컨테이너 툴을 통해 Red Hat Enterprise Linux는 더욱 강력한 컨테이너 호스트가 되어 프로덕션급 지원, 안정성, 보안 기능을 제공하고 쿠버네티스 및 Red Hat OpenShift를 지원합니다.

추가 자료

문서

컨테이너와 VM 비교

Linux 컨테이너 및 VM(가상 머신)은 다양한 IT 요소를 결합해 시스템의 나머지 부분으로 부터 격리하는 패키징된 컴퓨팅 환경입니다.

문서

컨테이너 오케스트레이션이란?

컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다.

문서

Linux 컨테이너란?

Linux 컨테이너는 시스템에서 격리된 프로세스로, 이러한 프로세스를 지원하는 데 필요한 모든 파일을 제공하는 고유한 이미지에서 실행됩니다.