Nexus를 이용한 Docker Registry

Bobby·2023년 3월 6일
0

DEV OPS

목록 보기
3/5
post-custom-banner

🗃 Docker Registry

기본적으로 Docker Hub를 통해 도커 이미지를 관리 할 수 있다.
하지만 docker hub는 private저장소로 이용하기에는 제한적이다.

Nexus Repository는 Docker Registry로도 사용이 가능하다.


🗃 Nexus 실행

  • 8081번 포트는 관리 툴을 사용하
  • 5000번 포트는 외부에서 로그인 하는 용도로 사용
docker run --name nexus -d -p 8081:8081 -p 5000:5000 -v ~/nexus-data:/nexus-data -u root sonatype/nexus3

http://{public-ip}:8081


🗃 로그인

비밀번호는 다음 명령어를 사용

docker exec -it nexus bash -c "cat /nexus-data/admin.password"




🗃 Blob Store 생성

  • Blob Store는 파일들을 저장하는 공간이다. (AWS S3와 비슷하다.)


🗃 Repository 생성

  • proxy는 docker hub의 이미지들을 연결하여 사용

  • hosted는 서버내에서 이미지 관리

  • group은 합쳐서 사용

  • 보안상 https를 사용하는 것이 좋다.

  • 5000번 포트를 사용

  • 접속 url

Realms

  • docker bearer token 활성화

Docker Registry 로그인

  • 로컬 PC에서 Nexus서버로 로그인 해보자.
docker login <nexus-registry-ip>:5000
  • 기본적으로 https로 접속하기 때문에 다음과 같은 에러 발생
  • http로 접근할 수 있도록 설정파일을 변경한다.
vi .docker/daemon.json
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "insecure-registries": [
    "<nexus-registry-ip>:5000"
  ]
}
  • docker daemon 재시작(docker desktop 사용 중이라 재시작)
  • 로그인 성공!

🗃 애플리케이션 생성

  • web 의존성만 추가해보자

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.8'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

빌드하기

./gradlew clean build

🗃 테스트

Dockerfile 생성

Dockerfile

FROM adoptopenjdk/openjdk11:jre
ARG JAR_FILE=build/libs/nexus-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} ./api.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./api.jar"]

이미지 생성

 docker build --tag <nexus-repo-ip>:5000/test . 

이미지 push

 docker push <nexus-repo-ip>:5000/test

이미지 저장 확인


이미지 삭제

 docker rmi <nexus-repo-ip>:5000/test

이미지 pull

 docker pull <nexus-repo-ip>:5000/test


코드

profile
물흐르듯 개발하다 대박나기
post-custom-banner

0개의 댓글