인프런 워밍업클럽

Docker와 Containerd 명령 실습

승승구리 2025. 6. 17. 23:53

인프런 워밍업클럽 4기 - 데브옵스 스터디
[미션5] Docker와 Containerd 명령 실습

 

해당 미션은 네이버 카페 질문에서 시작되었습니다! 질문 바로가기

 

질문) calico 설치 후 image를 받아오는 과정에서 toomanyrequests 발생

안녕하세요! 저는 강의를 수강 후 스크립트가 아닌 수동으로 설치를 진행해보고 있습니다. 다름이 아니라 calico 설치까지는 잘 되었는데 이미지를 pull하는 과정에서 too...

cafe.naver.com

 

Docker hub 정책상 익명유저의 경우 IP기반으로 6시간 동안 100번 / 로그인한 유저의 경우 200번의 정책 제한이 있습니다.

이런 경우 이제 아래 이미지와 같이 Docker 이미지를 tar로 압축하여 옮기고 tar 파일을 이용하여 container를 생성할 수 있습니다.

 

 

일반적으로 로컬 PC, 또는 k8s를 사용하지 않는 VM에서는 Docker를 기본적으로 사용합니다.

그러나 쿠버네티스의 경우 컨테이너 런타임을 containerd를 사용중이기 때문에 쿠버네티스 환경에서의 명령어도 학습합니다.


도커 (Docker) 환경에서의 이미지의 파일 변환

▶ 사전 준비사항

# 도커 파일 및 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

▶ 업로드 실습을 해보기 위해서는 본인의 도커 허브 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.빌드

 

2. 이미지 리스트 조회

 

3. 태그 변경

 

4. 이미지 업로드

 

5. 이미지 삭제

 

6. 이미지 다운로드

 

7. 이미지 -> 파일로 변환

 

7-2. 이미지 삭제

 

8. 파일 -> 이미지 변환

 

8-2. 이미지 및 파일 정리


컨테이너디 (Containerd) 환경에서 이미지 변환

 

전체 실습 명령어

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. 네임스페이스 조회

여기서 이미지에 대한 namespace의 개념은 중요합니다. 컨테이너 런타임으로 containerd를 쓰고 있는 쿠버네티스 입장에서 이 [k8s.io] 네임스페이스에 있는 이미지들을 사용하거든요.

(사용자가 네임스페이스 지정없이 수동으로 이미지를 다운 받았다면 default라는 namespace에 이미지가 만들어지게 되고 그럴 경우 쿠버네티스에서 사용할 수 없게 됩니다)

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

3. 다운로드 및 이미지 확인 (이미지는 default라는 네임스페이스에 다운 받아집니다.)

4. 태그 변경

5. 업로드

6. 이미지 (namespace : default) -> 파일로 변환

7. 파일 -> 이미지로 변환 (namespace : k8s.io)

8. 삭제 (namespace : k8s.io)


[번외] 같은 이미지를 도커에서 받았을 때와 쿠버네티스에서 받았을 때 사이즈가 다른 이유

이 부분은 강사님께서 너무 열심히 분석해주셔서 제가 그냥 옮기기가 너무 죄송스러워서 링크를 남겨둡니다!

실제 운영환경에서는 리소스 자원이 한정적일 수도 있습니다. 특히 외부에서 이미지를 받아오는 경우 트래픽에 대한 비용도 고려해볼만 합니다.

 

** 결론 ** Docker와 Containerd의 차이!!

Docker는 다른 많은 기능들을 지원해 주기 때문에 실제 이미지가 291.33MB라고 하더라도 다운 받은 이후 자신의 매타데이터 규격에 맞게 데이터들을 더 추가하고 이미지를 재구성 합니다. 그래서 541MB가 된거고요. Containerd에서 이미지를 가져왔을 때도 마찬가지로, 이미지를 재구성 하느라 Size가 커진 거예요.

​

반대로 Docker의 이미지를 Contaienrd로 가져가게 됐을 때, Docker에서 재구성을 하느라 커진 불필요한 메타데이터들이 그대로 들어가진 거고요.

​

이런 사실을 토대로 우리가 하지 말아야 할 일 이 있겠습니다.

인터넷이 연결되지 않는 환경에서는 이미지들을 다운 받아서 파일 형태로 복사를 해야되요.

이때 쿠버네티스에서 Contaienrd를 사용한다면 Docker로 받은 이미지를 복사해 넣을 경우 불필요하게 이미지 사이즈가 커지게 됩니다.

▶ Docker Hub (291.33 MB)

그리고 이걸 Docker와 Containerd에서 다운로드 받고 이미지 Size를 확인해 볼께요.

▶ Docker (541MB)

▶ Containerd (291.3 MiB)