Post

Podman 소개

1. Podman 이란

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

Red Hat Enterprise Linux 8 / CentOS 8 부터는 Docker 대신 Podman을 제공한다.

2. Docker와 차이점

docker-podman

1) daemon-less

Docker와 가장 큰 차이는 Podman은 바로 데몬이 필요 없다는 점(daemon-less)이다.

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

docker-works

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

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

podman-works

2) root 권한 불필요

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

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

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

3) Kubernetes 지원

Podman은 대부분이 명령어가 Docker와 호환되지만, Docker가 제공하지 않는 기능도 제공한다.

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

1
podman generate kube

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

1
podman pod

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.