Simple is IT, 누구나 보고 누구나 깨닫는 IT

Docker 이미지 정복하기_이미지 추출과 배포를 위한 저장소 생성 (2/2) 본문

Simple is IT/Cloud & Container

Docker 이미지 정복하기_이미지 추출과 배포를 위한 저장소 생성 (2/2)

currenjin 2020. 8. 3. 14:41

Docker Image

모든 컨테이너는 이미지를 기반으로 생성됩니다. 그래서 우리가 도커 컨테이너를 생성하기 위해선 이미지 다루는 방법을 알아야 하죠.

다루는 내용은 아래와 같습니다.

  • Docker Hub
  • 이미지 생성과 삭제를 위한 명령어
  • 도커 이미지의 구조 이해
  • 이미지 추출과 배포를 위한 저장소 생성

 


이미지 추출

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

# docker save -o alpine.tar alpine

# ls
alpine.tar 

-o 옵션은 추출될 파일명을 지정합니다.

alpine.tar 파일이 존재하는 것을 볼 수 있어요. 해당 이미지를 가지고 도커에 다시 로드하려면 docker load 명령어를 사용하면 됩니다!

# docker load -i alpine.tar

 

save와 load 비슷한 명령어로 export, import가 있어요.

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

# docker export -o commit_alpine.tar commit_alpine
# docker import commit_alpine commit_alpine:0.0

하지만 이렇게 사용하는 것은 도커의 근본적인 목적을 훼손하는 꼴이 됩니다. 효율적이지가 않아요.

 

생성된 이미지 파일은 레이어 구조가 아닌 단일 파일이기 때문에 여러 버전의 이미지를 추출하면 이미지의 용량은 각각 존재하게 됩니다. 물론 사용하는 때에 따라 다르겠다고 생각돼요.

 

 

이미지 배포

이미지 배포입니다! 이 부분을 완벽하게 활용한다면 실무에서는 부족함 없이 이미지를 관리할 수 있을 거예요.

위처럼 추출이 가능하지만 단일 파일로 만드는 방식 자체가 비효율적이기 때문에 도커에서 공식적으로 지원하는 Docker Hub를 이용해 배포하는 방법을 주로 사용하죠.

 

Docker Hub 이미지 배포

도커 허브는 도커 이미지를 저장하기 위한 클라우드 공간이라고 생각하면 이해하기 쉬워요. 사용자는 그저 이미지를 올리고(push) 내려받고(pull) 하면 되기에 간단하죠. Docker Hub에는 비공개(Private) 저장소가 있지만 일정 비용을 지불하지 않으면 공개(Public) 저장소를 이용해야 하죠.

클릭하면 도커 허브로 이동합니다!. 해당 사이트에서도 docker search 명령어를 입력할 때처럼 이미지를 검색할 수 있답니다.

이제 본격적으로 도커 허브에 이미지를 올리기 위해서 저장소를 생성할 거예요. 로그인은 필수입니다! [Sign up]을 클릭해 가입하면 돼요.

 

가입이 됐다면 메인 페이지에서 오른쪽에 보이는 [Create Repository]를 클릭해 저장소를 생성할 거예요.

 

[VIsibility] 영역은 사용자가 접속할 수 있도록 Public으로 하느냐, 접속하지 못하도록 Private으로 하느냐를 선택합니다. 기본적으로 비공개 저장소는 1개만 무료지만 사용할 이유가 없으니 Public으로 선택할게요.

 

생각할수록 놀라운 것 같아요! 이렇게 간단하게 저장소가 생성됐다는 게

 

이렇게 생성된 저장소에 이미지를 올려볼까요?

# docker run -it --name commit1 alpine echo "commit_image!" >> test.txt

# docker commit commit1 commit_image:0.0
sha256:a1ff9cd22b46e9a968e7bf625fc12840c01a2020147e5ce7aaf2cd3803b207d2

commit1이라는 컨테이너를 만들어 test.txt 파일을 생성했어요. 그리곤 commit_image:0.0라는 이름으로 커밋했죠.

이렇게 커밋된 이미지를 저장소에 올리기 위해선 저장소의 이름(docker hub 이름)을 이미지 앞에 접두어로 추가해야 돼요. 이때, docker tag 명령어를 사용하면 이미지 이름을 추가할 수 있답니다.

# docker tag commit_image:0.0 hyun0524e/commit_image:0.0

# docker images
REPOSITORY                 TAG       IMAGE ID        CREATED          SIZE
hyun0524e/commit_image     0.0       a1ff9cd22b46    3 minutes ago    5.57MB

 

이미지 이름을 변경하고 나면 docker login 명령어를 이용해 도커 허브 서버에 로그인합니다. 로그인하지 않으면 생성한 저장소에 이미지를 올릴 수 있는 권한을 가질 수 없죠.

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: hyun0524e
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

로그인 후 우리는 docker push 명령어로 이미지를 저장소에 업로드할 거예요. 드디어!

# docker push hyun0524e/commit_image:0.0


Docker Hub Registry에서 확인을 해보니 이미지가 잘 업로드가 됐군요.

이 이미지를 내려받고 시다면 별도 로그인 필요 없이 hyun0524 e/commit_image:0.0을 입력하면 됩니다!

 

이 외에도 사설 레지스트리를 구축해 이미지를 다루는 방법도 있는데 따로 포스팅으로 다룰 예정이에요.

궁금한 점이나 어떤 부분에 대한 내용이 부족하다 싶은 것은 댓글 부탁드려요. 감사합니다 :)

Comments