본문으로 건너뛰기

[Devops] Nexus Repository Manager 설치(use docker)

Docker 또는 Podman으로 Nexus Repository Manager 3(OSS)를 띄우고 Docker (Hosted) 저장소를 만들어 Private Container Image를 Push하는 과정을 정리합니다.

요약

  • UID/GID 200으로 데이터 디렉터리를 만든 뒤 sonatype/nexus3 컨테이너를 8081, 5000 포트로 실행하면 Docker나 Podman으로 Nexus를 구성할 수 있습니다.
  • Repository 메뉴에서 Docker (Hosted) 저장소를 만들고 포트를 지정하면 Private Container Image 저장소로 쓸 수 있습니다.
  • Docker Host의 /etc/docker/daemon.json에 insecure-registries를 추가하고 docker login, docker tag, docker push로 이미지를 올립니다.

목차

Nexus Repository Manager 3 (OSS Version) 설치

Private Container Image 저장소를 만들기 위해 Nexus Registory Manager(이하 Nexus) 구성을 하려고 합니다.

Nexus Data 저장 공간 생성

Use Docker

  • Docker 를 이용할 경우, 아래와 같이 명령을 수행합니다.
    $ docker run -d -p 8081:8081 -p 5000:5000 --name nexus -v /data:/nexus-data sonatype/nexus3
    

Use Podman

  • Podman 을 이용할 경우, 아래와 같이 명령을 수행합니다.
    $ podman run -d -p 8081:8081 -p 5000:5000 --name nexus -v /data:/nexus-data sonatype/nexus3
    

Nexus 초기 설정

  • 위와 같이 http://<Server-IP>:8081 로 접속합니다.

  • admin 계정 password 를 다음과 같은 경로에서 확인하여 입력합니다.
    $ cat /data/admin.password
    

    Container Volume 을 /data 로 연결을 해서 해당 경로로 확인합니다.

  • Next 를 누르고 다음을 진행합니다.

  • admin 계정의 Password 를 신규로 생성합니다.

  • anonymous 계정 활성화 여부를 선택하고 진행합니다.

  • 설치가 완료 되었습니다.

Private Container Image 저장소 생성

  • 관리 페이지에서 Repository 메뉴를 선택합니다.

  • Create Repository 를 선택합니다.

  • 생성 가능한 Repository 종류가 나오며, Docker (Hosted) 를 선택합니다.

  • Repository 의 이름을 지정하고, Repositoty 에 사용할 Port 를 지정합니다.

  • 추가로 HTTPS Port, Docker V1 API 활성화, 익명 사용자 Pull 권한 등을 용도에 맞게 설정합니다.

  • 만약 anonymous Pull 기능이 필요하다면, Realms 메뉴에서 Docker Bearer Token Realm 를 추가합니다.

Container Image Push

  • 아래와 같이 Docker Host 에서 /etc/docker/daemon.json 를 수정하여 Private Image Repository 를 사용 할 수 있도록 추가합니다.
    $ cat /etc/docker/daemon.json 
    {
          "insecure-registries" : ["192.168.200.92:5000"]
    }
    
  • Docker login 을 진행합니다.
$ docker login 192.168.200.92:5000
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
   
Login Succeeded
  • Container Image 를 Push 하기 위해 tag 를 수정합니다.
$ docker tag test-go-web 192.168.200.92:5000/test-go-web:latest
$ docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
<none>                            <none>              6a111295a403        8 days ago          386MB
test-go-web                       latest              4aa4b4c6d791        8 days ago          7.49MB
192.168.200.92:5000/test-go-web   latest              4aa4b4c6d791        8 days ago          7.49MB
golang                            alpine              760fdda71c8f        3 weeks ago         370MB
  • Container Image 를 Push 합니다.
    $ docker push 192.168.200.92:5000/test-go-web
    The push refers to repository [192.168.200.92:5000/test-go-web]
    3417e2abcc0c: Pushed
    latest: digest: sha256:35e67bc46ce93066a042e97954afeff9a7f2c6498783040703a32efa1a4c4e21 size: 528
    

    위와 같이 Push 가 완료가 되고, 아래와 같이 Nexus GUI 에서 Container Image 저장 상태를 확인 할 수 있습니다.

참고 자료

자주 묻는 질문

Nexus 초기 admin 비밀번호는 어디서 확인하나요?

컨테이너 볼륨을 /data로 연결했다면 cat /data/admin.password로 확인합니다.

Nexus 데이터 디렉터리 권한은 어떻게 설정하나요?

chown 200:200 /data처럼 UID/GID를 200으로 설정합니다. 이 값은 Nexus Container Image에 선언되어 있습니다.

Nexus Docker 저장소에서 anonymous Pull을 허용하려면 어떻게 하나요?

저장소 설정에서 익명 사용자 Pull 권한을 설정하고, Realms 메뉴에서 Docker Bearer Token Realm을 추가합니다.

Nexus Private 저장소에 docker push를 하려면 Docker Host에서 무엇을 설정하나요?

/etc/docker/daemon.json에 "insecure-registries" : ["192.168.200.92:5000"]처럼 저장소 주소를 추가한 뒤 docker login으로 로그인합니다.