본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Containerd

ctr : containerd CLI tools

by bluefriday 2021. 9. 6.
반응형

ctr 이란?

ctr 툴은 containerd 데몬과 상호작용하여 호스트 노드의 컨테이너 관리를 지원해주는 클라이언트 툴이다. containerd 진영에서 개발되어 동일 프로젝트 소스에 속해 있으나, 하단의 Description 문구와 같이 하위호환성이나 안정성을 보장해주지는 않는다.

NAME:
   ctr -
        __
  _____/ /______
 / ___/ __/ ___/
/ /__/ /_/ /
\___/\__/_/

containerd CLI


USAGE:
   ctr [global options] command [command options] [arguments...]

VERSION:
   1.4.3

DESCRIPTION:

ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.

"ctr is an unsupported debug and administrative client for interacting with the containerd daemon. Because it is unsupported, the commands, options, and operations are not guaranteed to be backward compatible or stable from release to release of the containerd project."

*containerd 프로젝트 하위 ctr 소스 : https://github.com/containerd/containerd/tree/main/cmd/ctr

 

ctr tool 설치 및 확인

ctr 은 containerd 프로젝트에 속해 있어 container와 함께 자동으로 설치된다. apt, yum 등의 package installer 로 containerd를 설치하거나 "containerd release" 페이지에서 tar 파일을 받아서 압축을 해제할 경우에도 자동으로 포함되어 있다. 설치 과정에 대해서는 지난 포스팅의 "Containerd 설치 및 설정" 을 참고하자. 이렇게 설치를 완료한 경우 'ctr version' 명령을 입력하여 정상 설치 여부와 설치 정보를 확인할 수 있다. 

*추가로 containerd 또한 docker패키지에 속해있다. 결과적으로 docker 패키지를 설치한 노드의 경우 contaienrd와 ctr이 이미 기본적으로 설치된다.

[root@localhost:/root] ctr version

Client:
  Version:  1.4.3
  Revision: 269548fa27e0089a8b8278fc4fc781d7f65a939b
  Go version: go1.13.15
  
[root@localhost:/root]

 

ctr 과 contiainerd

ctr 은 하나의 바이너리 실행파일이다. 이미 친숙하게 사용되는 Docker 와 비교를 해보면 다음과 같이 비교할 수 있다.

Package Package모듈
Docker
  • dockerd : 도커 서버로서, 백그라운드에서 동작하는 데몬프로세스
  • docker : 바이너리 파일로, 우리가 실제 사용하는 도커 클라이언트 툴
Containerd
  • containerd : containerd 서버 프로세스로, 백그라운드에서 동작
  • ctr : 바이너리 파일로, 상단에서 소개하는 ctr 클라이언트 툴

 

 

ctr 과 네임스페이스

[root@localhost:/root] ctr ns list
NAME    LABELS
default
k8s.io
moby

[root@localhost:/root] ctr -n k8s.io container list
CONTAINER    IMAGE    RUNTIME

[root@localhost:/root]

이번에는 ctr에서 제공하는 네임스페이스 기능을 간단하게 확인해보자. ctr namespace list 명령을 줄 경우 현재 ctr 로 구성되어 있는 네임스페이스를 볼 수 있다. 기본적으로는 'default' 네임스페이스만을 확인할 수 있는데, 만약 containerd 만이 아니라 docker를 설치하였다면 docker가 사용하는 'moby' 라는 네임스페이스를 볼 수 있다. 추가로 kubernetes 클러스터를 구축한 노드라면 'k8s.io' 라는 네임스페이스를 볼 수 있다. 이렇게 확인한 네임스페이스를 통하여 '-n' 플래그와 함께 ctr 명령어를 사용할 경우 도커로 구동된 컨테이너를 확인할 수도 있고, kubernetes 의 kubelet 이 사용하는 컨테이너 이미지도 확인할 수 있다.

 

 

ctr 을 통한 image pull & push

먼저 ctr을 통해서 image 를 pull & push 해보자. ctr 명령어가 containerd 프로세스와 상호작용하지만 containerd 의 설정파일(수정하지 않은 경우 기본값. /etc/contaienrd/config.toml) 자체는 ctr 과 연관이 없다. 또 docker와 달리 별도의 로그인 명령을 지원하지 않으므로 ctr로 이미지를 pull, push 할 경우 명령어에 계정 정보를 입력 해줘야한다. 또한 private registry 를 사용하는데 https를 지원하지 않는 경우에는 '--plain-http' 플래그가 필요하다. 하단의 예제를 참고하자.

ctr image pull --user 유저명:비밀번호 이미지명(전체경로)

ex) 예제
ctr image pull --user user1:test123# docker.io/nginx:latest

ex) insecure pull(http)
ctr image pull --plain-http --user user1:test123# docker.io/nginx:latest

 

 

crictl 과의 차이점

crictl 또한 docker, ctr 등과 마찬가지로 호스트 컨테이너 런타임과 상호작용하여 컨테이너의 정보를 조회하고 관리할 수 있는 툴이다. docker 가 docker서버와의 통신을, ctr이 containerd와의 통신을 위한 반면 crictl 은 특정적으로 containerd를 위한 툴은 아니며 ctr 과 진영 또한 다르고 동일 프로젝트에 속해있지도 않다.

crictl 은  kuberneetes-sigs 진영에서 만들어진 container runtime 에 대한 툴로 docker와 달리 container 레벨을 넘어 k8s 오브젝트의 관점에서 파드(Pods)를 생성하거나 조회할 수도 있다. 컨테이너 이미지 조회, 컨테이너 조회 등 ctr 과 유사한 기능은 제공하나, 이 포스팅에서는 차이점만을 확인하고 넘어가도록 한다.

 

 

nerdctl 

지금까지 살펴본 ctr 명령어는 docker client 명령어를 대체하는 것처럼 보이나 완전하게 호환은 되지 않는다. 컨테이너 이미지를 확인하는 정도는 쉽게 가능하나, ctr 명령어를 사용하여 컨테이너를 생성하는 경우는 docker를 사용하는 경우에 비해 다소 어려우며 docker에 친숙한 경우 더욱 쉽지 않다.

contianerd 진영에서는 이러한 경우를 위해 기존의 ctr을 보완하는 한편으로, nerdctl 이라는 또 하나의 툴을 발표했다. 이 툴은 containerd 의 끝 4개 알파벳 단어를 따와서 'nerd' + ctl 로 명명하였으며 docker 명령어와 거의 동일하게 사용할 수 있다. nerdctl 만을 사용하는 것이 아닌 'nerdctl + containerd' package의 형태로도 제공된다고 하니 추후 docker를 사용하지 않는 환경에서 유용하게 사용할 수 있는 툴이다. nerdctl 공식 페이지에서 확인할 수 있다.

 

댓글