# docker 와 cri-o 비교

### 소 개

1. Container 표준규격이 없을때 Container 포맷과 런타임의 사실상 표준은 Docker가 지배.
2. Google / Redhat / MS / IBM 등 Container 간의 이식성을 표준화 화기 위해 OCI(Open Container Initiative) 구성
3. k8s의 컨테이너 런타임 구성을 위해 CRI(Container Runtime Interface) 등장
4. RHEL 8버전이상, k8s 1.20 버전이상, Openstack 16버전이상, Openshift 4버전이상 , awx 18버전 이상에서 컨테이너 런타임을 podman으로 변경

<table border="1" id="bkmrk-perplexity%EC%97%90%EC%84%9C-%EC%83%9D%EC%84%B1%ED%95%9C-ai%EC%9D%B4" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>[![52a71e12-7840-4814-a0ad-baa26f1301aa.png](http://wiki.igoni.kr/uploads/images/gallery/2026-03/scaled-1680-/52a71e12-7840-4814-a0ad-baa26f1301aa.png)](http://wiki.igoni.kr/uploads/images/gallery/2026-03/52a71e12-7840-4814-a0ad-baa26f1301aa.png)

</td></tr><tr><td class="align-right">perplexity에서 생성한 AI이미지</td></tr></tbody></table>

### 컨테이너 런타임 레벨 종류

1. low-level runtime 
    1. 각 컨테이너별 cpu나 메모리 같은 리소스 양 제한하는 역활 (ex. runC, Container, Docker)
2. high-level runtime
    
    <div>
    1. 어플리케이션을 실행하고 모니터링을 위한 API제공
    2. low-level 위에 실행되는 runtime (ex. containerd, docker, cri-o)
    
    </div>

### CRI-O 소개

1. cri-o는 컨테이너 실행만 가능하기 때문에 이미지 생성이나 관리를 하기 위해서는 추가 Component들이 필요함. (추가 Component정보는 아래 기술)
2. fork/exec 모델로 작동
3. 인식가능한 파일시스템은 Overlayfs, devicemapper, btrfs 기반에서 가능하고, nfs,glusterfs,cephfs는 아직 stable하지 않음)
4. docker schema v1/2 모두 지원

### CRI-O 컴포넌트 종류

1. podman(포드맨) : Container 실행을 위한 Tool
2. Buildah(빌다) : Container 이미지 생성
3. skopeo(스코피오) : 이미지 저장소 관리 Tool

### crictl과 podman 차이

1. crictl은 cri프로토콜을 사용해서 cli 제공
2. podman은 daemon-less로 pod과 컨테이너를 관리하는 cli, docker와 동일한 cli기능 제공.
3. 다만 cri-o와 직접 통신하지는 않기 때문에 cri-o에서 생성된 컨테이너를 볼수 없음.(libpod라는 podman의 컨테이너 관리 라이브러리 개발을 통해 개선할 예정)
4. Docker에서 실행 혹은 빌드된 컨테이너들을 podman으로 실행 가능.

### 프로세스 구동모델 소개

1. fork/exec 모델과 서버/클라이언트 모델의 동작 방식 비교  
    [![image.png](http://igoni.kr/uploads/images/gallery/2023-12/scaled-1680-/1eXimage.png)](http://igoni.kr/uploads/images/gallery/2023-12/1eXimage.png)
2. podman 과 Docker의 프로세스 실행 비교  
    [![image.png](http://igoni.kr/uploads/images/gallery/2023-12/scaled-1680-/Czlimage.png)](http://igoni.kr/uploads/images/gallery/2023-12/Czlimage.png)
3. ### 프로세스 구동방식 비교


<table id="bkmrk-docker-podman-%EA%B5%AC%EB%8F%99-%EB%B0%A9%EC%8B%9D-"><tbody><tr><th scope="row">  
</th><th scope="col">Docker</th><th scope="col">Podman</th></tr><tr><th scope="row">구동 방식</th><td>Docker daemon 구동필요</td><td>Daemon-less (systemd 에서 podman 실행)</td></tr><tr><th scope="row">실행 권한</th><td>프로세스 구동시 root 권한 필요</td><td>root-less (1024 이하 포트 실행시에만 root권한 필요)</td></tr><tr><th scope="row">프로세스 실행 모델</th><td>서버/클라이언트</td><td>fork/exec</td></tr></tbody></table>

<div class="wikimodel-emptyline" id="bkmrk--0">  
</div><div class="wikimodel-emptyline" id="bkmrk--1">  
</div>### *reference*

- *<span class="wikiexternallink">[https://cri-o.io/](https://cri-o.io/)</span>*
- *<span class="wikiexternallink">[https://www.openshift.com/blog/crictl-vs-podman](https://www.openshift.com/blog/crictl-vs-podman)</span>*
- *<span class="wikiexternallink">[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.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/)</span>*
- *<span class="wikiexternallink">[https://www.redhat.com/ko/blog/introducing-cri-o-10](https://www.redhat.com/ko/blog/introducing-cri-o-10)</span>*
- *<span class="wikiexternallink">[https://docs.openshift.com/container-platform/3.11/crio/crio\_runtime.html](https://docs.openshift.com/container-platform/3.11/crio/crio_runtime.html)</span>*