메뉴 닫기

Rocky Linux에서 Podman으로 Docker 대체하기

 

Rocky Linux 에서 Podman으로 Docker 대체하기

rocky linux 10 podman docker, RHEL 10 기반 Rocky Linux 10에서는 더 이상 Docker를 ‘기본값’으로 전제하지 않습니다.

대신 Red Hat이 직접 관리하는 Podman이 컨테이너 런타임의 중심이 되었고, Rocky 10 역시 이 흐름을 그대로 따라갑니다.

Podman은 컨테이너를 개발, 관리, 실행하기 위한 오픈 소스 도구로, 데몬리스(daemonless) 아키텍처와 루트리스(rootless) 컨테이너 실행을 통해 보안을 강화한 것이 특징입니다. 이는 관리자 권한이 없는 일반 사용자도 컨테이너를 실행할 수 있게 하여 보안 위험을 줄여주며, 기존 Docker 명령어와 호환되면서도 거의 동일한 사용 경험을 제공합니다. 또한 컨테이너를 그룹화하는 파드(pod) 개념을 지원하여 여러 컨테이너를 함께 실행하고 관리할 수 있습니다. 

 

     주요 특징

  • 데몬리스 아키텍처
  • 백그라운드 데몬 프로세스 없이 컨테이너를 실행하므로, 기존의 Docker 방식보다 보안상 유리합니다. 
     
  • 루트리스(rootless) 컨테이너
    관리자 권한 없이 컨테이너를 실행할 수 있어, 보안 리스크를 줄여줍니다. 

     
  • Docker CLI 호환
    기존의 docker 명령어를 거의 그대로 podman으로 사용할 수 있습니다. 

     
  • 파드(Pod) 지원
    여러 컨테이너를 파드로 묶어 함께 실행하고 관리할 수 있습니다. 

     
  • 다양한 플랫폼 지원
    Linux는 물론, 가상 머신을 통해 Mac 및 Windows에서도 사용할 수 있습니다. 

     

   장점

  • 보안 강화
    데몬이 없기 때문에 단일 실패 지점(single point of failure)이 줄어들고, 루트리스 컨테이너로 인해 권한 상승 공격의 위험이 감소합니다. 

     
  • 쉬운 사용성
    Docker와 명령어 호환성이 높아 기존 Docker 사용자가 쉽게 전환할 수 있습니다. 

     
  • 유연성
    파드를 지원하여 컨테이너 오케스트레이션의 일부 기능을 로컬 환경에서 미리 테스트해 볼 수 있습니다. 

 

rocky linux 10 podman docker 조합으로 실제 환경에 컨테이너 런타임을 설치해 보겠습니다.

sudo dnf update -y
sudo dnf install -y podman

# 설치 확인

podman –version
podman info

기존에 docker 명령을 많이 쓰고 있다면, podman-docker 패키지로 docker 명령어를 그대로 사용할 수 있습니다.

dnf install -y podman-docker

# 이제 docker 명령을 쳐도 Podman이 동작
docker –verison

 

– 컨테이너 레지스트리 설정 (docker.io 포함)

vi /etc/containers/registries.conf

  • 기존에 있던 설정 부분은 주석처리 후 해당 내용을 넣어줍니다. 

[registries.search]
registries = [“registry.access.redhat.com”, “registry.redhat.io”, “docker.io”, “quay.io”]

기존에 쓰던 Docker Hub 이미지(docker.io/library/nginx)도 그냥 podman pull nginx로 잘 넘어옵니다.

 

– Podman 기본 사용법 (Docker와 1:1 대응)

podman의 기본적인 명령어는 다음과 같으며, 도커 명령어를 사용할 수 있습니다.

  • # 이미지 받기
     podman pull nginx:lastest
  • # 컨테이너 실행 (docker run -d –name web -p 80:80 nginx)
     podman run -d –name web -p 80:80 nginx:lastest
  • # 실행 중 컨테이너 목록
     podman ps
  • # 정지 / 삭제
     podman stop web
     podman rm web

 

– 컨테이너 안으로 들어가기

podman exec -it web /bin/bash

– 볼륨 마운트, 환경변수

podman run -d --name web \
-p 80:80 \
-v /srv/nginx/html:/usr/share/nginx/html:ro \
-e TZ=Asia/Seoul \
nginx:latest
 

Rootless Podman: 일반 사용자로 컨테이너 돌리기

  • root로 실행: 기존 Docker처럼 sudo podman run ...

  • rootless: 운영자 계정(예: devops)으로 직접 podman run ...

    • 사용자 네임스페이스, fuse-overlayfs 등을 활용해 root 권한 없이 컨테이너를 운영하여 보안을 강화할 수 있습니다. 

     

    1. fuse-overlayfs 설치

      Podman 문서에서는 rootless 환경에서 OverlayFS 대신 fuse-overlayfs를 자동 사용하도록 권장합니다.

       
      dnf install -y fuse-overlayfs
    2. rootless로 로그인한 뒤:

       
      podman info --debug | grep -i rootless

      rootless 모드가 활성화되어 있으면 이후부터는 

       
      podman pull nginx
      podman run -d --name web -p 8080:80 nginx

    서비스용으로는 여전히 root Podman을 쓰고, 개발/테스트나 퍼스널 컨테이너는 rootless로 분리하는 운영 패턴으로 운영할 수 있습니다.

    • podman generate systemd는 컨테이너/Pod에 대한 systemd unit 파일을 생성해주는 명령입니다.

    # 예: web 컨테이너에 대한 unit 생성
    podman create --name web -p 80:80 nginx
    podman generate systemd --name web --files --new
     
    # 현재 디렉토리에 podman-web.service 생김
    sudo mv podman-web.service /etc/systemd/system/
     
    sudo systemctl daemon-reload
    sudo systemctl enable --now podman-web.service

     

  • 로그와 리소스 모니터링

    • Podman 컨테이너는 systemd에서 관리하면 journald에 로그가 모입니다.

    • podman stats로 컨테이너 단위 리소스 사용량을 확인 할 수 있습니다.

     
    podman logs web
    podman stats

     

  • 이미지/볼륨 정리

    • Docker와 마찬가지로, 주기적으로 unused 이미지/컨테이너/볼륨 정리 필요합니다. :

     
    podman image prune -a
    podman container prune
    podman volume prune
     
     
    rocky linux 10 podman docker 구성을 사용하면 데몬리스 구조와 rootless 모드로 보안을 강화하면서도 기존 Docker와 유사한 사용성을 유지할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다.