K8S

쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 미션 5

개발공명 2025. 6. 17. 22:35

Docker와 Containerd 명령 실습 [미션5]

 

컨테이너 런타임에는 도커, containerd 등 여러가지가 있다. 

이 중 가장 유명한 도커와 쿠버네티스에서 자리잡은 containerd가 있다. 

모두 표준 규약을 지키기 때문에 컨테이너 이미지를 다른 컨테이너 런타임에서도 사용할 수 있다. 

 

쿠버네티스에서는 컨테이너 런타임으로 containerd를 사용하고 있다. 

도커 이미지를 다운 받아서 쿠버네티스로 넘겨 사용하는 경우가 생기기도 한다. 

아래 그림과 같은 상황이다. 

 

그래서 도커 이미지를 파일로 변환해 쿠버네티스가 있는 서버로 전송 후 파일을 다시 이미지로 변환해 컨테이너를 띄울 수 있어야 한다. 

아래 그림에서 [도커 6] [도커 7] → [containerd 7] 순으로 작업하면 된다. 

 

이미지 관련한 명령어에 대해서는 docker와 containerd를 모두 알아야 한다

따라서 이번 실습은 도커, containerd에서 컨테이너 이미지 관련 명령어에 대한 실습을 해보는 것이다. 

 

 

도커

 

위 사진대로 실습을 진행해 볼 것이다. 

 

사전 준비사항

# 도커 파일 및 App 소스 다운로드
curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/etc/docker/Dockerfile
curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/etc/docker/hello.js
[root@cicd-server ~]# ls
Dockerfile  hello.js

 

 

전체 실습 명령어

 

아래 명령어에서 1pro 부분에 자신의 도커 허브 username을 넣으면 된다.

1. docker build -t 1pro/hello:1.0.0 .
2. docker image list
3. docker tag 1pro/hello:1.0.0 1pro/hello:2.0.0
4-1. docker login -u 1pro
4-2. docker push 1pro/hello:1.0.0
5. docker rmi 1pro/hello:1.0.0
6. docker pull 1pro/hello:1.0.0
7. docker save -o file.tar 1pro/hello:1.0.0
8. docker load -i file.tar

 

1. 빌드

docker build -t 1pro/hello:1.0.0 .

현재 디렉토리에 있는 Dockerfile을 사용해 도커 이미지를 빌드하는 것이다. (사전 준비에서 다운 받은 Dockerfile)

 

2. 이미지 리스트 조회

docker image list

현재 시스템에 저장되어 있는 도커 이미지의 목록을 보는 명령어이다. 

 

3. 태그 변경

docker tag 1pro/hello:1.0.0 1pro/hello:2.0.0

기존에 존재하는 이미지에 대해 또 다른 태그를 붙여주는 것이다. 

태그 변경 후 다시 이미지 리스트 조회를 해보면 2개의 TAG를 확인할 수 있다. 

 

4-1. 로그인

docker login -u 1pro

도커 허브에 로그인하는 명령어이다. 

아래에서 도커 이미지를 업로드하기 위한 로그인이다. 

 

4-2. 이미지 업로드

docker push 1pro/hello:1.0.0

현재 로컬에 존재하는 도커 이미지를 도커 허브에 업로드하는 명령어이다. 

 

도커 허브에 잘 업로드 된 것을 볼 수 있다. 

 

5. 이미지 삭제

docker rmi 1pro/hello:1.0.0

로컬 시스템에 저장되어 있는 도커 이미지를 삭제하는 명령어이다. 

2개의 TAG 모두 삭제한 후 image list를 보면 사라진 것을 볼 수 있다. 

 

6. 이미지 다운로드

docker pull 1pro/hello:1.0.0

도커 허브에서 1pro/hello:1.0.0 라는 이름, 태그 가진 이미지를 다운로드해 로컬 시스템에 저장하는 명령어이다. 

image list로 확인해보면 다시 생긴 것을 볼 수 있다. 

 

7. 이미지 → 파일로 변환

docker save -o file.tar 1pro/hello:1.0.0

로컬에 존재하는 도커 이미지를 file.tar라는 이름의 파일로 저장하는 명령어이다. 

ls 명령어로 file.tar 파일이 생성된 것을 볼 수 있다. 

 

그 후 도커 이미지를 지워놨다. 

 

8. 파일 → 이미지로 변환

docker load -i file.tar

tar 파일에서 도커 이미지를 다시 불러오는 명령어이다. 

image list를 보니 다시 도커 이미지가 생긴 것을 볼 수 있다. 

 

containerd

 

위 사진대로 실습을 진행해 볼 것이다. 

이번 실습에서도 위의 도커와 마찬가지로 사전 준비사항을 해서 Dockerfile과 hello.js를 다운 받아 놔야 한다

 

전체 실습 명령어

 

아래 명령어에서 1pro 부분에 자신의 도커 허브 username을 넣으면 된다.

1. ctr ns list
2. ctr -n k8s.io image list
3. ctr images pull docker.io/1pro/hello:1.0.0
4. ctr images tag docker.io/1pro/hello:1.0.0 docker.io/1pro/hello:2.0.0
5. ctr image push docker.io/1pro/hello:2.0.0 --user 1pro
6. ctr -n default image export file.tar docker.io/1pro/hello:1.0.0
7. ctr -n k8s.io image import file.tar
8. ctr -n k8s.io image remove docker.io/1pro/hello:1.0.0

 

1. 네임스페이스 조회

ctr ns list

이 명령어는 containerd의 CLI 도구인 ctr을 사용해 현재 시스템에 존재하는 모든 네임스페이스 목록을 출력하는 명령이다. 

 

여기서 이미지에 대한 namespace의 개념은 중요하다고 한다.

컨테이너 런타임으로 containerd를 쓰고 있는 쿠버네티스 입장에서 이 [k8s.io] 네임스페이스에 있는 이미지들을 사용한다. 

사용자가 네임스페이스 지정없이 수동으로 이미지를 다운 받았다면 default라는 namespace에 이미지가 만들어지게 된다. 

그리고 그럴 경우 쿠버네티스에서 사용할 수 없게 된다고 한다. 

 

현재 쿠버네티스가 사용하는 k8s.io 네임스페이스 있는 것을 볼 수 있다. 

 

2. 특정 네임스페이스 내 이미지 조회

이 명령어는 네임스페이스가 k8s.io인 곳에 저장된 모든 컨테이너 이미지 목록을 출력하는 명령어이다. 

 

출력물 길이가 길어 조금 깨진 모양이다. 

 

3. 이미지 다운로드 및 이미지 확인 

ctr images pull docker.io/1pro/hello:1.0.0

이 명령어는 도커 허브에서 이미지를 다운로드 하여 로컬 containerd에 저장하는 명령어이다. 

default라는 네임스페이스가 만들어지고 이 이미지는 default에 저장된다고 한다. 

 

따라서 namespace 목록을 보면 default가 생긴 것을 볼 수 있다. 

그리고 default 안의 이미지를 조회하면 다운 받은 이미지가 있는 것을 볼 수 있다. 

 

4. 이미지 태그 변경

ctr images tag docker.io/1pro/hello:1.0.0 docker.io/1pro/hello:2.0.0

이 명령어는 이미지에 또 다른 태그를 하나 더 추가하는 명령어이다. 

따라서 이미지를 조회해보면 2.0.0이 생긴 것을 볼 수 있다. 

 

5. 이미지 업로드 

ctr image push docker.io/1pro/hello:2.0.0 --user 1pro

이 명령어는 로컬에 있는 이미지를 도커 허브에 업로드하는 명령어이다. 

 

도커 허브에 업로드 된 것을 볼 수 있다. 

 

6. 이미지 → 파일로 변환

ctr -n default image export file.tar docker.io/1pro/hello:1.0.0

이 명령어는 default 네임스페이스에 저장된 이미지를 file.tar 파일로 변환하는 명령어이다. 

ls 명령어로 보면 file.tar 파일이 생성된 것을 볼 수 있다. 

 

7. 파일 → 이미지로 변환

ctr -n k8s.io image import file.tar

이 명령어는 file.tar에 저장된 이미지를 k8s.io 네임스페이스로 불러오는 명령어이다. 

이미지로 변환 후 k8s.io 네임스페이스의 image list를 보면 이미지가 있는 것을 볼 수 있다. 

 

6, 7번을 통해 알 수 있듯이 containerd는 이미지와 namespace 관계가 중요한 것 같다

명령어에 항상 이미지를 명시할 때 함께 namespace도 명시하는 것을 볼 수 있다. 

 

8. 이미지 삭제

ctr -n k8s.io image remove docker.io/1pro/hello:1.0.0

이 명령어는 k8s.io 네임스페이스에 저장된 이미지를 삭제하는 명령어이다. 

이미지 삭제 후 k8s.io 네임스페이스의 image list를 보면 이미지가 없는 것을 볼 수 있다.