younsik
younsik.tech
younsik
전체 방문자
오늘
어제

공지사항

  • 시리즈 모음
  • 분류 전체보기 (34)
    • Dev (17)
      • 일반 (2)
      • 환경세팅 (11)
      • Issue (4)
    • SpringBoot (4)
      • Boot (2)
      • JPA (2)
      • Redis (0)
      • Webflux (0)
    • ElasticStack (0)
      • Elasticsearch (0)
      • Logstash (0)
      • Kibana (0)
    • Docker&Kubernetes (0)
      • Docker (0)
      • Kubernetes (0)
    • Cloud (4)
      • AWS (4)
      • GCP (0)
    • Ops (2)
      • DevOps (1)
      • MLOps (1)
    • Database (1)
      • MySQL (1)
      • MongoDB (0)
      • Cassandra (0)
    • ML&DL (0)
      • Machine Learning (0)
      • Deep Learning (0)
    • Tensorflow (1)
      • Installation (1)
      • Basic (0)
      • TFX (0)
    • Pytorch (0)
      • Installation (0)
      • Basic (0)
    • Hands-on (5)
      • SpringBoot (5)

블로그 메뉴

  • 홈
  • Github
  • GitBlog
  • 태그
  • 방명록

링크 모음

실무 예제로 배우는 Elasticsearch 검색엔진

인기 글

태그

  • jenv
  • Issue
  • erlang
  • Beginner
  • Homebrew
  • m1
  • ubuntu
  • amvu
  • openjdk
  • Node
  • Java
  • 개발환경
  • Spring
  • Intel
  • MVC
  • codesource
  • zplug
  • AWS
  • Intellij
  • boot
  • MAC
  • Kubeflow
  • mlops
  • miniforge
  • JPA
  • 환경세팅
  • docker
  • GIT
  • asdf
  • gradle

최근 댓글

최근 글

hELLO · Designed By 정상우.
younsik

younsik.tech

Ops/DevOps

[Nexus] Private Docker Hub 구축하기

2022. 5. 11. 19:23

개인적으로 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} 를 사용하면 된다

저작자표시 비영리 변경금지 (새창열림)
    younsik
    younsik
    younsik.tech의 기술 블로그

    티스토리툴바