podman 이란?

podman 은 Pod Manager tool 의 약자로 OCI 표준 container 와 런타임을 개발, 관리, 실행할 수 있게 해주는 container engine 입니다.

docker 와 비교하면 가장 큰 차이는 3가지라고 볼 수 있습니다.

Docker vs Podman

daemon-less

docker 와 가장 큰 차이는 podman 은 바로 데몬이 필요없다는 점(daemon-less)입니다.

docker 는 아래 그림처럼 Docker daemon 을 구동하고 여기에서 모든 작업이 이루어 지며 사용자는 docker client 명령어를 사용해서 도커 데몬을 제어했습니다.

docker 의 동작 방식


이 방식은 효율적이지만 큰 문제가 있는데 docker daemon 이 모든 컨테이너와 이미지를 관리하다 보니 도커 데몬이 죽거나 재시작하면 모든 컨테이너가 중지된다는 점입니다.

podman 은 이런 문제를 해결하기 위해 데몬에서 관리하지 않고 podman 이 각 컨테이너들을 fork/exec 방식으로 실행해서 별도로 구동하므로 별도의 데몬이 필요없고 이에 따라 컨테이너들을 훨씬 더 안정적으로 실행할 수 있습니다.

podman 의 동작 방식

root 권한 불필요

docker 는 docker daemon 에 모든 권한이 집중되다 보니 아무나 docker client 로 docker daemon 을 제어하지 못하도록 root 사용자만 docker client 를 사용하도록 했습니다.

하지만 이 방식은 시스템 운영자가 컨테이너 운영자가 되어야 하므로 업무 분리가 제대로 안 되게 만들며 과다한 root 권한이 필요하므로 오히려 보안에 더 취약합니다.

podman 은 fork/exec 으로 개별 컨테이너를 실행할 수 있으므로 1024 이하의 well known 포트를 사용하는등의 root 권한으로 실행해야 하는 작업이 아니라면 일반 사용자로 실행할 수 있으므로 담당자별 권한을 분리할 수 있으므로 시스템 운영자와 서비스/컨테이너 운영자로 전문화할 수 있으며 보안 측면에서도 더 뛰어납니다.

Kubernetes 지원

podman 은 대부분이 명령어가 docker 와 호환되지만 docker 가 제공하지 않는 기능도 제공합니다.

그 중에 하나는 Kubernetes 나 OpenShift 같은 container platform 으로 쉽게 이관할 수 있도록 Kubernetes Yaml 을 다음 명령어로 생성할 수 있습니다.

podman generate kube
BASH

또 k8s 에서 구동중인 pod 을 디버깅하기 위한 다음 명령어도 제공합니다.

podman pod
BASH

설치

Podman 은 Linux container 를 구동하기 위해 설계했으므로 OS X 나 Windows 에서는 podman 엔진을 구동할 수 없습니다. 대신 client 를 설치하고 Linux podman engine 에 network 으로 접속해서 관리할 수 있습니다.

OS X

OS X에서 podman client는 brew 로 설치하면 됩니다.

brew install podman
BASH


Windows

Windows 도 client 만 제공하며 Latest remote client for Windows 에서 다운받아서 설치하면 됩니다.

또는 WSL 2은 Ubuntu Linux 이므로 container engine 설치가 가능하므로 podman 을 설치하고 사용해도 됩니다


Linux

CentOS 8에서는 기본 제공되므로 다음 명령어로 podman 을 설치할 수 있습니다.

RHEL/CentOS 8

sudo yum -y install podman
BASH

RHEL/CentOS 7

CentOS 7 을 사용할 경우 최신 app을 제공하는 Kubic project 저장소를 등록하면 됩니다.

sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo  https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/devel:kubic:libcontainers:stable.repo
sudo yum -y install podman
BASH

"Requires: container-selinux" 에러가 나면 아래 패키지를 설치합니다.

sudo yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
CODE


Ubuntu 20.10 이상

Ubuntu 는 20.10 이상은 podman 이 포함되어 있으므로 아래 명령으로 설치합니다.

sudo apt -y update
sudo apt -y install podman
BASH

Ubuntu 20.04 이하

Ubuntu 20.04 이하는 다음 스크립트로 kubic 저장소를 등록하고 podman 을 설치합니다.

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt-get update
sudo apt-get -y upgrade 
sudo apt-get -y install podman
BASH

다른 리눅스 배포판에서 설치 정보는 https://podman.io/getting-started/installation#linux-distributions 에서 찾을 수 있습니다.

사용

podman 은 docker 와 명령어가 완전히 호환되므로 docker 를 사용할 줄 안다면 별도로 podman 명령어를 배울 필요가 없습니다. docker 를 podman 으로 대체하려면 다음과 같이 alias 만 하나 적어주면 됩니다.

alias docker=podman
BASH

만약 이미 docker 를 설치했고 docker daemon 도 구동되었다면 먼저 중지해야 합니다.

sudo systemctl stop docker
sudo systemctl disable docker
CODE

Ref