DevOps/DevOps기초

Nexus3를 이용한 Docker Private Registry 생성 및 활용

치킨맛코드 2022. 9. 4. 20:40

아래 두가지의 내용을 이제 합쳐서 단순한 private registry를 만드는것이 아니라 Nexus3를 활용한 private registry를 만들어 보도록 하자.

https://chicode.tistory.com/189

 

Nexus Repository Manager 설치 및 활용

Nexus라고 한다면 보통의 남성들은 3가지가 머리속에서 떠오를 것이다. 20대 중후반에서 30대를 넘어가는 이들에게는 블리자드 사의 스타크레프트 라는 IP의 넥서스가, 혹은 동일 사의 히어로즈 오

chicode.tistory.com

https://chicode.tistory.com/188

 

Docker Private Registry

Docker는 기본적으로 image를 가져오거나, 이 이미지를 tar파일로 생성하여 외부로 전달하는 등의 기능을 하고 있다. 이때 이러한 것들을 한 곳에 모아두고 효율적으로 관리를 하면 조금더 효율이

chicode.tistory.com

사실 만드는 방법은 너무나 간단하다. 이미 Docker images로 Nexus3가 업로드 되어 있기에, 이것을 다운로드 받고 실행만 하면 된다.

실습환경은 Centos7이며, Docker가 설치되어 있는것을 가정한다.

# mkdir /nexus-data
==> nexus가 만들어질 폴더를 미리 생성해 둔다.
# docker run --name nexus -d -p 5000:5000 -p 8081:8081 -v /nexus-data:/nexus-data -u root sonatype/nexus3
==> nexus를 설치할 건데 5000번 포트로 접근해 8081로 송출할 것이다 라는 의미이다. 포트는 자유롭게 변경 가능하다.

단 2줄이면 아래의 화면처럼 docker를 활용해서 nexus를 설치할 수 있다. GUI를 지원해주니 Nexus를 설치한 ip:8081번으로 접근하자. 잘 되는것을 확인할 수 있다. 이제 로그인을 해 보도록 하자.

먼저 ID 와 Password를 입력해야한다. 하지만 우리는 이런것을 사전에 만들어 둔 적이 없지만, 최초 설치시 admin계정을 같이 생성해 준다. 아래의 명령어를 입력해서 admin에 대한 password를 확인하도록 하자.

# cat /nexus-data/admin.password
==> nexus에 접근하기 위한 암호를 확인할 수 있다.

로그인을 한다면 설치 마법사가 실행되며, 다양한 도움을 준다. 가장 먼저는 password를 변경할 수 있도록 해 준다. cat명령어로 확인하기에는 굉장히 번거로우니 변경하도록 하자.

익명액세스와 관련된 설정이다. 반드시 아래의 내용을 확인한 후 본인의 상황에 맞게 설정하도록 하자.

https://help.sonatype.com/repomanager3/nexus-repository-administration/user-authentication/anonymous-access

 

Anonymous Access

The format realms such as Docker Bearer Token Realm are not meant for assignment to anonymous and may cause your anonymous user not to function.

help.sonatype.com

이제 Docker를 통해 공유되는 페키지 파일을 저장할 수 있는 blob store를 생성해 보도록 하자. 좌측 상단의 톱니바퀴를 클릭한 후 blob stores를 클릭하자. 이 후 create blob store를 생성해 보자.

blob store에 대한 설정화면이다. 타입과 이름, 저장위치, 경고 등 을 지정할 수 있다.

타입은 AWS S3도 지원하고 있으며, 소프트 할당량에 대한 경고는 남은공간과 사용된 공간, 2가지 중 하나를 택일해 알람을 받을 수 있다.

잘 만들어진것을 확인할 수 있으며, 이것을 바탕으로 repository를 생성해 보도록 하자.

왼쪽의 repositories를 클릭한 후 create repository를 클릭하여 생성하자. 이때 주의할 점은 docker는 group(repos), Hosted(local), proxy(remote)3가지의 타입을 생성할 수 있다. 가장 보편적으로 사용하는 방법은 hosted와 proxy를 각각 생성한 후 group으로 이 2가지를 묶어두는 것 이다.

익숙한 helm과 maven, go도 보이지만 docker와 관련된 repositories를 생성하자. 

먼저 Hosted에 대한 설정이다. hosted는 local의 기능을 가지고 있기 때문에, 기존의 BlobStore와 같은 이름이여도 딱히 상관은 없다.  http/s에 대한 포트번호를 열 수 있다. 예시로는 5001번을 사용했다. 기존에 생성된 BlobStore를 선택해 저장소를 사용하도록 하자.

이제 Proxy 서버를 설정하도록 하자. 이름을 지정한 후 외부외부 저장소를 지정했다. 이때 저장소 링크인 http://registry-1.docker.io는 docker의 공식 이미지 저장소이며, 또한 docker index는 docker hub를 사용했다. 또한 기타 설정과 Storage를 지정했다.

마지막으로 Group을 설정했다. 기본적인 port인 5000번을 사용했으며, 편의성을 위한 설정을 몇몇 체크한 후 상단에서 만든 2개의 repositories(hostes, proxy)를 연동했다

이 후 docker pull을 해 보도록하자. error가 발생할 것이다.

docker 인증을 위한 토큰을 발급해 주도록 하자.

이 후 pull명령을 한다면 잘 되는것을 확인할 수 있으며, 당연히 gui화면에서도 확인할 수 있다.