Docker Deepdive #1 - 컨테이너 표준: OCI와 CRI

· Infra, Docker

INFRA DEEPDIVE 시리즈 목차


ASK: 가상화 기술이란 무엇인가?

가상 머신이란, 하나의 물리적인 머신에서 독립적으로 일정한 리소스(CPU, Memory, Network, Storage)를 격리하는 기술
가상 머신들은 메모리 관점에서 각 리소스를 동작하기 위한 별도의 커널을 할당받고, 하이퍼바이저가 가상 머신들을 컨텍스트 스위칭하면서 동작시킴
하지만 가상 머신은 커널을 별도로 할당받는다는 점에서 하이퍼바이저의 컨텍스트 스위칭 비용이 문제가 크다는 단점이 있음

ASK: 컨테이너 기술이란 무엇인가?

컨테이너는 리소스를 격리된 상태로 제공할 수 있는 프로세스
컨테이너의 핵심은 프로세스이지만, 리소스를 격리할 수 있다는 점

ASK: 리소스 격리란 무엇인가?

하드웨어 관점에서는 CPU, Memory, Storage를 의미
소프트웨어 관점에서는 File System, Network를 의미

ASK: 컨테이너의 리소스 격리 기술은 무엇인가?

cgroup은 CPU, Memory, Storage 등 하드웨어 리소스를 가상화
namespace는 File System, Network 등 소프트웨어 리소스를 가상화

ASK: 컨테이너의 리소스를 격리하고, 컨테이너를 실행하는 주체는 누구인가?

컨테이너를 생성하고 실행하는 주체를 컨테이너 런타임이라고 함
컨테이너 런타임이 하는 일

ASK: 컨테이너를 실행하고, 리소스를 격리하는 저수준 컨테이너 런타임 runC

runC란 OCI 표준 스펙에 맞추어 컨테이너를 생성하고 실행하는 저수준 컨테이너 런타임
Docker 및 기타 컨테이너 플랫폼이 내부적으로 사용하고 있는 컨테이너 런타임 + 사실상 표준
runC로 구현된 계층을 저수준 컨테이너 런타임(Low-Level Container Runtime)이라고 함
runC가 하는 일

ASK: 컨테이너의 생성, 실행은 runC라는 저수준 컨테이너 런타임이 담당한다. 그렇다면 이미지 관리는 누가 담당할까? 고수준 컨테이너 런타임

이미지↔컨테이너는, 프로그램↔프로세스의 관계와 같다.
우리가 명령어(컨테이너 생성, 삭제, 조회)를 입력하면 명령어는 고수준 컨테이너 런타임에게 명령어를 전달
고수준 컨테이너 런타임은 필요에 따라 저수준 컨테이너 런타임에 명령 전달
고수준 컨테이너 런타임에는 containerd, CRI-O 등이 있음

EXAMPLE: 도커와 컨테이너 런타임의 관계

Docker Layer

Docker는 Docker CLI 도구와 Docker Demon으로 나뉘게 됨

ASK: 컨테이너를 관리하기 위한 도구들의 표준: 고수준 컨테이너 런타임 표준 CRI (Container Runtime Interface)

쿠버네티스가 등장한 이후, 컨테이너 런타임 여러 개를 동시에 사용할 수 있도록 컨테이너 런타임 표준이 제정되었음
쿠버네티스는 고수준 컨테이너 런타임을 관리하는 CRI-O, Docker 등을 제어해야 하는데, 이를 위해 고수준 컨테이너 런타임 표준이 필요해졌음

k8s and Container Runtime

ASK: 저수준 컨테이너 런타임 표준: OCI (Open Container Initiative)

OCI의 목표: 컨테이너 포맷/런타임 관련 표준 및 오픈 스펙을 제공하여 컨테이너 생태계 호환성 강화
runC는 OCI 호환 런타임, 구현 도구임
OCI 표준 컨테이너가 만족해야하는 5가지 원칙

EXAMPLE: CRI와 OCI의 이미지

Docker Layer

Untitled

참고자료