컨테이너 기반의 애플리케이션 배포는 최근 몇 년간 IT 업계에서 매우 중요한 기술로 자리 잡았습니다. Docker는 이러한 컨테이너 기술의 선두주자였지만, Docker Daemon에 대한 의존성 및 라이선스 문제로 인해 많은 대안이 등장했습니다. 그 중 하나가 바로 Podman입니다. 이번 글에서는 Podman의 개요와 설치 방법, 사용법을 알아보고, Docker와의 차이점 및 장단점을 비교해보겠습니다.

본론

Podman 개요

Podman은 RedHat에서 개발한 컨테이너 관리 도구로, Docker와 호환되는 인터페이스를 제공하면서도 중요한 차이점을 가집니다. Docker와 달리 Podman은 데몬리스(daemonless) 방식으로 동작하여 루트 권한이 필요 없는 안전한 컨테이너 관리가 가능하다는 점이 특징입니다. 즉, Podman은 Docker와 같은 명령어 인터페이스를 제공하지만 백그라운드에서 지속적으로 실행되는 데몬 프로세스 없이도 컨테이너를 관리할 수 있습니다.

Podman 설치 방법

Podman의 설치는 다양한 운영체제에서 간단하게 이루어질 수 있습니다. 여기서는 LinuxMacOS에서의 설치 방법을 간단히 소개합니다.

1. Linux

대부분의 Linux 배포판에서는 패키지 관리자를 통해 쉽게 설치할 수 있습니다. 예를 들어, Ubuntu에서는 다음과 같은 명령어를 사용하여 Podman을 설치할 수 있습니다:

sudo apt update
sudo apt install podman

또한, RHEL/CentOS와 같은 배포판에서는 dnf 또는 yum 명령어를 사용하여 설치할 수 있습니다:

  • dnf 명령어를 사용하는 경우:
    sudo dnf install podman
    
  • yum 명령어를 사용하는 경우 (RHEL 7/CentOS 7 등):
    sudo yum install podman
    

참고) –allowerasing 옵션 이 옵션은 충돌하는 패키지를 제거하고 대신 새 패키지를 설치하려고 할 때 유용합니다. 이 옵션을 사용하면 문제가 되는 패키지를 제거하고 설치가 계속 진행됩니다. docker가 기존에 설치되어있는 경우 오류가 발생하여 해당 옵션 적용이 필요한 것으로 보입니다.

2. MacOS

MacOS에서는 Homebrew를 사용하여 설치할 수 있습니다

brew install podman

설치 후에는 Podman Desktop을 GUI로 활용할 수도 있습니다. 이 도구는 Docker Desktop과 유사하게 컨테이너 관리를 시각적으로 처리할 수 있게 해줍니다.

Podman 사용법

Podman은 Docker와 매우 유사한 명령어 인터페이스를 제공합니다. 따라서 Docker를 사용해본 경험이 있는 사용자라면 쉽게 적응할 수 있습니다.

1. 설치 확인 및 버전 확인

Podman이 정상적으로 설치되었는지 확인하고 버전을 확인하려면 다음 명령어를 사용할 수 있습니다:

podman version

## 실행결과 예시
Version: 4.2.0
API Version: 4.2.0

2. 이미지 관리

Podman을 사용하여 이미지를 검색, 다운로드, 확인, 삭제할 수 있습니다.

  • 이미지 검색
podman search [이미지명]
  • 이미지 다운로드 ```bash podman pull [이미지명]

실행결과 예시 Resolved “nginx” as an alias Trying to pull docker.io/library/nginx:latest… Getting image source signatures Copying blob…


- **이미지 목록 확인** 

```bash
podman images

실행결과 예시
[root@rocky8 ~]# podman images
REPOSITORY                TAG         IMAGE ID      CREATED     SIZE
docker.io/library/ubuntu  latest      59ab366372d5  6 days ago  80.6 MB
  • 이미지 삭제
podman rmi [이미지ID]

실행결과 예시
[root@rocky8 ~]# podman rmi 59ab366372d5
Untagged: docker.io/library/ubuntu:latest
Deleted: 59ab366372d56772eb54e426183435e6b0642152cb449ec7ab52473af8ca6e3f

3. 컨테이너 실행 및 관리

Podman을 사용해 컨테이너를 실행하고, 관리할 수 있습니다.

  • 컨테이너 실행: podman run 명령어를 사용하여 컨테이너를 실행할 수 있습니다.
podman run --name [컨테이너명] -d [이미지명]

## 실행결과 예시
c3f279d17e0a
  • 실행 중인 컨테이너 목록 확인
podman ps

## 실행결과 예시
CONTAINER ID  IMAGE                 COMMAND     CREATED        STATUS        PORTS       NAMES
c3f279d17e0a  docker.io/library/nginx  /docker-entry...  5 seconds ago  Up 5 seconds  0.0.0.0:8080->80/tcp  mynginx
  • 컨테이너 중지 및 재시작
podman stop [컨테이너명]
podman restart [컨테이너명]
  • 컨테이너 삭제
podman rm [컨테이너명]
  • 모든 정지된 컨테이너 강제 삭제
podman rm -f $(podman ps -a -q)
  • 컨테이너 로그 확인
podman logs [컨테이너명]

4. 네트워킹 및 볼륨 설정

Podman을 사용해 네트워킹 및 볼륨을 설정할 수 있습니다.

  • 포트 포워딩하여 실행
    podman run -d -p [호스트포트]:[컨테이너포트] [이미지명]
    
  • 호스트 네트워크 사용
    podman run -d --net=host [이미지명]
    
  • 호스트 디렉토리 마운트
    podman run -d --name [컨테이너명] -v /호스트/디렉토리:/컨테이너/디렉토리 [이미지명]
    

5. 실행 중인 컨테이너의 셸 접속

Podman을 사용하여 실행 중인 컨테이너의 셸에 접속할 수 있습니다.

podman exec -it [컨테이너명] /bin/bash

6. Pod 관리

Podman의 Pod 기능을 사용하여 여러 컨테이너를 그룹으로 관리할 수 있습니다.

  • 새로운 Pod 생성
    podman pod create --name [pod명]
    
  • Pod 내부에 컨테이너 추가하여 실행
    podman run --pod [pod명] -d [이미지명]
    
  • Pod 삭제
    podman pod rm [pod명]
    

7. 시스템 재부팅 시 자동 실행 설정

Podman에서 컨테이너를 자동으로 시작하기 위해 systemd와 연동할 수 있습니다.

  • systemd 유닛 파일 생성
    podman generate systemd --name [컨테이너명] --files --new
    
  • 시스템 자동 실행 설정 생성된 파일을 ~/.config/systemd/user/에 복사하고 활성화합니다
mkdir -p ~/.config/systemd/user/
mv [컨테이너명].service ~/.config/systemd/user/

systemctl --user enable [컨테이너명].service
systemctl --user start [컨테이너명].service

Podman vs Docker 비교

특징 Podman Docker
데몬 사용 데몬 없이 작동 (rootless 지원) 데몬 필요 (root 권한 요구)
CLI 호환성 Docker와 호환되는 CLI 제공 자체 CLI 제공
보안성 rootless 모드로 보안 강화 데몬으로 인해 잠재적 보안 위협 존재
시스템 의존성 데몬 없음으로 SPoF 제거 데몬이 SPoF로 작용 가능
이미지 빌드 buildah 유틸리티 사용 자체 빌드 기능 제공
이미지 전송 skopeo 사용 자체 push 기능 제공

Podman은 특히 보안과 안정성 측면에서 Docker보다 유리한 점이 많습니다. 데몬 없이 작동하므로 시스템의 안정성을 높이고, rootless 모드를 통해 보안성을 강화합니다. 반면, Docker는 여전히 널리 사용되고 있으며 다양한 도구와의 호환성이 뛰어납니다.

출처: https://connect.hyland.com/t5/alfresco-blog/using-podman-with-alfresco/ba-p/124875

결론

Podman은 Docker에 대한 훌륭한 대안으로, 보안과 자원 관리 측면에서 우수한 성능을 제공합니다. 특히 데몬 없이 동작하는 특성 덕분에 시스템 자원을 보다 효율적으로 사용할 수 있으며, 루트리스 컨테이너 지원으로 보안도 강화되었습니다. 반면 Docker에 비해 생태계가 아직 성숙하지 않은 점은 고려해야 할 요소입니다. 각 기술의 장단점을 이해하고, 환경에 맞는 선택을 통해 최적의 컨테이너 관리 방법을 찾는 것이 중요합니다.

참고자료

태그: , ,

카테고리:

업데이트:

댓글남기기