본문 바로가기

DevOps & Infra/Docker

[Infrastructure/Docker] 튜토리얼 살펴보기#004. 이미지 공유하기

이미지 공유하기

이전 포스트에서 생성한 이미지를 다른 사용자에게 공유해보도록 하겠습니다. 도커 이미지를 공유하기 위해서는 도커 레지스트리(Docker registry)를 사용합니다. 디폴트로 사용되는 도커 레지스트리는 도커 허브(Docker hub)입니다.

저장소 생성

도커 허브에서 이미지를 공유하기 위해서, 우선 저장소(Repo, Repository)를 생성해야 합니다. 도커 허브로 이동하여 도커 계정으로 로그인합니다. 상단 탭에서 Repositories 탭으로 이동하여 Create Repository 버튼을 클릭합니다.

저장소의 이름을 작성하고, Visibility 옵션을 Public으로 지정하여 모든 도커 사용자가 저장소에 접근 할 수 있도록 합니다. 그리고 Create 버튼을 클릭하여 저장소 생성을 완료합니다.

페이지의 우측을 보면, Docker commands 섹션에서 저장소에 이미지를 올리기 위한 명령문 예시를 보여줍니다. 하지만, 지금 당장은 이미지를 push 할 수 없습니다.

$ docker push [이미지 이름]:[태그 이름]

도커 CLI 로그인

저장소에 이미지를 Push하기 전에, CLI에서 도커 계정을 사용하여 사용자 인증을 진행해야 합니다. 터미널을 열고, 다음 명령문을 따라 입력합니다.

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

Logging in with your password grants your terminal complete access to your account. 
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/

이때 도커 계정의 Username은 이메일 주소(@이하)를 제외한 계정 이름입니다.

이미지 태그 변경

이전 포스트에서 우리가 작성한 이미지의 이름은 getting-started입니다. 도커 저장소의 이름은 [계정 이름]/getting-started으로 작성했는데, 저장소의 이름에 맞게 이미지의 이름을 변경하도록 하겠습니다. 이름 변경을 위해서는 tag 명령문을 사용합니다.

$ docker tag [변경 전 이미지 이름] [변경 후 이미지 이름]

이미지 Push

CLI에서 도커 계정으로 로그인도 하고, 이미지의 이름로 Tag 명령문을 사용하여 저장소 이름과 똑같이 변경하였습니다. 이제 이미지를 저장소에 올리도록 해봅시다.

다음 명령문을 이용하여 이미지를 저장소에 Push 합니다.

$ docker push [이미지 이름]:[태그 이름]

태그 이름을 명시하지 않았기 때문에, 디폴트로 latest 태그를 사용하여 이미지를 저장소에 Push 하고 있습니다.

$ docker push namepgb/getting-started
Using default tag: latest
The push refers to repository [docker.io/namepgb/getting-started]
a1bccfa91de4: Pushed 
b123427f7caf: Pushed 
c53e493d491b: Pushed 
f55e926873cc: Pushed 
c5088e2ef878: Mounted from library/node 
12587d8b4618: Mounted from library/node 
738f7039e20b: Mounted from library/node 
8d3ac3489996: Mounted from docker/getting-started 
latest: digest: sha256:700f9fa638662df7b379576b504287670f05967b90a837362eb7984c3af95fbf size: 2000

다시 도커 허브로 이동합니다. 웹 페이지 상단 탭에서 Repositorie를 들어가고, 좀전에 생성한 저장소를 확인하면 이미지의 최근 Push 내역을 확인 할 수 있습니다.

새로운 인스턴스에서 이미지 실행

지금까지 우리가 작성한 이미지를 도커 레지스트리(도커 허브)에 포함시키는 과정을 살펴봤습니다. 이번에는 완전히 새로운 인스턴스 환경(우리 이미지를 전혀 모르고 있는)에서 우리가 작성한 이미지를 사용하여 앱을 실행해보겠습니다.

웹 페이지에서 PWD(Play With Docker)로 이동합니다. PWD는 도커 인스턴스를 생성하여 간단한 테스트를 진행 할 수 있는 무료 플랫폼입니다.

웹 사이트에 접속하면, 도커 계정을 사용하여 로그인을 해야합니다. 로그인 후 Start 버튼을 클릭하여 PWD에 입장합니다. 좌측 사이드바에서는 ADD NEW INSTANCE를 클릭하여 새로운 인스턴스를 생성 할 수 있습니다. 인스턴스를 생성하면, 몇 초 내에 새로운 콘솔이 활성화되는 것을 확인 할 수 있습니다.

PWD 콘솔에서 우리가 Push한 이미지를 실행합니다.

$ docker run -dp 3000:3000 [이미지 이름]

 인스턴스의 로컬에서 이미지를 찾을 수 없다면, 도커 레지스트리에서 해당 이름의 이미지를 Pull하게 됩니다.

$ docker run -dp 3000:3000 namepgb/getting-started
Unable to find image 'namepgb/getting-started:latest' locally
latest: Pulling from namepgb/getting-started
59bf1c3509f3: Pull complete 
8769eb813ad5: Pull complete 
7025e9ac362e: Pull complete 
1efe07d207fa: Pull complete 
7f38ac1045f3: Pull complete 
2b5cc1eb379c: Pull complete 
27b401d610e3: Pull complete 
5be4b4c3c90a: Pull complete 
Digest: sha256:700f9fa638662df7b379576b504287670f05967b90a837362eb7984c3af95fbf
Status: Downloaded newer image for namepgb/getting-started:latest
db6e8eab076bcdadf2670f936a6b0bc0f6ce63cb409cddc1b5f38451ef71b527
[node1] (local) root@192.168.0.18 ~

PWD 콘솔 위쪽을 보면, 사진과 같이 포트 번호와 일치하는 배지(Badge)를 확인 할 수 있습니다. 배지를 클릭하면 우리 이미지가 실행하는 Node.js 웹 페이지로 이동합니다. 만약 포트 번호와 일치하는 배지가 존재하지 않으면 OPEN PORT를 클릭하여 포트를 수동으로 열 수 있습니다.

이번 포스트에서는 이미지를 도커 레지스트리(도커 허브)에 Push하고, 이미지와 관련 없는 완전히 새로운 인스턴스 환경에서 이미지를 Pull하여 실행하는 것까지 진행하였습니다.