Docker 와 cri o 비교

소개
- Docker는 오랫동안 컨테이너 포맷과 실행 도구의 사실상 표준처럼 사용되어 왔다.
- 이후 여러 벤더가 공통 규격을 맞추기 위해 OCI(Open Container Initiative)를 추진했다.
- Kubernetes 환경에서는 컨테이너 런타임과의 공통 인터페이스가 필요해 CRI(Container Runtime Interface)가 등장했다.
- RHEL 8 계열에서는 컨테이너 작업을 위해 podman, buildah, skopeo, crun, CRI-O 같은 도구가 널리 사용된다.
컨테이너 런타임 종류
-
Low-level runtime
- 실제 컨테이너 프로세스를 생성하고 격리하는 역할을 한다.
- 대표적으로 runc, crun 같은 OCI runtime이 있다.
- CPU나 메모리 제한 자체를 직접 담당한다기보다, 상위 도구가 전달한 설정을 바탕으로 컨테이너 실행을 수행한다.
-
High-level runtime
- 컨테이너 실행, 이미지 관리, API 제공, 오케스트레이션 연동을 담당한다.
- 대표적으로 containerd, CRI-O, Docker Engine이 있다.
- Kubernetes 환경에서는 CRI를 구현한 런타임이 중요하다.
CRI-O 소개
- CRI-O는 Kubernetes용으로 설계된 경량 OCI 호환 컨테이너 런타임이다.
- CRI-O는 컨테이너를 직접 실행하는 데 집중하며, 이미지 생성과 관리는 별도 도구가 담당한다.
- 동작 방식은 fork/exec 모델에 가깝다.
- CRI-O는 overlayfs 기반 스토리지를 주로 사용하며, 일반적으로 NFS, GlusterFS, CephFS 같은 네트워크 파일시스템은 권장되지 않는다.
- Docker schema v1/v2 이미지와 OCI 이미지를 다룰 수 있다.
관련 컴포넌트
-
Podman
- 컨테이너 실행, 조회, 중지, 관리용 CLI 도구다.
- daemon-less 방식으로 동작한다.
- Docker CLI와 유사한 사용자 경험을 제공한다.
- Podman은 CRI 프로토콜을 사용하지 않으므로 CRI-O와 직접 통신하지 않는다.
- Podman과 CRI-O는 저장소 백엔드의 일부를 공유할 수 있지만, 서로의 컨테이너 목록을 직접 동일하게 보지 못할 수 있다.
-
Buildah
- OCI 호환 컨테이너 이미지를 빌드하는 도구다.
- Dockerfile 기반 빌드와 from-scratch 방식 모두 지원한다.
- 이미지 생성과 서명, push 작업에 활용할 수 있다.
-
Skopeo
- 컨테이너 이미지 복사, 검사, 삭제, 서명, 저장소 간 이동에 사용하는 도구다.
- 이미지 자체를 다루는 관리 도구에 가깝다.
-
crictl과 podman 차이
- crictl은 CRI를 구현한 런타임(CRI-O, containerd 등)과 통신하는 CLI다.
- podman은 CRI 도구가 아니라 컨테이너와 pod를 직접 관리하는 CLI다.
- crictl은 Kubernetes 런타임 검증과 디버깅에 적합하고, podman은 일반 컨테이너 개발과 운영에 적합하다.
- Docker에서 빌드하거나 실행한 OCI 호환 이미지는 Podman에서 실행할 수 있다.
- 반대로 Podman으로 만든 컨테이너를 CRI-O가 자동으로 “같은 목록”으로 보는 것은 아니다.
프로세스 구동 모델
-
프로세스 구동모델 소개
-
fork/exec 모델과 서버/클라이언트 모델의 동작 방식 비교

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

-
동작 방식 비교
| 항목 | Docker | Podman |
|---|---|---|
| 구동 방식 | Docker daemon 필요 | daemon-less |
| 프로세스 모델 | 서버/클라이언트 | fork/exec |
| 권한 모델 | 기본적으로 root 중심 | rootless 지원 |
| 사용 목적 | 범용 컨테이너 관리 | daemon 없는 컨테이너 운영 |
reference
- https://cri-o.io/
- https://www.openshift.com/blog/crictl-vs-podman
- https://www.s-core.co.kr/insight/view/oci%EC%99%80-cri-%EC%A4%91%EC%8B%AC%EC%9C%BC%EB%A1%9C-%EC%9E%AC%ED%8E%B8%EB%90%98%EB%8A%94-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%83%9D%ED%83%9C%EA%B3%84-%ED%9D%94%EB%93%A4%EB%A6%AC%EB%8A%94/
- https://www.redhat.com/ko/blog/introducing-cri-o-10
- https://docs.openshift.com/container-platform/3.11/crio/crio_runtime.html
작성일: 2026년 6월 18일
,
마지막 업데이트: 2026년 8월 15일