개인적으로 DockerHub 같은 도커 이미지 레포지토리를 구축할 일이 있어서 Nexus를 사용해서 구축하기로 했다
우선 도커로 다음과 같이 nexus3 이미지를 pull 받는다
$ git pull docker pull sonatype/nexus3:3.38.1
다음과 같이 디렉토리를 생성한다
# directory 생성
$ mkdir -p nexus/nexus-data
그리고 docker-compose.yml 을 작성한다
(가능하면 docker를 직접 실행하는 것보다 docker-compose로 실행하는 것을 추천한다)
# 도커 컴포즈 작성
$ vim nexus/docker-compose.yml
version: "3"
services:
local-nexus:
image: sonatype/nexus3:3.38.1
user: root
restart: always
ports:
- 15000:5000
- 18081:8081
volumes:
- /Users/younsik/works/docker/nexus/nexus-data:/nexus-data
networks:
- net-nexus
networks:
net-nexus:
driver: bridge
ports의 15000, 18081은 원하는 것으로 변경해도 상관없음
volumes의 경우 데이터 저장 위치를 절대경로로 사용함 (가끔 보안 이슈로 별도의 디렉토리에 저장할 경우가 있음)
저장하고 다음과 같이 실행한다
# 도커 컴포즈 실행
$ docker-compose up -d
# 컨테이너 확인
$ docker ps -a
# 도커 로그로 실행 확인
$ docker-compose logs -f
실행이 정상적으로 되었다면 다음과 같이 docker의 daemon.js 파일을 수정해야 한다
# mac은 다음 수정이 필요
$ vim ~/.docker/daemon.js
# linux라면
$ vim /etc/docker/daemon.js
{
... 생략 ...
# 다음 라인 추가
"insecure-registries" : [ "localhost:15000" ]
}
만약 기존 데이터가 있다면 ,(comma) 빼놓지 말고 추가하고 없었다면 { } 안에 추가한다
Docker for mac을 사용해서 다음과 같이 도커를 재시작해야 한다(리눅스의 경우 service 명령어 사용)
재시작 한 후에 nexus 컨테이너도 재시작한다
# 도커 재시작 (docker for mac :: restart)
# 도커 재시작 후 nexus 재시작
docker-compose stop
docker-compose up -d
재시작이 완료되면 다음 url에 접속해서 확인한다 (web 화면 구동까지 꽤 오래 걸리니 기다려야함)
# website 접속 (http://localhost:18081)
접속되면 admin 비번 변경을 해야한다
web 화면 까지 정상적으로 보이면 admin password는 앞서 만들었던 데이터 저장 위치(nexus-data) 안에 있다
$ cat nexus-data/admin.password
비번을 확인하고 admin 비번을 변경해준다
admin에서 설정해야할 것을 설정한다
# 톱니 눌러서 설정 파일 들어옴
1. Blob Stores 생성
1) Repository > Blob Stores 클릭
2) 파란 버튼 Create Blob Store 클릭
3) 타입 : 파일 & 이름 : docker-hosted 입력 후 Save 버튼 클릭
4) 위와 동일하게 타입 : 파일 & 이름 : docker-hub 입력 후 Save 버튼 클릭
2. Repositories 생성
1) Create Repository 클릭
2) docker(hosted) 클릭
3) 다음과 같이 입력
name : docker-hosted
http : 5000
Enable Docker V1 API : 체크
blob-store : docker-hosted
4) 파란색 Create Repository 입력
5) Create Repository 클릭
6) docker(proxy) 클릭
7) 다음과 같이 입력
name : docker-hub
Enable Docker V1 API : 체크
remote storage : https://registry-1.docker.io
docker-index : Use Docker Hub 선택
blob-store : docker-hub
4) 파란색 Create Repository 입력
3. 권한 설정
1) Security > Realms 클릭
2) Available 항목들 중 Docker Bearer Token Realm 을 Active로 변경
4. 유저 생성
1) Security > Users 클릭
2) Create Local User 클릭
3) id, first name, second name, password , email, status, roles(nx-admin)으로 설정하고 저장
설정이 완료되면 다음과 같이 docker에서 nexus를 사용하도록 설정한다
$ docker login localhost:15000
# nexus에서 생성한 id, passwd 입력
정상적으로 작동하는지는 다음과 같이 테스트하면 된다
# docker hub에서 아무 이미지 다운받는다
$ docker pull .....
# 태깅한다
$ docker tag {DOCKER_IMAGE_ID} localhost:15000/{IMAGE_NAME}:{IMAGE_VERSION}
# 도커 push
$ docker push localhost:15000/{IMAGE_NAME}:{IMAGE_VERSION}
# 완료되면 nexus의 repisotory 에서 push 결과 확인
# 기존 이미지 지운다
$ docker image list
$ docker rmi {REMOVE_IMAGE_ID}
$ docker image list
# 넥서스에서 이미지 pull
$ docker pull localhost:15000/{IMAGE_NAME}:{IMAGE_VERSION}
$ docker image list
localhost:15000/{IMAGE_NAME}:{IMAGE_VERSION} 로 된 이미지가 보이면 정상이다
앞으로 Dockerfile이나 docker-compose.yml에서 FROM, image 등으로 사용할때 localhost:15000/{IMAGE_NAME}:{IMAGE_VERSION} 를 사용하면 된다