본문 바로가기
  • 클라우드야 나랑 친해지자!
서버/Docker&Kubernetes

Docker 이미지 추출 및 저장소 생성(2/2)

by 정민규 2021. 4. 15.
반응형

수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

 

잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!


 

교재 <시작하세요! 도커/쿠버네티스 - 용찬호 지음>를 토대로 실습을 진행하였습니다.

 

 

 

 

 

 

* 이미지 추출

 

도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야할 때가 있습니다. docker save 명령어를 사용하면 컨테이너의 커맨드, 이미지 이름과 태그 등 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있습니다. -o 옵션에는 추출될 파일명을 입력합니다.

#docker save -o ubuntu_14_04.tar ubuntu:14.04

 

 

 

추출된 이미지는 load 명령어로 도커에 다시 로드할 수 있습니다.

#docker load -i ubuntu_14_04.tar

 

 

 

 

 

save와 load 명령어와 유사하게 사용할 수 있는 명령어로 export, import가 있습니다.

 

docker commit 명령어로 컨테이너를 이미지로 만들면 컨테이너에서 변경된 사항뿐만 아니라 컨테이너가 생성될 때 설정된 detached 모드, 컨테이너 커맨드와 같은 컨테이너의 설정 등도 이미지에 함께 저장됩니다.

 

 

export와 import는 다음과 같이 사용할 수 있습니다.

export 명령어는 mycontainer라는 컨테이너의 파일시스템을 rootFS.tar 파일로 추출하고,

이 파일을 import 명령어로 myimage:0.0 이라는 이미지로 다시 저장합니다.

#docker export -o rootFS.tar mycontainer
#docker import rootFS.tar myimage:0.0

 

 

 

 

그러나 이미지를 단일 파일로 저장하는 것은 효율적인 방법이 아닙니다.

추출된 이미지는 레이어 구조의 파일이 아닌 단일 파일이기 때문에 여러 버전의 이미지를 추출하면 이미지 용량을 각기 차지하게 됩니다.

예를 들어, ubuntu:14.04 이미지와 commit_test:first라는 두 개의 이미지를 추출하면 각각 197MB이 파일이 생성되어 총 394MB를 차지하게 될 것입니다.

 

 

 

 

 

 

 

 

 

* 이미지 배포

 

이미지를 생성했다면 이를 다른 도커 엔진에 배포할 방법이 필요합니다.

save나 export와 같은 방법으로 이미지를 단일 파일로 추출해서 배포할 수도 있지만 이미지 파일의 크기가 너무 크거나 도커 엔진의 수가 많다면 이미지를 파일로 배포하기 어렵습니다. 또한 도커의 이미지 구조인 레이어 형태를 이용하지 않으므로 매우 비효율적입니다.

 

 

따라서, 도커에서 공식적으로 제공하는 도커 허브 이미지 저장소를 사용하는 것입니다.

도커 허브는 도커 이미지를 저장하기 위한 클라우드 서비스라고 생각하면 이해하기 쉽습니다.

사용자는 단지 이미지를 올리고(docker push) 내려받기(docker pull)만 하면 되므로 매우 간단하게 사용할 수 있습니다.

 

 

 

 

클릭하여 도커 허브 홈페이지로 이동합니다.

 

hub.docker.com/

 

Docker Hub

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

 

 

 

 

 

* 이미지 저장소(Repository) 생성

 

도커 허브에 이미지를 올리기 위해 저장소를 생성할 것입니다.

 

메인페이지에서 [Create Repository] 를 클릭합니다.

 

 

[Visibility] 에서 사용자가 접속할 수 있도록 Public으로 하느냐, 접속하지 못하도록 Private을 사용하는지를 선택할 수 있습니다.

Public은 무료이고 Private은 유료이면서 기본적으로는 사용할 이유가 없기 때문에 Public을 선택합니다.

 

 

 

아주 간단하게 저장소가 생성되었습니다!

 

 

 

 

 

 

 

 

 

* 저장소에 이미지 올리기

 

도커에서 이미지를 생성하여 방금 생성한 저장소에 이미지를 올려봅니다.

 

#docker run -i -t --name commit_container1 ubuntu:14.04
/#echo my first push >> test

#docker commit commit_container1 commit_image:0.0
sha256:~~~~

 

 

ubuntu 14.04 이미지에 test라는 파일을 생성해 변경 사항을 만든 뒤 commit_image:0.0 이라는 이미지로 커밋했습니다. 그러나 이 이름으로는 이미지를 저장소에 올릴 수 없습니다.

특정 이름의 저장소에 이미지를 올리려면 저장소 이름(사용자의 이름)을 이미지 앞에 접두어로 추가해야 합니다.

 

#docker tag commit_image:0.0 qkqnd144/commit_image:0.0

 

 

 

 

이미지 이름을 변경하고 나면 다음 명령어를 입력해 도커 허브 서버에 로그인합니다.

로그인하지 않으면 생성한 저장소에 이미지를 올릴 수 있는 권한을 가질 수 없습니다.

#docker login

 

 

 

 

 

로그인한 뒤 push 명령어를 입력해 이미지를 저장소에 올려 보겠습니다.

명령어의 출력 결과를 보면 하나의 레이어만 저장소로 전송되고, 나머지 레이어는 ubuntu:14.04 이미지에서 생성되어 도커 허브의 우분투 이미지 저장소에 이미 존재하므로 전송되지 않았습니다.

 

#docker push qkqnd144/commit_image:0.0

 

 

 

 

 

도커 허브의 저장소에 실제로 이미지가 올려졌는지 확인합니다.

Tags 항목에서 이미지를 확인할 수 있습니다.

 

 

 

 

 

 

 

 

도커에서 이 이미지를 다운받으려면 별도로 로그인하지 않고 다음 명령어를 입력하면 됩니다.

#docker pull qkqnd144/commit_image:0.0
반응형

'서버 > Docker&Kubernetes' 카테고리의 다른 글

Docker Swarm  (0) 2021.04.20
Dockerfile 작성 및 빌드  (0) 2021.04.16
Docker 이미지 생성하기- Docker Hub(1/2)  (0) 2021.04.15
Docker Container Logging - awslogs  (0) 2021.04.14
Docker Container Logging - fluentd  (0) 2021.04.14

댓글