Docker VS ContainerD + CLI tools

Watermelon·2025년 11월 13일

CKA 학습 과정

목록 보기
7/35

Docker VS ContinerD

rkt는 초기 docker의 보안 취약점을 보완하여 나옴
하지만 docker가 더 많이 간편하게 쓰이기 시작

만약 rkt가 docker보다 많이 쓰였다면,
쿠버네티스(선장)이 아니라 NASA나.. astronaut 같은거로 이름을 짓지 않았을까?
A8t 이런 느낌..ㅎ ㅎ

쿠버네티스는 CRI(Container Runtime Interface)를 사용하며,
OCI(Opne Container Initative) 준수 시 작동이 가능하다

docker 이 외로 호환성을 위해 업데이트한 것으로 보이는데,
docker는 CRI 기반으로 만들어지지 않아서 dockershim을 개발하여 사용할 수 있게끔 하였다

잡담:
정부사업만 계속 하다보면 다른 사업은 못하고 정부사업만 매진하게 된다는 개발회사 이야기를 들었었다..
그런 것처럼 쿠버네티스도 도커가 언제 망할지는 모르겠지만 지원 가능한 엔진이 많아야 고이지 않을 것이라 생각한듯하다
아무튼, 도커도 결국 containerD 사용으로 dockershim 없이 쿠버네티스와 승승장구가 가능해졌으니 좋은 방향으로 흘러갔다

Docker

  • CLI
  • API
  • BUILD
  • VOLUMES
  • AUTH
  • SECURITY
    로 이루어져 있으며 ContainerD를 통해 CRI 사용 가능(쿠버네티스 사용 가능)

ContainerD


ContainerD는 Docker의 일부였음

쿠버네티스는 Docker의 별다른 기능이 필요 없었음
ContainerD만 사용하면 그만

그럼 원래 Docker 명령어로 사용하던 기능은 ContainerD만 사용하게 됨으로써
어떻게 변했을까?

ContainerD 명령줄 도구

  1. ctr: 기본 명령줄 도구
    컨테이너 디버깅용으로 불친절하다
ctr images pull docker.io/library/redis:alpine
ctr run docker.io/library/redis:alpine redis
  1. nerdctl: 더 나은 대안
    Docker가 지원하는 옵션의 대부분 지원, 명령어가 비슷하다
    ContainerD의 최신 기능도 access 가능
    Docker는 아니지만 K8s에서 namespace 사용 가능
## image 실행: docker
docker run --name redis redis:alpine
## image 실행: nerdctl
nerdctl run --name redis redis:alpine

## port 설정: docker
docker run --name webserver -p 80:80 -d nginx
## port 설정: nerdctl
nerdctl run --name webserver -p 80:80 -d nginx
  1. circtl: CRI 호환 컨테이너 런타임 상호작용용
    명령줄 유틸리티 및 특수 디버깅 목적으로 사용됨, kubelet과 함께 작동됨
  • 해당 명령어로 컨테이너 생성 시 kubelet이 인지하지 못해서 삭제됨
crictl pull busybox
circtl images
circtl ps -a
circtl exec -i -t <컨테이너주소> ls
circtl logs <컨테이너주소>
circtl pods
  • 워커 노드에서 log 확인을 위해 docker 명령어 사용했던 것 -> crictl
  • docker kill 명령어와 circtl stop(timeout = 0)이 같은 기능
  • 이 외에는 명령어와 기능이 완벽 일치함

소켓 연결 순서

unix:///var/run/dockershim.sock
unix:///run/containerd/containerd.sock
unix:///run/crio/crio.sock
unix:///var/run/cri-dockerd.sock

기본적으로 위와 같은 순서로 연결됨

소켓 연결 순서 바꾸기

crictl --runtime-endpoint
export CONTAINER_RUNTIME_ENDPOINT

요약

  • ctr: 디버깅용
  • nerdctl: 컨테이너 생성용
  • crictl: CRI 호환 런타임과 상호작용

이후로 표도 하나 나왔는데 이해를 잘하지 못함(udemy cka 강의)

profile
많은 경험을 해보고자 하는

0개의 댓글