구리의 창고

Docker Registry V2 설치 본문

DevOps

Docker Registry V2 설치

구리z 2017. 7. 12. 18:46

소개

이 글에서는 기본적인 Docker Registry 설치법에 대해 다룰 것이다. 정말 자세한 내용은 공식 홈페이지를 참조하면 된다. Docker Registry란 Docker Image를 관리하는 Docker Hub 같은 Respository를 말한다. 개별적으로 Docker Image를 관리 할 일이 생기면 필수라고 생각된다. Docker Registry를 설치하기 위해서, docker와 docker-compose가 필요하다. 설치는 아래 글을 참고하자.

간단한 설치

공식홈페이지에 보면 아래처럼 단 한 줄로 Registry를 설치 할 수 있다고 나와있다.
$ docker run -d -p 5000:5000 registry:2.6
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
860c11dc6921        registry:2.6        "/entrypoint.sh /e..."   48 seconds ago      Up 47 seconds       0.0.0.0:5000->5000/tcp   brave_ptolemy
위 명령어로 설치된 Registry 기본 설정은 아래 명령어로 확인 할 수 있다.
$ docker exec 860c11dc6921 cat /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
기본 설정대로 사용하면 제약사항이 너무 많다. 꼭 필요하다고 생각되는 부분만 변경해보도록 하겠다.

log

로그는 공식 홈페이지를 보고 입맛에 맞게 설정하면 된다. 지금 단계에서 크게 중요하지 않다.

storage

기본 설정대로면 container안에 디스크에 Docker Image가 저장된다. 이렇게되면 docker registry가 삭제되면 데이터가 같이 날아가게되므로, 설정은 그대로 두고 host에 있는 디렉토리를 mount 해줄 필요가 있다. 혹은 cloud storage를 사용하면 좋은데 대표적인 예로 AWS S3가 있다. 다른 옵션을 더 보고싶으면 공식 홈페이지 문서를 참고하자.

기본 설정대로면 캐쉬를 메모리에 하도록 되어있다. 이는 쓸데 없이 메모리를 사용하게 된다고 생각이 되는데, 다른 옵션으로 redis를 사용 할 수 있다. 캐쉬를 redis로 사용하기 위해서는 redis를 실행하고 설정을 따로 해줘야하는데, redis image를 사용하도록하자.

storage 부분이 redis 설정까지 추가해 이렇게 변경된다. redis addr에 redis:6379를 쓴 것은 redis를 docker container로 실행하고 link로 연결해 줄 것이기 때문이다.
storage:
  cache:
    blobdescriptor: redis
  filesystem:
    rootdirectory: /var/lib/registry
redis:
  addr: redis:6379

auth

기본 설정대로면 Docker Registry에 접근하기 위해서 그 어떤 인증도 필요하지 않다. Docker Registry V2부터 3rd party 인증시스템을 도입 할 수 있도록 JWT Token Base 인증 서버를 별도로 구현 할 수 있다. 이 부분은 여기서 함께 다루기엔 너무 복잡하므로 상대적으로 간단한 Basic Authorization을 이용하여 인증 시스템을 설정해보도록 하자.

설정을 살펴보면 realm, path를 지정하도록 되어있다. realm은 원하는 값을 넣어주고 path에는 .htpasswd 파일 경로를 넣어준다. docker registry에서 사용 할 .htpasswd 파일은 아래 명령어를 이용해 만들 수 있다. 아이디가 admin, 비밀번호가 1234인 경우이다.
$ docker run --rm --entrypoint htpasswd registry:2.6 -Bbn admin 1234 > .htpasswd
$ cat .htpasswd
admin:$2y$05$WmcysuiS7ZW7jyXMuZS9W.evGsOsnF3yz4o38Xy1KDMLkJbomZEm2

최종적으로 인증 정보가 들어간 설정이 아래와 같이 추가된다.
auth:
  realm: dgoh-registry
  path: /etc/docker/registry/.htpasswd

최종적인 config.yml

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: redis
  filesystem:
    rootdirectory: /var/lib/registry
redis:
  addr: redis:6379
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  htpasswd:
    realm: dgoh-registry
    path: /etc/docker/registry/.htpasswd 
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

docker-compose.yml 작성

자세히 하려면 봐야 할 설정이 더 있겠지만, 정말 기본적인 설정은 끝났다. 이제 docker-compose.yml을 작성하고 디플로이를 하자.
version: 3
services:
  registry:
    image: registry:2.6
    volumes:
      - /var/lib/registry:/var/lib/registry # host filesystem을 mount
      - ./config.yml:/etc/docker/registry/config.yml:ro # 설정 파일 변경
      - ./.htpasswd:/etc/docker/registry/.htpasswd:ro # htpasswd mount
    links:
      - redis:redis # cache에 사용 할 redis container 연결
    ports:
      - 5000:5000 # 5000번을 이용해 통신
    depends_on:
      - redis # redis가 실행된 후, registry가 실행된다.

  redis:
    image: redis:3.0.7
docker-compose를 이용하여 실행한다.
$ docker-compose up
Starting registry_redis_1 ...
Starting registry_redis_1 ... done
Starting registry_registry_1 ...
Starting registry_registry_1 ... done
Attaching to registry_redis_1, registry_registry_1
마지막으로 registry에 제대로 접속 되는지 docker cli를 통해 확인한다.
$ docker login 127.0.0.1:5000
Username: admin
Password:
Login Succeeded


'DevOps' 카테고리의 다른 글

Docker Image - repository 이름으로 삭제하기  (0) 2017.08.04
Docker 로그 관리 - logrotate  (0) 2017.07.19
docker-compose 사용  (0) 2017.07.12
docker-compose 설치  (0) 2017.07.12
Docker Container 실행하기  (0) 2017.07.08
Comments