인프런 워밍업클럽 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)
'인프런 워밍업클럽' 카테고리의 다른 글
Application 기능으로 이해하기 - PVC/PV, Deployment, Service, HPA (3) | 2025.06.08 |
---|---|
Application 기능으로 이해하기 - Configmap, Secret (0) | 2025.06.05 |
Application 기능으로 이해하기 - Probe (0) | 2025.06.04 |
쿠버네티스 설치 구간별 상태 확인 (0) | 2025.06.01 |