클라우드 서비스를 사용하지 않고 폐쇄 환경에서 CI/CD를 구축 하고 있습니다. Gitlap, Jenkins 파이프라인을 통해 CI 지속적인 통합 환경을 구축하였고 Docker Registry, Jenkins 파이프라인을 통해 CD환경을 구축하였습니다.
그 중 오늘 소개할 방법은 Docker에서 공식적으로 제공하는 registry 이미지를 통해 프라이빗한 Docker image 저장소를 구축하는 방법입니다.
말이 뭔가 도돌이표인것같은 느낌이지만 Docker 환경에 Docker Image를 저장할 수 있는 Docker Registry 컨테이너를 띄워서 폐쇄환경에서 도커 이미지저장소를 구현해보겠습니다.
Authentication
// 아래 환경은 리눅스 Shell환경에서 진행이 됩니다.
// 일단 간단하게 보안설정을 진행하겠습니다. registry htpasswd
// htpasswd 파일기반 인증 인증파일 생성
// 간단하게 htpasswd 보안을 구현하였지만 실질적으로 사용하시려면 더 강력한 보안을 설정하셔야 합니다.
sudo htpasswd -Bc /home/include-hoany/docker/auth/htpasswd (사용할 아이디 입력)
new password // 패스워드 입력
Docker Registry Container Start
// docker 이미지저장소 컨테이너 기동
sudo docker run -d --name registry
-p 60000:5000 -v (도커 이미지가 저장될 호스트 디렉토리):/var/lib/registry
-v (htpasswd 인증파일이 위치한 호스트 디렉토리):/auth
-e REGISTRY_AUTH=htpasswd
-e REGISTRY_AUTH_HTPASSWD_REALM="Hello Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
registry:2
Docker Registry Image List
// registry에 저장된 이미지 목록 조회
curl -u (htpasswd 아이디):(htpasswd 패스워드) http://localhost:5000/v2/_catalog
위 명령어를 통해 현재 저장된 이미지 목록을 확인할 수 있습니다.
Docker Registry Image Push, Pull
// 가장먼저 Docker Registry에 로그인을 진행합니다.
docker login http://localhost:60000 -u (아이디) -p (비밀번호)
// 로그인 완료후 Docker Registry에 업로드할 이미지 태그를 지정합니다.
docker tag mymenu-api:latest localhost:60000/mymenu-api:latest
// 태그를 생성후 해당 이미지를 푸쉬해 줍니다.
docker push localhost:60000/mymenu-api:latest
// 업로드한 이미지를 Docker Registry에서 원하는 이미지를 다운로드합니다.
docker pull localhost:60000/mymenu-api:latest
위 명령어를 통해 보안인증을 한후 도커 이미지를 업로드하고 다운받을 수 있게 됩니다.
오늘은 간단하게 Docker Image를 프라이빗하게 관리할 수 있는 Registry를 구현해보았습니다.
이제는 너무나 간편하게 Ci/CD를 환경을 구축할 수 있어서 개발하기 정말 편한 세상에 살고있구나란
생각이 들며 오늘글을 마무리 하도록 하겠습니다.
행복한 개발하세요!