Cloud/Docker

[Docker] 도커 레지스트리 구축 및 활용

Yoonsoo Park 2024. 11. 26. 18:55

*해당 포스팅은 다음과 같은 환경에서 진행하였으니, 참고 바랍니다.

  • Docker Community Edition 
  • Ubunto Linux 22.04 (OS에 따라 설치 방법은 다소 상이하나, 사용법은 동일함)
  • VMware  Workstation pro ( x86_64, CPU  x 2, RAM 2GB, HDD 120GB)

 

1. 왜 사설 레지스트리를 구축할까?

 우선 도커 레지스트리(registry)도커 이미지를 저장하고 배포하는 저장소이다. 이전 포스팅들을 본 분들이시라면 사용해 보셨을 Docker Hub가 대표적인 도커 레지스트리이다. Docker Hub 처럼 다양한 이미지를 저장하고 있는 퍼블릭 레지스트리가 있는데, 조직 내부에 사설 레지스트리를 추가적으로 구축하는 이유는 무엇일까?

다음 정리를 통해 그 이유를 알아보자.

 

사설 레지스트리를 구축하는 이유

1. 보안 강화 

  • 공용 레지스트리에 민감한 이미지를 업로드하면 외부 노출 위험이 있다
  • 사설 레지스트리는 내부 네트워크에서만 접근 가능하므로 이미지 보안을 강화할 수 있다
  • 예시: 고객 데이터를 처리하는 애플리케이션 이미지를 외부에 노출하면 데이터 유출 가능성이 커진다

2. 비용 절감 

  • 퍼블릭 레지스트리의 프라이빗 레지스트리 서비스는 대규모로 이용할 경우, 추가 비용이 발생한다
  • 사설 레지스트리를 구축하면 용량 제한 없이 이미지를 저장할 수 있어 장기적으로 비용을 절감할 수 있다

3. 이미지 관리 최적화

  • 조직 내부의 개발 요구 사항에 맞게 레지스트리를 커스터마이징할 수 있
  • 네트워크를 통해 빠르게 이미지를 전달하여 배포 시간을 단축할 수 있다

4. 네트워크 독립성 

  • 온프레미스 데이터센터같은 폐쇄망 환경에서는 인터넷 연결이 어려운 경우가 많다
  • 사설 레지스트리를 사용하면 외부 네트워크에 의존하지 않고 내부에서 이미지를 저장하고 배포할 수 있다

6. 규제 및 법적 요구사항

  • 금융, 헬스케어, 공공기관과 같은 특정 산업에서는 데이터와 이미지를 외부에 저장하지 못하는 규제가 있을 수 있다

 

 

 

2. 사설 레지스트리를 구축해 보자

1) 사설 레지스트리 구축용 이미지 다운로드

docker image pull registry
# registry : 사설 레지스트리 운영을 위해서 제작된 이미지

 

 Docker Hub에 있는 사설 레지스트리 구축용 이미지를 다운 받는다

 

2) 사설 레지스트리용 컨테이너 실행

docker container run -d -p 5000:5000 --name my_registry registry 

# my_registry --> 로컬에 설치해서 운영할 레지스트리 이름 
# -p 5000:5000 --> 레지스트리에서 5000번 포트를 오픈함
 

3) 사설 레지스트리에 이미지 업로드(push)

docker image tag skh-web:0.1 localhost:5000/skh-web:0.1   
# 사설레지스트리용 태그 설정 
# skh-web:0.1 이미지에 localhost:5000/skh-web:0.1 태그를 지정
(해당 이미지는 이전 예제에서 생성한 이미지이므로, 없으면 새로 생성해보기)

docker image push localhost:5000/skh-web:0.1  
#이미지를 사설레지스트에 업로드(Push)

 

4) 사설 레지스트리에 등록된 이미지 목록 보기

curl http://사설레지스트리주소:포트/v2/_catalog 

curl http://사설레지스트리주소:포트/v2/이미지명/tags/list

 

5) 사설 레지스트리에서 다운받기

** 로컬에 있으면 거기서 이미지를 바로 가져오기 때문에, 로컬 저장소에 있는 이미지 있으면 삭제하고 진행

docker image pull localhost:5000/skh-web:0.1 
# 사설 레지스트에 있는 skh-web:0.1 이미지를 Pull 테스트

 

 

## Docker Hub에 Private Repository 생성하고 운영하기 ##

1) Docker Hub 계정 생성 및 로그인

2) 새 리포지토리 생성:

  • 상단 메뉴에서 "Repositories"를 선택한 후, "Create Repository" 버튼을 클릭합니다.
  • Repository Name에 원하는 이름을 입력합니다.
  • Visibility에서 "Private"를 선택하여 프라이빗 리포지토리로 설정합니다.
  • 설정을 완료한 후 "Create" 버튼을 클릭하면 프라이빗 리포지토리가 생성됩니다.

3) 로컬에서 Docker 이미지 빌드 및 태그 지정

docker build -t [이미지명]:[태그] .
# 로컬 환경에서 Dockerfile을 작성하고 이미지를 빌드

docker tag [이미지명]:[태그] [Docker Hub 사용자명]/[리포지토리명]:[태그]
# 빌드한 이미지에 Docker Hub의 리포지토리 경로로 태그를 지정

 

4) 터미널에서 Docker Hub에 로그인

docker login

 

**도커허브 사이트에 로그인된 상태에서 아래의 URL 주소로 접속하여 원타임 인증코드를 입력하면 인증성공 처리된다

 

5) 이미지 푸시(Push)

docker push [Docker Hub 사용자명]/[리포지토리명]:[태그]

 

6) 이미지 풀(Pull)

docker pull [Docker Hub 사용자명]/[리포지토리명]:[태그]

 

 

 

힘들지만 오늘도 해낸 나를 위한 한 마디, 

"여러분의 행동은 말보다 더 중요하고, 말과 행동이 일치하지 않으면 좋은 결과를 기대할 수 없다. 자기 신뢰는 말과 행동의 일치이며, 영혼과 마음의 합치이다", Napoleon hill

 

"말만 앞서는 사람이 되지 말자. 입 밖으로 나온 말은 항상 지킬 수 있게 노력하자. 내가 한 말은 곧 죽어도 지키는 것이 조용히 나를 알리는 방법일 것이다"