*해당 포스팅은 다음과 같은 환경에서 진행하였으니, 참고 바랍니다.
- 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
"말만 앞서는 사람이 되지 말자. 입 밖으로 나온 말은 항상 지킬 수 있게 노력하자. 내가 한 말은 곧 죽어도 지키는 것이 조용히 나를 알리는 방법일 것이다"
'Cloud > Docker' 카테고리의 다른 글
[Docker] Docker Compose (0) | 2024.11.27 |
---|---|
[Docker] 도커 이미지 생성: commit, Dockerfile (0) | 2024.11.26 |
[Docker] 도커 컨테이너 네트워크 관리 명령어 (0) | 2024.11.26 |
[Docker] 도커 컨테이너 라이프사이클 / 도커 관리 명령어1 (0) | 2024.11.25 |
[Docker] 도커 설치 및 실행 방법 (0) | 2024.11.24 |