RH 리눅스를 사용하면서 Podman을 사용하면서 본인은 Docker와 Podman이 거의 같은 그냥 컨테이너 도구인줄 알았다. 하지만 두 컨테이너 도구는 비슷하면서도 다른점이 굉장히 많았다 그래서 한번 간단하게 살펴볼려고 한다.
먼저 두 컨테이너 도구의 아키텍처를 가볍게 살펴보겠다.

여기서 확인하고 새로알게 된 점은 Docker는 중앙에서 데몬(Daemon)이 실행되며 모든 컨테이너 이미지를 관리 한다는것이고 Podman은 데몬이 없다.
정리하자면 Docker는 클라이언트-서버 구조로 명령어를 api 형태로 Docker 데몬에게 전달하는 구조이다.
Podman은 Podman cli가 직접 컨테이너 런타임을 호출하는 형태로 컨테이너 독립적으로 실행된다.
쉽게 말해서 Podman은 데몬리스(Daemonless) 구조를 가진다.
그 다음으로는 rootless이다. 이러한 점을 알게 된계기는 Docker처럼 평소대로 컨테이너를 루트 계정에서 실행한 후, 일반 사용자(admin 계정)로 전환해보았더니 컨테이너가 보이지 않았다. 분명 실행 중인 컨테이너가 있었지만, 해당 사용자에게는 아무런 정보도 나타나지 않았다.

이렇게 다음과 같이 이미지를 잘 빌드하고 실행했다.
컨테이너를 루트 계정에서 실행한 후, 일반 사용자(admin 계정)로 전환해보았더니 컨테이너가 보이지 않았다. 분명 실행 중인 컨테이너가 있었지만, 해당 사용자에게는 아무런 정보도 나타나지 않았다.
하지만 일반 유저 계정인 admin 이라는 계정으로 왔을때는 아무런 컨테이너가 돌고 있지 않은 모습을 확인할 수 있었다.

Podman은 기본적으로 루트리스(Rootless) 컨테이너를 지원한다. 일반 사용자도 루트 권한 없이 안전하게 컨테이너를 실행할 수 있어 보안 측면에서 큰 이점이 있다.
Docker도 루트리스 모드를 지원하긴 하지만, 별도 설치와 설정이 필요하고 과정이 복잡하다.
Podman을 사용해보면서 systemd와 통합을 할 수 있다는게 나에게는 신선한 충격이었다.(물론 Docker도 가능하지만 복잡하다) 이제 컨테이너도 재부팅을 하면 자동으로 재시작이 된다는 소리를 듣고 굉장히 편리하겠다는 생각을 했다.
사용하는 방법은 대충 다음과 같다.
먼저 systemd에 등록할 컨테이너를 확인하고 generte 명령어를 사용하여 service 파일을 만들 수 있다.
podman generate systemd --name 이름 --files
결과물을 사용자 systemd 디렉터리에 넣어준다.
loginctl enable-linger 사용자
systemctl --user enable service이름
이제 loginctl과 systemctl 을 통해 해당 사용자가 만든 컨테이너를 계속 실행할 수 있게 설정해둔다.
다른 여러 기능도 존재한다. kubernetes 환경을 위해 yaml 파일 생성이라던가 Pod와 유사한 기능도 지원을 한다.
아직도 Docker는 업계에서 널리 사용되는 사실상의 표준이다. 하지만 Podman은 보안, 사용자 권한 관리, systemd 통합 등 여러 면에서 Docker와 차별화된 강점을 가지고 있다.
특히 보안이 중요한 서버 환경이나 개발자 개인 워크스테이션에서는 Podman이 더 적합한 선택이 될 수도 있다.
앞으로 더 다양한 실습을 통해 Podman의 기능을 더 깊이 파악해보고 싶다.