Kubernetes는 가장 널리 사용되는 컨테이너 오케스트레이션 플랫폼 중 하나이며 Kubernetes v1.24부터는 docker-shim 지원이 중단됨에 따라 CRI(Container Runtime Interface)를 통한 컨테이너 제어가 필수가 되었다. 이 글에서는 crictl 및 ctr을 사용하여 컨테이너 이미지를 내보내고 가져오는 방법에 대해 설명한다.
컨테이너 이미지 내보내기 및 가져오기에 대해 자세히 알아보기 전에 먼저 CRI, crictl 및 ctr과 관련된 몇 가지 기본 개념에 대해 살펴본다.
CRI(Container Runtime Interface)는 Kubernetes가 Docker, CRI-O 및 containerd와 같은 컨테이너 런타임과 통신할 수 있도록 하는 인터페이스 입니다. 이미지 관리, 컨테이너 수명 주기 관리 및 네트워크 구성을 포함하여 컨테이너 런타임 작업을 위한 표준화된 인터페이스를 제공한다.
crictl은 CRI 호환 컨테이너 런타임과 상호 작용하기 위한 단순하고 표준화된 인터페이스를 제공하는 CLI 도구다. 이를 통해 사용자는 이미지 가져오기 및 푸시, 컨테이너 생성 및 삭제, 런타임 상태 검사를 포함하여 다양한 컨테이너 및 이미지 관련 작업을 수행할 수 있다.
반면에 ctr은 CRI 호환 런타임을 포함하여 다양한 컨테이너 런타임과 상호 작용하기 위한 통합 인터페이스를 제공하는 CLI 도구다. crictl의 대안이며 스냅샷 및 볼륨 관리와 같은 추가 기능을 제공한다.
man 페이지 참고: https://man.archlinux.org/man/community/containerd/ctr.8.en
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은 컨테이너 데몬과 상호 작용하기 위한 지원되지 않는 디버그 및 관리 클라이언트다. 지원되지 않기 때문에, 명령어, 옵션 및 작업은 컨테이너 프로젝트의 릴리스 간 하위 호환성 또는 안정성이 보장되지 않는다.
crictl 명령어의 모든 사용법은 다음 링크에서 확인할 수 있다.
이미지 관리와 관련된 몇 가지 기본 crictl 명령을 소개한다.
[root@localhost]# crictl images -h
NAME:
crictl images - List images
USAGE:
crictl images [command options] [REPOSITORY[:TAG]]
OPTIONS:
--digests Show digests (default: false)
--no-trunc Show output without truncating the ID (default: false)
--output value, -o value Output format, One of: json|yaml|table
--quiet, -q Only show image IDs (default: false)
--verbose, -v Show verbose info for images (default: false)
--help, -h show help (default: false)
레지스트리에서 이미지를 가져오려면 다음 명령을 실행한다.
crictl pull <image-name>
예를 들어 최신 버전의 nginx 이미지를 가져오려면 다음을 실행한다.
crictl pull nginx
노드에서 사용 가능한 모든 이미지를 나열하려면 다음을 실행하자.
crictl images
crictl rmi <image-id>
ctr run <image-ref> <container-id>
레지스트리에서 이미지를 가져오려면 다음 명령을 실행한다.
ctr을 통해 이미지를 pull 받을 땐 이미지 태그를 사용해야한다.
ctr image pull <image-name>:<image-tag>
아래는 여러 이미지를 pull 받는 명령어다.
ctr images pull docker.io/library/nginx:1.21
ctr images pull quay.io/quay/redis:latest
ctr image list
# or
ctr image ls
ctr image remove <image-id>
ctr images export <file-name>.tar <image-id>
ctr images import <file-name>.tar