기본적으로 Docker Hub를 통해 도커 이미지를 관리 할 수 있다.
하지만 docker hub는 private저장소로 이용하기에는 제한적이다.
Nexus Repository는 Docker Registry로도 사용이 가능하다.
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"
proxy는 docker hub의 이미지들을 연결하여 사용
hosted는 서버내에서 이미지 관리
group은 합쳐서 사용
보안상 https를 사용하는 것이 좋다.
5000번 포트를 사용
접속 url
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 사용 중이라 재시작)
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
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 .
docker push <nexus-repo-ip>:5000/test
docker rmi <nexus-repo-ip>:5000/test
docker pull <nexus-repo-ip>:5000/test