본문 바로가기
Web Development/MicroService Architecture

[MSA / Docker] Local Private Registry 생성하기

by 감자맹고우 2023. 4. 25.
728x90
반응형

이전에 Dockerfile을 작성할 때 FROM으로 Docker Hub에서 Docker 이미지를 불러와서 Docker 이미지를 생성하도록 했다. 그런데 이 도커 이미지에 대해서 생각해볼 필요가 있다.

 

현재는 테스트로 개개인이 docker를 따로 설치하여 쓰고 있는데, 원래는 서버에 docker를 설치하고 개인은 코드만 git에 올리면 서버에서 알아서 처리되도록 해야한다. 필요 시에는 개인도 docker를 설치해서 서버의 도커이미지를 불러와 사용하도록 해야한다. 그래야 이미지 중복을 막고 개발 환경이 간편해진다.

 

그러면 이제 도커이미지를 어디에 올릴것인가가 관건이다. 프로젝트는 VCS로 공유하고 관리한다. 그 중에서도 Github가 대표적인 예시라고 할 수 있다. 도커는 그럼 어디에서 공유할 수 있을까? 바로 Dockerhub이다.

 

앞서 Dockerfile을 작성할 때, Docker Hub에서 이미지를 받았다. 마찬가지 우리가 작성한 이미지도 Docker Hub에 올릴 수 있다. Docker Hub는 마치 Github처럼 Private과 Public으로 registry가 나누어져있으며, 이미지를 push할 수 있다.

문제는 보안이다. 사측에서 생각해보면 모두가 공유하는 Github는 Private repository로 관리한다고 해도 보안이 걱정된다. 그래서 내부적으로만 사용할 수 있게 환경을 조성해놓는다.

 

Docker Hub도 마찬가지이다. Dockerfile로 쉽게 이미지를 받을 수 있다고 생각하면, 아무리 Private registry로 설정한다고 해도 우려가 된다. 그래서 방법을 찾아보니 Harbor 같은 것들이 있다고는 하는데, 아무리 연구용 프로젝트라도 오버엔지니어링처럼 느껴졌다. 그래서 더 찾아보니 Docker에서 로컬 저장소처럼 local private registry를 따로 만들 수 있게 구현해두었다고 한다.

 

이제 한번 생성해보자.

 

 

반응형

 

[ 생성 방법 ]

 

사실 허망하게도, Docker에 local private registry를 생성하기 위해서는 registry 도커 컨테이너 하나만 올려주면 끝이다.

그렇기 때문에, 컨테이너를 실행하는 명령어 한 줄이면 생성 완료다.

 

docker container run -d --restart=always -p 5000:5000 -v /registry:/var/lib/registry/docker/registry/v2 --name registry registry:latest

 

내용을 살펴보면 우선, docker container run을 통해 컨테이너를 실행시키고 여러가지 옵션을 주었다.

다음, -d로 백그라운드로 실행하도록 했다. -d를 적지 않으면 컨테이너의 실행 로그를 계속해서 출력할 것이다. 추가로 restart 옵션을 설정해주었고, 포트를 5000으로 임의 지정했다. -v 로 docker 호스트 시스템(가상 머신)의 /registry 디렉토리와 컨테이너의 /var/{중략}/v2 디렉토리를 연결했다. --name으로 컨테이너 이름을 registry라고 명명했고, 컨테이너가 사용할 도커 이미지로 registry:latest. 즉, 최신 버전의 registry 이미지를 지정했다.

 

이렇게 하면 registry 컨테이너가 생성되며 local private registry가 생성된다.

이제 docker push를 할 때, dockerhub의 registry가 아닌 'docker push localhost:5000/test-service:latest' 처럼 생성한 local private registry에 올려서 사용할 수 있다.

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글