Share Image

namkun·2022년 5월 7일
0

Docker & Kubernetes

목록 보기
11/16

이미지를 만든 것을 공유하고 싶을 땐 어떻게 해야 할까.

도커파일을 공유하는 방법이 있고, Image를 공유하는 방법이 있다.

도커 파일을 받는 경우에는 도커파일 이외에도 코드와 폴더구조 역시 필요하다.

그래야 이미지를 빌드하고 이를 실행시킬 수 있기 때문이다.

그러나 이미지로 공유받는다면, 다른건 다 필요없고 그대로 이미지만 실행하면 된다.

이미지 안에 소스코드나 그런 것들이 모두 들어가 있기 때문이다.

Docker Hub & Private Registry

이미지를 공유할 때, 이미지를 어딘가에 저장해서 그것을 남들과 같이 공유해야하는데 그 방법으로는 도커허브와 개인적인 레지스트리가 있다.

이는 이미지 저장소라고 생각하면 편하며, 보통 해당 저장소에 올려서 다 같이 공유한다고 생각하면 된다.

우선 간단하게 docker hub를 사용해보자.

docker hub에 가입하고, 하나의 레퍼지토리를 생성해보자.

나같은 경우 repository 이름을 node-hello-app이라고 하였다. (public으로 생성하였다. free-plan의 경우 private를 하나만 생성할 수 있기에...)

이렇게 만든 레퍼지토리는 현재 비어있는 상태이며, 우리가 여기에 이미지를 push 해줘야한다.

옆에 보면 Docker Commands라고 적혀있는게 보일텐데, 저 명령어를 통해서 이 레퍼지토리에 push 할 수 있는 것이다.

우리의 로컬 터미널에서 해당 명령어를 실행시켜보자.

$ docker push namekun/node-hello-app:latest
Using default tag: latest
The push refers to repository [docker.io/namekun/node-hello-app]
An image does not exist locally with the tag: namekun/node-hello-app

왜 안될까?

우리 로컬에 namekun/node-hello-app이라는 태그를 갖는 이미지가 없기 때문이다.

그렇다고 이를 위해서 굳이 이미지를 새로 빌드해야할까?

간단하게 태그를 바꾸면 된다.

태그를 바꾸는 명령어는 다음과 같다.

$ docker tag [past tag] [new tag]

실제로 해보자.

$ docker tag node_server_app:latest namekun/node-hello-app:latest
$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
node_server_app          latest    3eb16122f8bb   5 hours ago   1GB
namekun/node-hello-app   latest    3eb16122f8bb   5 hours ago   1GB

기존의 이미지는 삭제되지 않고, 동일한 이미지를 다른 태그명으로 복사했다.

기존꺼를 따로 백업본을 생성하거나 하지 않아도 알아서 남겨주기에 의외로 편리하다고 할 수 있다.

자, 그럼 이전의 명령어를 다시 해보자.

$ docker push namekun/node-hello-app:latest
The push refers to repository [docker.io/namekun/node-hello-app]
82bc5691e279: Preparing
09948b4e0ad8: Preparing                                               
cfc9004fc71d: Preparing                                               
059c28efada6: Preparing                                               
adcd0466d8b3: Preparing                                               
fef4baf48801: Waiting                                                
9e01c2c7216e: Waiting                                                 
78d9c6989ad1: Waiting                                                 
5bdcc8e2060c: Waiting                                                
08fa02ce37eb: Waiting                                                 
a037458de4e0: Waiting 
bafdbe68e4ae: Waiting
a13c519c6361: Waiting                                                 
denied: requested access to the resource is denied

음? 마지막에 그래도 denied 되었다.

그 이유는 레퍼지토리는 소유한 사람만 push 할 수 있기에 그렇다.

따라서, 우리는 로컬에서도 login을 해줘야한다. (한번만 해놓으면 계속 된다.)

물론, logout 옵션도 동일하게 있으니 그걸 사용해서 logout도 할 수 있다.

$  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: namekun
Password: 
Login Succeeded

자 dokcer login 명령어를 쓰면 위와 같이 아이디와 비밀번호를 입력하고 로그인을 할 수 있다.

이제 다시 push 해보자.

$  docker push namekun/node-hello-app:latest
The push refers to repository [docker.io/namekun/node-hello-app]
82bc5691e279: Pushed
09948b4e0ad8: Pushed
cfc9004fc71d: Pushed
059c28efada6: Pushed
adcd0466d8b3: Mounted from library/node
fef4baf48801: Mounted from library/node
9e01c2c7216e: Mounted from library/node
78d9c6989ad1: Mounted from library/node
5bdcc8e2060c: Mounted from library/python
08fa02ce37eb: Mounted from library/python
a037458de4e0: Mounted from library/python
bafdbe68e4ae: Mounted from library/python
a13c519c6361: Mounted from library/python
latest: digest: sha256:057d67dd657ce9f5839ff5140fcc77608eae971e00079b31256449099ff6921c size: 3048

잘 push 되었다!

도커허브에서도 확인해보면

제대로 올라간 것을 확인할 수 있다.

우리가 방금 올린 노드 앱은 당연하게도 Node 이미지에 의존하고 있는데, 도커 허브에 해당 이미지가 올라갈 때는 이미 도커허브에 존재하고 있는 Node에 대한 이미지는 올라가지 않고 해당 이미지에 대해 연결을 설정한 뒤, 거기에 필요한 코드들만 추가로 push 된다.

즉, 전체 노드이미지가 아닌 추가 정보만 push 한다고 보면 된다.

이를 통해서 도커허브에서는 공간을 절약할 수 있다.

효율적인 방식이라고 할 수 있다.

profile
개발하는 중국학과 사람

0개의 댓글