사전 구성된 NXRM(Nexus Repository Manager) Docker 컨테이너
최근에 치는 것을 피하는 방법을 찾아봤습니다DockerHub rate limits . 내가 생각한 솔루션 중 하나는 CI/CD 환경의 일부로 Nexus Repository Manager OSS(NXRM)을 배포하는 것이었으므로 CI/CD 러너는 공개 Docker 이미지를 가져오려고 할 때 DockerHub 대신 NXRM을 적중했습니다.
늘 그렇듯이 저는 NXRM을 시작하는 방법에 대해 Google에서 많이 검색했으며 로컬에서 실행하고 어떻게 진행되는지 확인하는 것이 최선인 것 같았습니다.
신사숙녀 여러분, 미리 구성된 NXRM Docker 컨테이너를 프로비저닝한 실제 경험을 알려드리겠습니다.
목표
DockerHub 및 AWS ECR Public Gallery 으로 사전 구성된 NXRM Docker 컨테이너. Google에서 찾은 내용은 다음과 같습니다.
기존 솔루션의 내 문제
NXRM이 준비되고 NXRM 시작의 일부가 되는 즉시
init-script
를 실행하고 싶습니다. 내 컴퓨터에서 스크립트를 수동으로 실행하고 싶지 않습니다. 모든 것은 NXRM 시작 프로세스의 일부로 수행되어야 합니다. 대부분의 기존 솔루션은 NXRM과 통신할 시스템에서 무언가를 실행하는 것을 설명합니다. 나는 다른 것을 찾고 있습니다.요망되는 결과
원하는 출력을 설명하는 몇 가지 글머리 기호로 나누겠습니다.
init-script
는 읽기 쉽고 유지 관리가 쉽습니다. init-script
는 기존 리소스를 만들려고 시도해서는 안 됩니다. init-script
는 Bash과 같이 널리 사용되는 스크립팅 언어로 작성해야 합니다(그래서 Bash를 선택했습니다). Init 스크립트 설계
원하는 결과는 분명합니다. 이제 NXRM 컨테이너를 시작할 때
init-script
가 수행할 작업을 선언해야 합니다. 작업 목록은 다음과 같습니다(순서대로)./nexus-data/admin.password
에 있는 initial random password을 admin
로 변경합니다.localhost:8081
권한READ
할 수 있습니다.localhost:8081
docker-hub
- 도커허브docker-ecrpublic
- AWS ECR 공개docker-group
- 위의 Docker 리포지토리는 이 Docker 그룹의 구성원입니다커스텀 도커 이미지 생성
NXRM official Docker image 을 기반으로 Docker 이미지를 만들었습니다.
Dockerfile은 다음과 같습니다.
ARG NEXUS_VERSION="3.30.1"
FROM sonatype/nexus3:${NEXUS_VERSION} as app
USER root
RUN curl -L -o /usr/local/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 && \
chmod +x /usr/local/bin/jq
USER nexus
ENV NEXUS_DATA_PATH="/nexus-data" \
NEXUS_ADMIN_USERNAME="admin" \
NEXUS_ADMIN_PASSWORD="admin" \
NEXUS_API_PATH="service/rest/v1" \
NEXUS_BASE_PATH="http://localhost:8081" \
NEXUS_OPS_VERBOSE="false"
WORKDIR /"${NEXUS_DATA_PATH}/nexus-ops/"
COPY provision/ .
CMD /nexus-data/nexus-ops/entrypoint.sh
Note: I added jq to the mix because I intend to use more APIs, and I'll need to analyze some JSON data. I find it best to analyze JSON data with
jq
when usingBash
.
위의 Dockerfile에서 볼 수 있듯이 provision/ 디렉토리를 NXRM 이미지에 복사하고 /opt/sonatype/start-nexus-repository-manager.sh을
CMD
로 실행하는 대신 provision/entrypoint.sh 스크립트로 래핑했습니다.결론적으로 전체 논리는 entrypoint.sh이라는
init-script
에서 유지됩니다.main
함수는 다음과 같습니다.main(){
start_nexus
set_global_variables
wait_for_healthy_response
set_credentials
change_initial_password
enable_anonymous_access
realms_enable_docker_token
repositories_create_repository_wrapper "proxy" "docker-hub" "${_NEXUS_OPS_PATH}/repositories/docker-proxy-dockerhub.json"
repositories_create_repository_wrapper "proxy" "docker-ecrpublic" "${_NEXUS_OPS_PATH}/repositories/docker-proxy-ecrpublic.json"
repositories_create_repository_wrapper "group" "docker-group" "${_NEXUS_OPS_PATH}/repositories/docker-group.json"
log_msg "Finished executing - ${_NEXUS_OPS_PATH}/entrypoint.sh"
}
최종 결과
여기 내 프로젝트 @ GitHub - unfor19/nexus-ops가 있습니다. 작동 방식을 이해하려면 provision/entrypoint.sh 파일을 확인하십시오. 최대한 깔끔하게 만들려고 노력했습니다.
하나 더; 내 프로젝트에서 디렉토리provision/repositories를 찾을 수 있습니다. 해당 디렉터리에는 프로비저닝된 리포지토리의 JSON 구조가 포함되어 있습니다. 예를 들어 DockerHub repository을 생성하는 명령은 다음과 같습니다.
repositories_create_repository_wrapper "proxy" "docker-hub" "${_NEXUS_OPS_PATH}/repositories/docker-proxy-dockerhub.json"
마지막 단어
처음에 저는 NXRM에 약간 겁을 먹었습니다. NXRM을 통해 Docker 요청을 프록시하는 것은 복잡해 보였습니다. 하지만 이 프로젝트를 만들고 나서 아이디어를 얻은 것 같고 여러분도 그랬기를 바랍니다.
Reference
이 문제에 관하여(사전 구성된 NXRM(Nexus Repository Manager) Docker 컨테이너), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/doitintl/preconfigured-nexus-repository-manager-nxrm-docker-container-5am텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)