Private Docker Registry 구축하기 (feat.ubuntu)
Post

Private Docker Registry 구축하기 (feat.ubuntu)

Docker 이미지를 자체적으로 관리하기 위해 Private Docker Registry를 구축하는 방법에 대해 알아보겠습니다.

준비 사항

  • Ubuntu 서버
  • Docker 및 Docker Compose

1. Docker Registry 서버 설정

Docker Registry를 위한 디렉토리를 생성합니다:

1
2
$ mkdir ~/docker-registry
$ cd ~/docker-registry

docker-compose.yml 파일을 생성 :

1
2
3
4
5
6
7
8
9
version: '3'

services:
  registry:
    image: registry:latest
    ports:
      - "5000:5000"
    volumes:
      - ./data:/var/lib/registry

2. Docker Registry 서버 실행

Docker Compose를 사용하여 Docker Registry를 실행 :

1
$ docker-compose up -d

Docker Registry 컨테이너 확인 :

1
2
3
$ docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
fcfbb862ebde   registry                     "/entrypoint.sh /etc…"   5 seconds ago   Up 2 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

3. 이미지 Push & Pull

먼저, 테스트 이미지를 생성합니다.
Dockerfile 을 생성 :

1
2
FROM ubuntu:20.04
CMD echo 'hello'

테스트 이미지 빌드:

1
$ docker build -t hello .

태그를 생성 :

1
$ docker tag hello localhost:5000/hello:1.0

tag 설정 방법
docker tag {image_name} {registry_ip}:{registry_port}/{repogitory}/{image_name}:{tag}

Registry에 이미지를 push :

1
$ docker push localhost:5000/hello:1.0

기존에 빌드한 이미지 삭제 :

1
docker rmi localhost:5000/hello:1.0

Registry 로부터 이미지 pull :

1
$ docker pull localhost:5000/hello:1.0

실행 및 동작 확인 :

1
2
$ docker run localhost:5000/hello:1.0
hello

[Tip 1] 보안 인증 예외 적용

docker registry 로 부터 pull을 하는 경우 기본적으로 SSL 인증이 필요하나 테스트 이므로 예외처리가 필요하다.
Pull 하려는 서버에 인증 예외 설정하여 보안 인증을 예외시킬 수 있다.

linux 의 경우 :

1
2
3
4
$ vi /etc/docker/daemon.json
{
    "insecure-registries": ["private-registry IP:5000"]
}

mac 의 경우 Docker Desktop 실행 후 설정에 아래 내용 추가 :

[Tip 2] registry 등록된 이미지 확인

이미지 목록 조회 :

1
2
3
curl http://localhost:5000/v2/_catalog

{"repositories":["hello"]}

특정 이미지의 tag 확인 :

1
2
3
curl http://localhost:5000/v2/hello/tags/list

{"name":"hello","tags":["1.0"]}

[Tip 3] Registry Web Service

Registry 에 등록된 서비스를 웹으로도 조회 할 수 있다. 자세한 설정 방법은 docker-registry-web Site를 참조한다.

웹 서비스 이미지 가져오기 :

1
$ docker pull hyper/docker-registry-web

웹 서비스 실행 :

1
docker run -it -p 8080:8080 --name registry-web --link private-repo -e REGISTRY_URL=http://private-repo:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web