Private Docker Registry를 Docker container로 세팅하기

Docker IT

내가 기억하기 편하도록 정리하는 글이라 핵심만 정리하고 있음.

개요.
개인적인 or 사내 프로젝트에 사용하는 이미지들을 도커허브에 public 으로 올릴수는 없으니 (있지만 돈이 든다.) 프라이빗 레지스트리를 세팅하여 사용하기 위함.

SSL 및 인증을 추가하여 보안에도 신경을 쓴다. (IP Access Control까지 해주면 더욱 좋다.)
인증 부분은 registry 컨테이너 내부에서 진행하고, SSL은,,, 컨테이너 및 nginx에서 처리.. (중복…?!)

진행.
1. registry로 사용할 도메인을 서버와 연결해줌 (A record)
2. nginx로 reverse proxy 세팅을 해줌.
3. certbot 으로 레지스트리에 사용할 도메인 인증서를 발급해줌
4. 레지스트리에서 사용할 htpasswd 인증파일을 생성해줌

<br>docker run --rm --entrypoint htpasswd registry:2.7.0 -Bbn account_name account_password &gt;&gt; path/.htpasswd<br>

위와 같이 실행해주면 registry:2.7.0 컨테이너를 임시로 띄우고 htpasswd 로 인증정보를 담은 .htpasswd 를 path에 생성해준다. 작업 후 컨테이너는 삭제되도록 –rm 옵션이 사용되었다.
5. 도커 레지스트리를 아래의 옵션과 함께 실행해준다.
<br>docker run --name registry -it -d -p 5000:5000 --restart=always \<br>-v /path/docker-registry/auth:/auth \<br>-v /path/docker-registry:/var/lib/registry \<br>-v /etc/letsencrypt:/certs \<br>-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/live/leckend-docker-registry.howbuild.com/fullchain.pem \<br>-e REGISTRY_HTTP_TLS_KEY=/certs/live/leckend-docker-registry.howbuild.com/privkey.pem \<br>-e REGISTRY_AUTH=htpasswd \<br>-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd \<br>-e REGISTRY_AUTH_HTPASSWD_REALM='Registry Realm' \<br>registry<br>


* /certs의 호스트 경로를 /etc/letsencrypt로 잡은 이유는..
처음에는 live 디렉토리를 /certs로 지정했는데, live 내에는 심볼릭으로 링크가 되어있기에 실제로 인증서 파일을 못읽어오는 문제 발생.
심볼릭이 정상적으로 작동하도록 하기 위해 /etc/letsencrypt를 /certs 루트로 세팅.
chown 으로 권한설정도 변경해줘야한다. (UID/GID 1000) (사실 뇌피셜로 진행한거라 안해도 될지도…)

** htpasswd -c, -m 등으로 생성한 인증정보는 브라우저에서 작동하지 않았다..
위에 -Bbn 옵션으로 생성한 경우 정상적으로 작동 확인.

아래는 참고했던 포스트

https://novemberde.github.io/post/2017/04/09/Docker_Registry_0/
https://tech.madup.com/docker-registry/
https://ikcoo.tistory.com/60