본문 바로가기

Container/Docker

19. Docker Private Registy

 
도커의 가장 큰 장점은 경량화된 가상화(격리)를 통한 어플리케이션 배포에 있지만, 
 
도커의 다른 장점 중 하나는 도커에서 빌드한 이미지를 쉽게 공유할 수 있다는 점이다.
 
실제로 도커에서는 도커에서 생성한 이미지를 공유할 수 있는 공식 저장소를 제공하고 있다.
 
공식 저장소에는 프론트엔드 어플리케이션과 데이터베이스와 같은 백엔드 어플리케이션 등 
 
이미 많은 도커 이미지들이 공유되고 있고
 
이러한 열린 공간을 통해서 오픈소스 어플리케이션을 공유하는 새로운 장을 열어놓고 있다.
 
하지만 개발하는 내용을 모두 공식 저장소에 저장하기 보다는 
 
사적으로 이미지를 공유하는 공간을 가지고 사내망에서 이미지 공유가 되어야 하는 경우가 있을 수 있다.
 
이런 경우를 위해 도커에서는 도커 레지스트리를 제공하고 있다.
 
 
Docker Registry 
 
즉 Docker Registry(이하 도커 레지스트리)란, 
 
사용자가 도커를 활용하여 이미지를 만들어 낸 것이 로컬에 저장하기에는 너무 양이 많고, 
 
관리하기가 어려울 경우, 원격 저장소(혹은 로컬상의 다른 구역)에 이미지를 저장하였다가, 
 
나중에 필요하게 될 경우 레지스트리에서 꺼내와서 사용하는 개념이다. 
 
즉 사용자 이미지를 올리고 받기 위한 개인 저장소 서버 정도로 볼 수 있다.
 
 
Docker Registry 관련 명령어
 
주요하게 사용되는 명령으로 아래와 같은 것들이 있다.
 
커맨드
설명
docker login
레지스트리에 로그인 한다.
docker search
레지스트리에서 이미지를 검색한다.
docker pull
이미지를 레지스트리에서 로컬 머신으로 가져온다.
docker push
이미지를 로컬 머신에서 레지스트리에 집어넣는다.
 
 
로컬에 Docker Registry 서버 설치
 
Docker Registry 서버도 docker hub 에서 이미지로 제공되므로 이를 설치하면 된다.
 
이를 위해 먼저 docker pull 명령어로 공식 저장소에서 registy 이미지의 최신 버전을 받아온다.
 
 
$ docker pull registry:latest
Pulling repository registry
2930bc3d8f1e: Download complete
511136ea3c5a: Download complete
77917256cf11: Download complete
f10485646326: Download complete
 
가저온 이미지가 정상적으로 저장되었는지 확인한다.
 
$ docker images | grep "registry.*latest"
(표준 입력):3:registry             latest              2930bc3d8f1e        12 days ago         454.8 MB
 
 
Docker Registry 서버 실행
 
$ docker run --name personal-registry -d -p 5000:5000 registry
8fa28faf47f3cacce64aeb63b5a6c7e1388b5470340f6feb342b03d4fad4352c
 
여기서 --name은 이름을 지정하는 플래그이며,
 
 -d는 백그라운드에서 실행,
 
 -p {host_port}:{container_port} 는 포트 노출을 위한 맵핑을 의미한다. 
 
마지막 registry는 실행하고자하는 이미지의 이름이다.
 
좀 더 정확히는 registry 다음에 컨테이너에 대해서 실행하고자 하는 명령어를 입력하지만, 
 
이미지 내부에 기본 실행 명령이 지정되어 있으므로 생략해도 무방하다. 
 
컨테이너가 정상적으로 실행됐는지 확인하기 위해 ps -l 명령어를 실행한다. 
 
-l 플래그는 가장 최근에 실행한 컨테이너를 보여준다. 
 
$ docker ps -l
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS              PORTS                    NAMES
8fa28faf47f3        registry:0.6.8           /bin/sh -c 'cd /dock   2 seconds ago       Up 2 seconds        0.0.0.0:5000->5000/tcp   personal-registry
 
정상적으로 실행했다면 위와 비슷한 화면을 볼 수 있다.
 
위의 설정대로라면 컨테이너의 5000번 포트가 호스트의 5000번 포트로 노출된다.
 
 도커 레지스트리는 도커 명령어를 통해서 사용하는 게 기본이지만, 
 
5000번 포트를 통해 http로 기본적인 API를 제공하고 있다. 
 
이를 통해서 서버가 정상적으로 실행되었는지 확인해보자.
 
"docker-registry server (dev) (v0.6.8)"
 
이를 통해 도커 레지스트리(Docker registry)의 실행환경과 버전을 확인할 수 있다. 
 
이걸로 도커 레지스트리 서버가 정상적으로 설치되었다.
 
이렇게 하면 사용자가 도커 이미지를 push 하면 도커 이미지가 /tmp/registry 에 저장된다.
 
 
 
Docker 이미지 만들기
 
기본적으로 사적인 저장소는 자신이 직접 빌드한 이미지를 저장하기 위해서 사용한다. 
 
이미 가지고 있는 이미지를 사용해도 무방하며 여기서는 간단한 이미지를 하나 생성해보자. 
 
임의의 디렉토리에 아래 내용을 복사해 Dockerfile 을 만들고 이미지를 빌드하자.
 
FROM ubuntu:12.04
MAINTAINER Daeung Kim <kin3303@gmail.com>
CMD echo 'Hello, Docker!'
 
$ docker build -t test/hello_docker .
---> c0fe63f9a4c1
Step 1 : MAINTAINER DaeungKim <kin3303@gmail.com>
---> Running in 166e22a298bd
---> dfaa95be184e
Step 2 : CMD echo 'Hello, Docker!'
---> Running in 677b5b6260a2
---> 677a7d6fbf49
Successfully built 677a7d6fbf49
Removing intermediate container 166e22a298bd
Removing intermediate container 677b5b6260a2
 
$ docker run test/hello_docker
Hello, Docker!
 
 
Docker Registry 에 Push
 
이미지가 정상적으로 작동하는 것을 확인했으니 
 
이제 이미지를 도커 레지스트리에 집어넣어보자. 
 
먼저 이미지를 도커 레지스트리에 넣기 위해서는 이미지에 적당한 이름을 붙여줄 필요가 있다. 
 
docker tag 명령어로 이미지에 새로운 이름을 부여한 다음 Push 한다.
 
$ docker tag test/hello_docker 0.0.0.0:5000/hello_docker
 
$ docker images
REPOSITORY                   TAG        IMAGE ID            CREATED             VIRTUAL SIZE
test/hello_docker             latest      677a7d6fbf49       10 minutes ago     231.1 MB
0.0.0.0:5000/hello_docker   latest      677a7d6fbf49       10 minutes ago     231.1 MB
...
 
$ docker push 0.0.0.0:5000/hello_docker
The push refers to a repository [0.0.0.0:5000/hello_docker] (len: 1)
Sending image list
Pushing repository 0.0.0.0:5000/hello_docker (1 tags)
511136ea3c5a: Image successfully pushed
6170bb7b0ad1: Image successfully pushed
79fdb1362c84: Image successfully pushed
c0fe63f9a4c1: Image successfully pushed
dfaa95be184e: Image successfully pushed
677a7d6fbf49: Image successfully pushed
Pushing tag for rev [677a7d6fbf49] on {http://0.0.0.0:5000/v1/repositories/hello_docker/tags/latest}
 
실제로 올라갔는지 docker push 에서 마지막으로 나오는 경로로 curl 명령을 날려보자.
 
"677a7d6fbf492ff63e9c7bd2fcbff5ea952b0c32c417d1251786a559a6b0af7a"
 
도커 레지스트리에 hello_docker:latest 로 이미지를 올렸다. 
 
 
 
Docker Registry 에 Pull
 
도커 레지스트리에서 올린 이미지를 pull 받아보자.
 
docker rm 으로 기존 이미지를 삭제하고 아래와 같이 hello_docker 를 도커 레지스트리에서 
 
바로 실행(run) 명령어를 사용하면 도커는 자동적으로 해당하는 주소의 이미지를 pull 후 실행합니다. 
 
여기서는 바로 앞서 푸시한 도커 이미지를 실행해보자.
 
$ docker run 0.0.0.0:5000/hello_docker
Unable to find image '0.0.0.0:5000/hello_docker' locally
Pulling repository 0.0.0.0:5000/hello_docker
677a7d6fbf49: Download complete
511136ea3c5a: Download complete
6170bb7b0ad1: Download complete
79fdb1362c84: Download complete
c0fe63f9a4c1: Download complete
dfaa95be184e: Download complete
Hello, Docker!
 
로컬에 이미지를 다운로드 받은 뒤 실행되는 것을 확인할 수 있다.
 
 
 
Docker Registry 도메인
 
아래 내용을 참고하자.
 
 
 
Docker Cloud Registry
 
아마존 S3 ( Simple Storagy Service ) 에 도커 레지스트리를 설치하고자 한다면 아래 사이트를 참조하자.
 
 
 
 
 
 
 
 
 
 
 

'Container > Docker' 카테고리의 다른 글

21. Docker CLI Dashboard  (0) 2020.01.14
20. Docker Machine  (0) 2020.01.14
18. Docker Security  (0) 2020.01.14
17. Docker Volume  (0) 2020.01.14
16. Docker Storage  (0) 2020.01.14