::: IT인터넷 :::

Nexus3를 이용한 Docker 사설 저장소 구축

곰탱이푸우 2021. 6. 21. 08:20

Nexus3를 이용한 Docker 사설 저장소 구축은 3개의 저장소가 필요하다.

  • hosted (Local) - 내부에서 생성한 Docker 이미지 파일을 배포 (Push)한다.
  • proxy (Remote) - 외부의 Docker 저장소의 이미지들을 저장하고 내부 사용자에게 전달한다. 캐시 (Cache) 역할이다.
  • group (Repos) - 다수의 hosted, proxy 저장소를 묶어 단일 경로를 제공한다.

 

그림으로 표현하면 다음과 같다.

 

 

Local, Remote, Repos는 사내에서 운영중인 jFrog Artifactory에서 사용하는 용어이다.

Nexus3의 용어보다 더 직관적이어서, Local, Remote, Repos 용어를 사용한다.

 

 

blob store 생성

Docker를 통해 공유되는 패키지 파일들을 저장할 공간을 설정한다.

Create blob store 버튼을 클릭한다.

 

 

사용할 저장 공간을 생성한다. 생성 순서는 상관없다. repos, local, remote 또는 local, remote, repos 순으로 진행한다.

아래는 repos 저장 공간을 생성을 위해 입력한 예시이다.

  • Type - File을 선택한다.
  • Name - docker는 도커 이미지 저장소를 의미하는 prefix, 뒤에 repos는 어떤 용도인지 나타내는 postfix이다.
  • Enable Soft Quota는 저장 공간의 용량을 제한할 때 사용한다.
  • Path - 파일이 저장되는 실제 경로이다. Name에 입력한 내용으로 자동 생성된다.

 

 

Name은 헷갈리지 않는 선에서 자유롭게 작성 가능하다.

 

 

Docker Repository 생성

blob store 생성이 완료되면 저장소 (Repository)를 생성한다.

Create repository 버튼을 클릭한다.

 

 

생성할 저장소 타입을 선택한다.

docker는 group (repos), hosted (local), proxy (remote) 등 3개의 타입 생성이 가능하다.

hosted와 proxy를 먼저 생성하고 group을 생성하면서 hosted와 proxy를 구성 요소로 묶어준다.

 

 

hosted (local)

먼저 docker (hosted)를 선택하여 hosted 저장소를 생성한다. 신규 생성한 Docker 이미지를 배포할 때 내부에서만 사용하고 외부 배포를 제한할때 유용하다.

  • Name - 저장소 이름을 설정한다. Blob store와 이름이 동일해도 상관없다. 오히려 동일하면 헷갈리지 않는다.
  • HTTP - docker (hosted) 저장소가 사용할 포트 번호를 지정한다.
  • Allow anonymous docker pull - 해당 부분을 체크하지 않으면 docker pull 할 때마다 로그인을 해야 한다.
  • Blob store - 기존에 생성한 저장소를 선택한다. hosted (Local) 저장소이므로 docker-local을 선택한다.

docker pull은 기본적으로 5000번 포트를 사용하지만, docker (group)에서 사용하기 위해 5001번으로 지정했다.

 

 

참고사항
HTTPS를 사용하기 위해서는 Nexus3에 대해 리버스프록시 방식이 아닌 직접 SSL 설정을 해야 한다.
Nexus3에 대한 SSL 직접 적용은 아직 계획이 없으며, 향후 여력이 될때 진행할 예정이다.
따라서 HTTP 포트를 사용하며 insecure-registries 설정은 아래 포스팅을 참고한다.
 

우분투에 Docker 설치하기

docker-ce 설치 기본적으로 cli 기반의 docker-ce를 많이 사용한다. docker-ce는 별도의 APT 리파지토리를 사용하므로 추가 작업이 필요하다. $ sudo apt update # apt가 HTTPS를 통해 저장소를 사용할 수 있도록..

www.bearpooh.com

 

 

proxy (remote)

docker (proxy)를 선택하여 proxy 저장소를 생성한다. 외부 저장소를 연결할 때 사용한다.

  • Name - 저장소 이름을 설정한다. Blob store와 동일한 이름을 사용한다.
  • Allow anonymous docker pull - 해당 부분을 체크하지 않으면 docker pull 할 때마다 로그인을 해야 한다.
  • Remote storage - 외부 저장소 경로 (URL)를 입력한다. 공식 docker 이미지저장소인 https://registry-1.docker.io를 지정한다.
  • Use the Nexus truststore - 외부 저장소 경로가 HTTPS인 경우 해당 인증서를 신뢰할지 설정한다. View certificate를 클릭하고 Accept도 적용한다.
  • Docker Index - Docker Hub의 Index를 사용한다.
  • Blob store - 기존에 생성한 저장소를 선택한다. proxy (Remote) 저장소이므로 docker-remote를 선택한다.

 

자세한 설정 방법은 아래를 참고한다.

 

 

 

group (repos)

docker (group)을 선택하여 proxy 저장소를 생성한다. hosted와 proxy 저장소를 묶어 하나의 저장소로 설정할 때 사용한다.

  • Name - 저장소 이름을 설정한다. Blob store와 동일한 이름을 사용한다.
  • HTTP - docker (hosted) 저장소가 사용할 포트 번호를 지정한다.
  • Allow anonymous docker pull - 해당 부분을 체크하지 않으면 docker pull 할 때마다 로그인을 해야 한다.
  • Enable Docker V1 API - Docker 이미지 저장소는 V2부터 HTTPS만 사용한다. HTTP를 사용하기 위해 체크한다.
  • Blob store - 기존에 생성한 저장소를 선택한다. proxy (group) 저장소이므로 docker-repos를 선택한다.
  • Member repositories - 기존에 생성한 docker-local, docker-remote 저장소를 Members로 옮긴다. (> 화살표 또는 더블클릭)

 

 

모든 저장소 설정이 완료되었다. 조금 복잡하지만 pypi 저장소 설정과 같은 개념으로 이해하면 된다.

 

 

Docker Realms 설정

설정을 완료하고 Docker 이미지를 Pull하면 인증이 필요하다는 메시지가 출력된다.

 

Nexus3의 인증 관련 설정을 담당하는 Realms 설정에서 Docker에 대한 권한을 추가해야 한다.

다음과 같이 진행한다.

  • 화면 상단의 톱니바퀴를 클릭하고, 좌측의 Security - Realms를 클릭한다.
  • Docker Bearer Token Realm 항목을 선택하고 우측 화살표를 클릭하여 Active 항목으로 옮긴다.
  • Save를 클릭하여 저장한다.

 

Docker 클라이언트 설정

설정한 저장소가 잘 동작하는지 확인하기 위해 docker pull 명령으로 Nexus3 저장소를 사용한다.

 

리눅스

docker 명령어를 사용하기 위해서는 먼저 docker-ce를 설치해야 한다.

다음 포스팅을 참고하여 docker-ce를 설치한다.

 

우분투에 Docker 설치하기

docker-ce 설치 기본적으로 cli 기반의 docker-ce를 많이 사용한다. docker-ce는 별도의 APT 리파지토리를 사용하므로 추가 작업이 필요하다. $ sudo apt update # apt가 HTTPS를 통해 저장소를 사용할 수 있도록..

www.bearpooh.com

 

/etc/docker 경로에 daemon.json 파일을 생성한다.

/etc 경로이기 때문에 관리자 권한이 필요하여 sudo를 사용한다.

 

 

daemon.json 파일의 내용을 작성 (또는 수정)한다.

insecure-registries 항목에 docker-repos (group), docker-local (hosted) 저장소 의 경로와 포트를 지정했다.

참고로 포트는 docker-repos (group)과 docker-local (hosted) 저장소 설정에서 지정한 HTTP 포트이다.

 

 

sudo docker info 명령으로 docker 설정 정보를 확인한다.

Insecure Registries 항목에 정상적으로 적용 된 것을 확인할 수 있다.

 

 

임의의 Docker 이미지를 pull 하면 설정한 Docker 사설 저장소를 통해 다운로드 하는 것을 확인할 수 있다. (hello-world 사용)

docker pull 서버주소:포트/hello-world 형식이다. 포트는 docker-repos (group) 설정에 사용한 포트를 사용한다.

 

 

실제 docker-repos 저장소를 확인해보면 해당 Docker 이미지를 다운로드한 것을 확인할 수 있다.

 

 

 

윈도우

docker 명령어를 사용하기 위해서는 Docker Client를 설치해야 한다.

 

다음 사이트에서 Docker 윈도우 버전을 다운로드하여 설치한다.

 

Get Started with Docker | Docker

Learn about the complete container solution provided by Docker. Find information for developers, IT operations, and business executives.

www.docker.com

 

docker 앱을 실행하고 화면 상단의 톱니바퀴 버튼을 클릭하여 환경 설정으로 진입한다.

 

 

Docker Engine 탭을 선택하고 우측의 JSON 코드에 'insecure-registries' 항목을 추가한다.

적용을 위해 우측 하단의 Apply & Restart를 클릭하면 Docker 앱이 재시작된다.

 

 

임의의 Docker 이미지를 pull 하면 설정한 Docker 사설 저장소를 통해 다운로드 하는 것을 확인할 수 있다. (hello-world 사용)

  • docker pull 서버주소:포트/hello-world 형식이다.
  • 포트는 docker-repos (group) 설정에 사용한 포트를 사용한다.

 

 

docker 사설 저장소 설정이 완료되었다.

다른 저장소에 비해 약간 복잡하긴 하지만, 앞서 소개한 pypi 사설 저장소를 잘 구축했다면 어렵지 않게 설정할 수 있다.

 

Nexus3 사설  저장소 구성은 이 정도로 마무리하고, 향후 추가 저장소를 사용하게 될 경우 다시 소개하도록 한다.