사내 Docker Registry 만들기 (Nexus3 기반)

·2020년 2월 5일
5

Docker

목록 보기
1/1
post-thumbnail

사내 Docker 저장소 만드는 방법을 공유 합니다. 영문버전 바로가기
Private Docker Registry 라고도 합니다.
Nexus 기반으로 구축하여 GUI 환경도 제공됩니다.
스크린샷 위주로 작성하려고 하였습니다.

데모환경

  • Ubuntu 18.04
  • Docker version 18.09.1
    - Docker는 최소 1.8 이상 버전 필요
  • Nexus 3.20.1

Nexus3 설치 및 사내 Docker 저장소 생성

Nexus가 설치될 서버의 IP는 182.252.133.70 입니다.

$ ssh root@182.252.133.70

1) 호스트 <-> Nexus 컨테이너 퍼머넌트(permanent) 생성

$ mkdir /nexus-data

2) Nexus 컨테이너 생성

$ docker run --name nexus -d -p 5000:5000 -p 8081:8081 -v /nexus-data:/nexus-data -u root sonatype/nexus3

3) Nexus 웹으로 접속 http://182.252.133.70:8081

최초 admin 계정으로 로그인 필요합니다.
admin 패스워드는 /nexus-data/admin.password 에서 확인 가능합니다.

$ cat /nexus-data/admin.password
6f471aea-1d52-4e4b-9988-1714e9bf849d # admin의 패스워드



admin 비밀번호를 새롭게 입력 합니다.


4) Nexus 에서 docker-hosed 와 docker-proxy Blob 생성

톱니바퀴 > Repository > Blob Stores > Create blob store
docker-hosted 와 docker-hub 2개 생성이 필요합니다.

Name : docker-hosted

Name : docker-hub

5) Nexus 에서 docker-hosed 와 docker-proxy 저장소 생성

톱니바퀴 > Repository > Repositories > Create repository
docker-hosted 와 docker-hub 2개 생성이 필요합니다.

docker (hosted) 선택

  • Name은 docker-hosted
  • HTTP 영역 체크 및 5000 입력
  • Enable Docker V1 API 체크
  • Blob store docker-hosted 선택

docker (proxy) 선택

  • Name은 docker-hub
  • Enable Docker V1 API 체크
  • Remote storage 에 https://registry-1.docker.io 입력
  • Use Docker Hub 선택

6) Nexus 에서 Realms 설정

톱니바퀴 > Realms > Docker Bearer Token Realm Active로 이동 > Save

7) docker 명령어 http 사용 가능 설정 (v1)

/etc/docker/daemon.json 파일 생성
✔️ 기존에 존재하지 않는 파일이면, 새로 만들어야 합니다.

$ cat /etc/docker/daemon.json
{
        "insecure-registries" : ["182.252.133.70:5000"]
}

docker 데몬 재기동

$ service docker restart

nexus 컨테이너 재시작

$ docker restart nexus

외부 클라이언트에서 사내 Docker 저장소에 이미지 Push

클라이언트의 IP는 182.252.133.71 입니다.

$ ssh root@182.252.133.71

1) docker 명령어 http 사용 가능 설정 (v1)

/etc/docker/daemon.json 파일 생성.
기존에 존재하지 않는 파일이면, 새로 만들어야 합니다.
💥 모든 클라이언트에서 이 설정이 꼭! 필요합니다.

$ cat /etc/docker/daemon.json
{
        "insecure-registries" : ["182.252.133.70:5000"]
}

docker 데몬 재기동

$ service docker restart

2) 사내 Docker 저장소 로그인

$ docker login 182.252.133.70:5000
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

3) docker pull 그리고 사내 Docker 저장소에 push

docker pull busybox 이미지 (from https://hub.docker.com/_/busybox)

$ docker pull busybox # hub.docker.com 에서 docker pull
bdbbaa22dec6: Pull complete
Digest: sha256:6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

busybox 이미지 확인

$ docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              6d5fcfe5ff17        5 weeks ago         1.22MB

tag 하기

$ docker tag 6d5fcfe5ff17 182.252.133.70:5000/busybox:v20200205

사내 Docker 저장소에 push

$ docker push 182.252.133.70:5000/busybox:v20200205
The push refers to repository [182.252.133.70:5000/busybox]
195be5f8be1d: Pushed
v20200205: digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6 size: 527

사내 저장소에 push된 이미지 확인

1) Nexus 웹으로 접속 http://182.252.133.70:8081

Browse > docker-hosted

tag 확인

사내 저장소에서 pull 받기

$ docker pull 182.252.133.70:5000/busybox:v20200205
bdbbaa22dec6: Pull complete
Digest: sha256:edafc0a0fb057813850d1ba44014914ca02d671ae247107ca70c94db686e7de6
Status: Downloaded newer image for 182.252.133.70:5000/busybox:v20200205
182.252.133.70:5000/busybox:v20200205
$ docker images -a
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
182.252.133.70:5000/busybox   v20200205           6d5fcfe5ff17        5 weeks ago         1.22MB

추가로 해야 할 일

443 포트, 즉 SSL 추가

SSL이 적용되어야 /etc/docker/daemon.json 파일 생성 과정이 생략 가능합니다.
💡 다음 포스팅에 이어서 다루겠습니다.

참고링크

3개의 댓글

comment-user-thumbnail
2022년 12월 21일

좋은 글 감사합니다! 자세하게 설명해주셔서 nexus 공부하는데 많은 도움되었습니다!!! 여쭤보고싶은게 있는데 위에 적혀있는데로 했는데 nexus 접속이 서버 ip가 아니라 localhost로만 됩니다 ㅠ 혹시 이부분 어떻게 해결해야하는지 아시나요..?

1개의 답글