Private Nexus Docker Repository 구축하기
Nexus를 활용하여 사내에서 사용할 수 있는 Docker Private Repository를 구축하고 설정하는 전체 과정을 알아봅니다.
애플리케이션을 Docker를 이용해 배포하다보면 Docker Build 후 생성된 Docker Image를 관리할 수 있는 Repository가 필요해요. Nexus를 이용한 사내 Docker Private Repository를 구축해보겠습니다.
Nexus 서버 실행
Docker Compose로 간단하게 서버를 띄워요.
1
2
3
4
5
6
7
8
9
10
version: '3.2'
services:
nexus:
image: sonatype/nexus3
volumes:
- /nexus-data:/nexus-data
ports:
- 8081:8081
- 8082:8082
- 8081: 브라우저에서 접속할 포트 (웹 UI)
- 8082: Docker Registry API를 이용할 때 필요한 포트
1
docker-compose up nexus -d
초기 설정
초기 비밀번호는 volume 폴더에서 확인하거나 컨테이너 내부의 /nexus-data/admin.password에서 확인할 수 있습니다.
로그인 후 새로운 비밀번호를 설정합니다.
Docker Repository 설정
Blob Stores 생성
Blob Store는 실제 데이터가 저장될 장소입니다. 로컬에서 생성한 이미지가 저장될 hosted와 외부에서 가져올 proxy를 생성합니다.
Repositories 생성
Repository Type:
- Hosted: private Docker image를 관리하는 repository
- Proxy: Docker Hub와 같은 외부 Repository에 대해 Proxy 역할
docker(hosted)를 선택하고 HTTP 포트는 8082를 설정합니다.
docker(proxy)를 생성할 때 Remote storage는 Docker Hub의 URL입니다: https://registry-1.docker.io
Realms 설정
Docker Bearer Token Realm을 활성화하여 Docker 클라이언트가 Nexus와 통신할 수 있도록 해요.
Insecure-registries 설정
사내용으로 SSL이 필요 없는 경우 insecure-registries 설정을 추가합니다.
1
vi /etc/docker/daemon.json
1
2
3
{
"insecure-registries": ["{IP Address}:8082"]
}
Production 환경에서는 반드시 SSL/TLS 인증서를 설정하여 사용하는 것을 권장합니다.
Docker를 재시작해요.
1
service docker restart
동작 테스트
1
2
3
4
5
6
7
8
9
# 로그인
docker login {IP Address}:8082
# 이미지 다운로드
docker pull busybox
# 태그 및 Push
docker tag {image ID} {IP Address}:8082/busybox:v1
docker push {IP Address}:8082/busybox:v1
정리
구축 단계
- Docker Compose로 Nexus 서버 실행
- 초기 비밀번호 확인 및 관리자 계정 설정
- Blob Stores 생성 (hosted, proxy)
- Repositories 생성 (hosted, proxy)
- Realms 설정 (Docker Bearer Token)
- Insecure-registries 설정
- Docker login 및 이미지 push/pull 테스트
실제 운영할 때는 SSL/TLS 인증서 적용, 사용자 권한 관리, /nexus-data 백업, Blob Store 용량 모니터링 정도는 챙겨야 합니다. Cleanup Policies로 오래된 이미지를 자동 삭제하는 설정도 해두면 좋아요.
이렇게 구축한 Private Registry는 CI/CD 파이프라인에서 Jenkins나 Drone으로 빌드한 이미지를 Push하고, 배포 시 Pull하는 용도로 사용할 수 있습니다.







