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