티스토리 뷰

development

Container에 대한 개념 정리

주먹불끈 2022. 12. 24. 19:52

개요

Docker, Containerd, CRI-O, Podman 등등 Container 관련한, 비슷한 헷갈리는 개념들이 많아서 확실히 정리를 해보고자 한다.

 

특히나 Container Engine Container Runtime, 둘을 혼용해서 쓰는 경우가 있어서 더욱 헷갈렸다.

Container Runtime 의미에서 Container Engine 같은 의미로 쓰는 경우가 있으며

low-level Container Runtime으로 쓰일때는 runc 정도의 개념으로 쓰인다.

 

지금부터 하나씩 천천히 짚어가보자

Docker

container 널리 퍼뜨린 장본인이다. Docker container 거의 같은 개념으로 생각될 정도다.

그러다 여러 기업들이 뛰어들자 혼돈이 우려되어 표준을 정리하기 시작했다.

Open Container Initiative(OCI)

container container image 관련한 표준 스펙을 정하는 곳이다.

Container Runtime Interface(CRI)

Kubernates 내부에 있는 container runtime 사이의 API 정의한 것이다.

인터페이스는 약속이라고 생각하면 이해하기 쉽다. 예를 들면 이런것이다.

container image를 실행시키고 싶다면 이런 저런 파라미터를 저쪽으로, 요렇게 보내면 된다.

전체 조망

다음 그림이 OCI spec CRI, 그리고 이어서 소개할 많은 것들을 설명해주고 있다.

  • OCI spec 스펙에 따라 실제로 구현한 runc 보인다. container image 실행을 다루고 있으며 runc 이용해 container process를 생성하고 실행할 있다.
  • CRI 번째 단계에서 보인다. CRI Kubernetes container runtime 소통하기 위한 약속이라고 하였는데, 아래의 containerd CRI-O 약속을 준수하여 만든 Container Runtime 것이다. (low-lovel의 container runtime인 runc 구분하자.)

출처: Tutorial Works: The relationship between Docker, CRI-O, containerd and runc – in a nutshell

Docker 사용한 전형적인 사용 흐름을 살펴보자

  • 사용자는 docker cli툴을 이용해 containerd라는 Container Runtime 명령을 전달한다.
  • containerd Runtime image push/pull 하고, 저장, 네트워킹, container 관리를 해준다.
  • 하지만 저수준의 Container Runtime runc 실제 작업을 한다. Go 만든 libcontainer 포함하고 있다.

출처: Tutorial Works: The relationship between Docker, CRI-O, containerd and runc – in a nutshell

 

그러면 Dockershim 뭔데?

대충 아래처럼 이해하면

 

Kubernetes: container 쓰고 싶다.

Docker: 그러면 dockershim 쓰면 . 이걸 Kubernetes안에 넣어두고 docker container 실행할때 써요.

Kubernetes: 그런데 CRI 호환되는 녀석이면 좋겠는데... 찜찜해서 dockershim 빼버릴거임

  • docker: 그러면 호환되는 containerd 라는 Container Runtime 만들어줌
  • Red Hat 비롯한 회사들: CRI-O라는 Container Runtime 만들어줌

Docker Image 정확히는 OCI 포맷에 맞게 패키징된 이미지

그래서 OCI image format spec 맞게 만들어진 이미지는 docker 명령이건, Kubernetes cluster이건, 심지어 podman에서도 사용할 있다.

Containerd CRI-O

runc 저수준(low-level) Container Runtime이라면 containerd CRI-O 고수준(high-level) Container

이들을 Container Engine이라고도 한다. CRI 만족한다. , Kubernetes에서 있다.

runc

저수준에서 실제로 container 관련한 작업을 하는 녀석이다. container 생성하고 실행하는 녀석인 것이다. 리눅스의 namespace control group 실제 소통을 한다.

 

runc Golang으로 만든 OCI 호환 Container Runtime중의 하나일 뿐이다. 다른 녀석들로는 crun, kata-runtime, gVisor등이 있다.

잠깐, 마지막으로 podman

CRI-O, containerd, Docker cli 같은 역할을 하는 녀석인데 몇몇 다른 특성을 가진 녀석이라고만 생각해두자. 좋은 이미지 하나 공유한다.

 

출처: https://mkdev.me/posts/the-tool-that-really-runs-your-containers-deep-dive-into-runc-and-oci-specifications

 

참고 링크들

 

반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함