콘텐츠로 이동






Docker 와 cri o 비교

back

소개

  1. Docker는 오랫동안 컨테이너 포맷과 실행 도구의 사실상 표준처럼 사용되어 왔다.
  2. 이후 여러 벤더가 공통 규격을 맞추기 위해 OCI(Open Container Initiative)를 추진했다.
  3. Kubernetes 환경에서는 컨테이너 런타임과의 공통 인터페이스가 필요해 CRI(Container Runtime Interface)가 등장했다.
  4. RHEL 8 계열에서는 컨테이너 작업을 위해 podman, buildah, skopeo, crun, CRI-O 같은 도구가 널리 사용된다.

컨테이너 런타임 종류

  1. Low-level runtime

    1. 실제 컨테이너 프로세스를 생성하고 격리하는 역할을 한다.
    2. 대표적으로 runc, crun 같은 OCI runtime이 있다.
    3. CPU나 메모리 제한 자체를 직접 담당한다기보다, 상위 도구가 전달한 설정을 바탕으로 컨테이너 실행을 수행한다.
  2. High-level runtime

    1. 컨테이너 실행, 이미지 관리, API 제공, 오케스트레이션 연동을 담당한다.
    2. 대표적으로 containerd, CRI-O, Docker Engine이 있다.
    3. Kubernetes 환경에서는 CRI를 구현한 런타임이 중요하다.

CRI-O 소개

  1. CRI-O는 Kubernetes용으로 설계된 경량 OCI 호환 컨테이너 런타임이다.
  2. CRI-O는 컨테이너를 직접 실행하는 데 집중하며, 이미지 생성과 관리는 별도 도구가 담당한다.
  3. 동작 방식은 fork/exec 모델에 가깝다.
  4. CRI-O는 overlayfs 기반 스토리지를 주로 사용하며, 일반적으로 NFS, GlusterFS, CephFS 같은 네트워크 파일시스템은 권장되지 않는다.
  5. Docker schema v1/v2 이미지와 OCI 이미지를 다룰 수 있다.

관련 컴포넌트

  1. Podman

    1. 컨테이너 실행, 조회, 중지, 관리용 CLI 도구다.
    2. daemon-less 방식으로 동작한다.
    3. Docker CLI와 유사한 사용자 경험을 제공한다.
    4. Podman은 CRI 프로토콜을 사용하지 않으므로 CRI-O와 직접 통신하지 않는다.
    5. Podman과 CRI-O는 저장소 백엔드의 일부를 공유할 수 있지만, 서로의 컨테이너 목록을 직접 동일하게 보지 못할 수 있다.
  2. Buildah

    1. OCI 호환 컨테이너 이미지를 빌드하는 도구다.
    2. Dockerfile 기반 빌드와 from-scratch 방식 모두 지원한다.
    3. 이미지 생성과 서명, push 작업에 활용할 수 있다.
  3. Skopeo

    1. 컨테이너 이미지 복사, 검사, 삭제, 서명, 저장소 간 이동에 사용하는 도구다.
    2. 이미지 자체를 다루는 관리 도구에 가깝다.
  4. crictl과 podman 차이

    1. crictl은 CRI를 구현한 런타임(CRI-O, containerd 등)과 통신하는 CLI다.
    2. podman은 CRI 도구가 아니라 컨테이너와 pod를 직접 관리하는 CLI다.
    3. crictl은 Kubernetes 런타임 검증과 디버깅에 적합하고, podman은 일반 컨테이너 개발과 운영에 적합하다.
    4. Docker에서 빌드하거나 실행한 OCI 호환 이미지는 Podman에서 실행할 수 있다.
    5. 반대로 Podman으로 만든 컨테이너를 CRI-O가 자동으로 “같은 목록”으로 보는 것은 아니다.

프로세스 구동 모델

  1. 프로세스 구동모델 소개

    1. fork/exec 모델과 서버/클라이언트 모델의 동작 방식 비교

      back

      1. fork/exec 모델
        • 부모 프로세스가 자식 프로세스를 직접 생성하고 종료를 관리한다.
        • Podman, Buildah, Skopeo 같은 도구가 이 방식에 가깝다.
      2. 서버/클라이언트 모델
        • 백그라운드 데몬이 요청을 받아 처리한다.
        • Docker Engine이 대표적인 예시다.
    2. podman 과 Docker의 프로세스 실행 비교
      image.png

동작 방식 비교

항목 Docker Podman
구동 방식 Docker daemon 필요 daemon-less
프로세스 모델 서버/클라이언트 fork/exec
권한 모델 기본적으로 root 중심 rootless 지원
사용 목적 범용 컨테이너 관리 daemon 없는 컨테이너 운영

reference




작성일: 2026년 6월 18일 ,  마지막 업데이트: 2026년 8월 15일