[미션5] 컨테이너 이미지 사례 실습

2025. 6. 16. 01:10·🌱 인프런/⚓ 쿠버네티스 어나더 클래스 (지상편)

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

  • dockerhub 에 올라가져 있는 이미지크기와 도커, 쿠버네티스의 이미지 크기가 다르다
  • dockerhub : 248.2MB
  • 도커 : 490MB
  • containerd : 248.3MiB

 

1-1. 추론

1. Container Image를 만들 때 플랫폼(amd64, arm64)을 고려해야 되는데, Docker에서는 amd64를 받았고, Kuberentes에서 arm64를 받아서 이미지 크기가 달라졌을 것이다.

  • 해당 이미지는 Mac M 시리즈나 Window 유저가 모두 받을 수 있도록 생성
  • Docker 에는 amd64, Containerd 는 amd64와 arm64 둘다 있지만, Containerd 의 용량이 더 작다

→ 현재로선 정답이 아님

 

 

2. Container 이미지는 각각의 Layer로 구성돼 있는데, Docker에서 다운 받을 때는 전체 Layer를 받았고, Kubernetes에는 기존 이미지에 이미 존재하는 Layer가 있기 때문에 새로 받은 이미지의 Size가 작게 조회 됐을 것이다.

  • Docker 이미지 → 파일로 변경시 이미지 사이즈가 약간 작아졌지만, 차이는 없음
  • 그 파일을 Containerd 로 Import 했을 때도 사이즈 변화는 없음
  • Containerd 이미지 → Docker 로 넣었을 땐 이미지가 증가

→ Docker 에서 Containerd 로 이미지를 가져갔을 때 Size 가 그대로이고, 반대로 Containerd 에서 Docker 로 이미지를 가져갔을 때 Size 가 증가하는 원인을 찾아야 한다.

 

 

3. 쿠버네티스에는 다른 Runtime을 사용 했을 수 있고, 같은 이미지더라도 사용하는 Runtime에 따라서 이미지의 크기는 달라질 것이다.

  • Docker 는 다른 많은 기능들을 지원해주기 때문에 다운 받은 이후 자신의 매타데이터 규격에 맞게 데이터들을 추가하고, 이미지를 재구성 → 이미지 사이즈가 커짐
  • Container 에서 이미지를 가져왔을 때도 이미지를 재구성 → 이미지 사이즈가 커짐
  • Docker → Contained 로 가져갔을 땐 Docker 에서 재구성하느라 커진 불필요한 메타데이터들이 그대로 들어가짐

 

1-2. 결론

  • 인터넷이 연결되지 않는 환경에서는 이미지들을 다운 받아서 파일 형태로 복사 해야 한다
  • 쿠버네티스에서 Contaienrd를 사용한다면 Docker로 받은 이미지를 복사해 넣을 경우 불필요하게 이미지 사이즈가 커지게 된다.

2. Docker 와 Containerd 명령 실습

2-1. 문제

🔥
Docker Hub 에서 여러 컨테이너 이미지들을 다운받을 때 도커에서 “toomanyrequests” 에러 발생
→ 도커 허브 정책상 익명유저의 경우 IP 기반으로 6시간 동안 100번 다운
→ 로그인유저의 경우 IP 기반으로 200번을 다운 받을 수 있기 때문에 발생
  • 문제가 해결되려면 6시간을 기다려야 한다
  • 조금 더 빨리 받기 위해서는 내 개인 노트북으로 이미지를 다운 받고, 쿠버네티스가 있는 서버로 복사해야 한다

  • 위와 같은 상황이 생기는 경우 [도커 6] > [도커 7] > [컨테이너 7] 순으로 작업
  • 실무에서 많이 쓰는 명령어들 위주로 정리

2-2. 도커 (Docker)

 

1. 빌드

docker build -t soyeon207/hello:1.0.0 .

 

2. 이미지 리스트 조회

docker image list

 

3. 태그 변경

docker tag soyeon207/hello:1.0.0 soyeon207/hello:2.0.0

 

4-1. 로그인

docker login -u soyeon207

 

4-2. 이미지 업로드

docker push 1pro/soyeon207:1.0.0

 

5. 이미지 삭제

docker rmi soyeon207/hello:1.0.0
docker rmi soyeon207/hello:2.0.0

 

6. 이미지 다운로드

docker pull soyeon207/hello:1.0.0

 

7. 이미지 → 파일로 변환

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

 

이미지 삭제

docker rmi soyeon207/hello:1.0.0

 

8. 파일 → 이미지로 변환

docker load -i file.tar
docker image list


2-3. 컨테이너디

 

1. 네임스페이스 조회

ctr ns list

 

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

ctr -n k8s.io image list

 

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

ctr images pull docker.io/soyeon207/hello:1.0.0
  • default 네임스페이스에 다운
ctr ns list

ctr images list

 

4. 태그 변경

ctr images tag docker.io/soyeon207/hello:1.0.0 docker.io/soyeon207/hello:2.0.0

 

ctr images list

 

5. 업로드

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

 

6. 이미지 > 파일로 변환

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

 

7. 파일 > 이미지로 변환

ctr -n k8s.io image import file.tar

ctr -n k8s.io image list | grep hello

 

8. 삭제

ctr -n k8s.io image remove docker.io/soyeon207/hello:1.0.0
ctr -n k8s.io image list | grep hello

'🌱 인프런 > ⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글

(15) ArgoCD 아키텍처, Argo Apps 설치 및 배포 해보기  (0) 2025.06.24
(14) Helm과 Kustomize 비교하며 사용-2  (1) 2025.06.24
(13) Helm 과 Kustomize - 1 (Helm vs Kustomize, Helm 배포)  (1) 2025.06.15
(12) Jenkins Pipeline (기초부터 Blue/Green 까지)  (1) 2025.06.14
(11) 배포를 시작하기 전에 반드시 알아야 할 것들  (2) 2025.06.11
'🌱 인프런/⚓ 쿠버네티스 어나더 클래스 (지상편)' 카테고리의 다른 글
  • (15) ArgoCD 아키텍처, Argo Apps 설치 및 배포 해보기
  • (14) Helm과 Kustomize 비교하며 사용-2
  • (13) Helm 과 Kustomize - 1 (Helm vs Kustomize, Helm 배포)
  • (12) Jenkins Pipeline (기초부터 Blue/Green 까지)
말린
말린
  • 말린
    개발새발
    말린
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 👩🏻‍💻 알고리즘 (17)
        • 백준 (17)
      • ✒️ 글또 10기 (6)
      • 🗃️ 데이터베이스 (5)
      • ☕️ 자바 (1)
      • 🌱 인프런 (28)
        • ⚓ 쿠버네티스 어나더 클래스 (지상편) (22)
        • ☕️ 김영한의 실전 자바 - 중급 1편 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
말린
[미션5] 컨테이너 이미지 사례 실습
상단으로

티스토리툴바