본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Docker

Docker registry service

by bluefriday 2018. 6. 17.
반응형

Docker registry


컨테이너를 이용하여 어플리케이션의 실행환경을 가상화하기 위해서 도커 이미지가 필요한 만큼 이미지의 관리 또한 중요하다. 특히 개발/운영 환경에서 CI/CD 를 적용하여 이미지를 배포 하는 경우에는 이미지를 로컬 환경에 보관하는 것보다 저장가능한 다른 저장소에 보관하는 것이 좋다. 도커 측은 사용자가 컨테이너 생성을 위한 이미지를 저장하고 다른 사용자들과 공유할 수 있도록 컨테이너 이미지에 대한 저장소(이하 registry) 서비스를 제공하고 있다. 이를 통하여 사용자는 쉽게 이미지를 registry에 저장(push)하고 필요한 이미지를 받아올(pull) 수 있다.


이러한 registry 서비스는 공개유형에 따라 public, private 으로 구분 가능하다. public registry의 경우 모든 사람들이 자유롭게 이용할 수 있도록 이미지가 공개되어 있으며, 사용자들은 필요에 따라 자신이 원하는 이미지를 검색하고 해당 이미지를 사용할 수 있다. private registry는 사용자가 자신만의 별도의 registry를 따로 생성하여 custom image들을 보관할 수 있도록 해준다. 여기서는 public/private registry에 대하여 조금 더 다뤄본다.



Docker public registry

도커 측은 docker hub(https://hub.docker.com/) 라는 public registry를 제공한다. 물론 docker hub 의 경우 회원가입/로그인 후에 private한 용도로도 사용할 수 있으나 docker hub 자체는 public registry로서의 성격이 더 크고, 후술할 docker registry 가 private registry 로서의 기능을 제공하고 있으므로 여기서는 public registry 로서의 docker hub 만을 알아보기로 한다.


docker hub를 통하여 사용자는 이미지를 조회/검색할 수 있으며, 특정 이미지에 대한 description을 확인할 수 있다. 또한 CLI 환경에서도 docker search 명령어를 이용할 경우 docker hub에서 사용되는 이미지를 조회할 수 있다. 아래 화면은 각각 docker hub와 docker client를 이용하여 nginx 이미지를 조회한 예이다.


[그림1 : docker hub / docker search 등을이용하여 nginx 이미지를 조회한 예]


이렇게 조회한 이미지의 경우 CLI 환경에서 docker pull 명령어로 누구나 해당 이미지를 조회할 수 있다.



Docker private registry

위와 같이 public registry 인 docker hub를 이용하여 자주 사용되는 이미지들을 쉽게 받아서 실행 시킬 수 있지만, 컨테이너를 이용하여 이미지를 받고 또 받은 이미지를 이용하여 새로운 이미지를 생성하다보면 타인에게 공개되지 않고 자신만이 사용할 수 있는 이미지들도 존재하게 된다. 이러한 이미지는 public registry에 올리기 어려운데 이럴 때 사용자가 자신의 이미지를 저장하고 특정 개인/집단에게만 공유할 수 있도록 해주는 private registry를 사용할 수 있다.


private registry는 host PC에 background daemon으로 구동되는 것이 아니라, host PC에 docker 플랫폼 위에 도커 컨테이너로서 구동된다. 즉, 컨테이너 이미지를 저장하는 저장소 또한 컨테이너로 구동되어지는 방식이다. 당연히 host PC에는 Docker 가 필수적으로 설치되어 있어야 하며,  registry 컨테이너를 구동하기 위한 docker image가 필요하다. 해당 이미지는 docker hub에서 쉽게 조회해서 받아올 수 있다. 


아래와 같은 명령어를 사용하여 registry 이미지를 조회하고 docker hub를 통해서 내려받자.

$ docker search registry

NAME     DESCRIPTION                                                 STARS          OFFICIAL             AUTOMATED

registry    The Docker Registry 2.0 implementation for s…     2053            [OK]                


받아온 이미지로 docker registry container를 구동하기 전에 알아둬야 할 사항들이 있다. 먼저 registry는 내부적으로 5000번 포트를 사용한다. 컨테이너로 registry 를 구동한 후에 외부에서 해당 컨테이너에 접속하기 위해서 5000번 포트를 노출시켜줄 필요가 있다.

또한 저장소 성격을 가진 컨테이너이므로 해당 컨테이너가 삭제 될 경우 저장되어 있는 내용(여기서는 도커 이미지)이 모두 지워지는 것을 방지하기 위하여 미리 컨테이너 내부의 실제 저장 파일 위치를 docker volume 으로 연결해줘야 한다.



$ docker run -d --name=private_registry -p 5000:5000 -v /test/registry_data:/var/lib/registry registry:latest


이제 컨테이너로 private registry를 구동하였다. 이 registry는 로컬 port 5000번으로 노출되어 있어, 해당 포트를 통해 registry pull/push를 사용할 수 있다. 먼저 호스트에 있는 debian 이미지를 로컬 url 로 태그를 변경한 후에 다시 push 보면 아래와 같이 registry 에 이미지를 저장할 수 있다.


$ docker tag debian:latest localhost:5000/debian:latest

$ docker push localhost:5000/debian:latest

The push refers to repository [localhost:5000/debian]

5d6cbe0dbcf9: Pushed 

latest: digest: sha256:ec838b15e057f4e5bb42cc194923782c8153e3dbac1a12c32b50d88ef123008a size: 529


이제 호스트에 debian 이미지가 삭제되어도, 컨테이너 저장소 안에 해당 이미지가 존재하므로, docker pull 명령어를 이용하여 해당 이미지를 언제든지 불러올 수 있다. 위와 같은 방식을 이용하여 private registry를 docker container의 형태로 구동하고, custom 이미지를 자유롭게 저장하고 불러올 수 있다.



'소프트웨어 아키텍처 > Docker' 카테고리의 다른 글

Docker registry 내부 구조  (1) 2018.06.21
Docker registry service 2  (0) 2018.06.20
Docker image  (3) 2018.06.15
Dockerfile Best Practice  (0) 2018.06.14
Docker registry 와 이미지 삭제  (0) 2018.06.06

댓글