이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Docker

05. Docker Private Registry 암호 설정

이쿠우우 2020. 9. 15. 16:40
반응형

 

 


Docker Private Registry 관련 글

Docker Private Registry 구성하기

Docker Private Registry 암호 설정

Docker Private Registry IP가 아닌 Domain으로 접속하기
Docker login 실패 오류 해결법
docker htpasswd 명령 실패 오류


 

 

Docker Private Registry 암호 설정

Docker Registry가 있더라도 서버 주소를 알고있다면 

사용자들이 와서 image를 push, pull 할 수가 있음

Private Registry를 본래의 목적으로 사용하기 위해서는 

기본적으로 인가된 사용자만 접근해서 image를push, pull 할 수 있어야함.

그러기 위해서는 인증 기능을 적용해야함.

인증을 추가하기 위한 방법 중 하나로 

Nginx 의 기본 인증(Basic Authentication) 기능을 사용하는 예제를 설명하겠음.

 

HTTP 프로토콜에서는 인증을 지원하지 않음으로 반드시 HTTPS 프로토콜을 사용해야함

 

(참고)

docker 는 설치 된 상태에서 진행

 

 


 

Docker Private Registry 암호 설정 및 설치 과정

 

1. Private Registry SSL https 접속을 위해 옵션 추가

[명령어]

vi /etc/sysconfig/docker

 

(해당 파일에서 옵션 추가)

DOCKER_OPTS="–insecure-registry localhost:5000"

[만약 vi /etc/sysconfig/docker 파일이 없는 경우 해결법]

[명령어]
vi /lib/systemd/system/docker.service 

(해당 파일에 옵션 추가)
--insecure-registry=localhost:5000

2. SSL 인증서 설치

[본인이 편한 경로에 디렉터리 생성]

mkdir /certs

cd /certs

 

해당 directory 에 인증서가 생성됨

 

SSL 생성 By OpenSSL

[명령어]

openssl genrsa -out server.key 2048

openssl req -new -key server.key -out server.csr

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

 

 

SSL 생성 과정 자세히

[SSL 생성 By OpenSSL]

openssl genrsa -out server.key 2048

 

[인증서 서명 요청]

openssl req -new -key server.key -out server.csr

 

[공개키 생성]

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

 

 

 

3. 접속 인증을 위한 구성

Private Registry에서 사용할 ID/Password를 생성해야함.

ID = iksoon

PW = qwer1234

로 생성하겠음.

 

[명령어]

docker run --entrypoint htpasswd registry:2.7.0  -Bbn iksoon qwer1234 > /auth/htpasswd

 

[명령어 설명]

docker의 Private Registry에 설치되어있는 htpasswd Tool로 

host 의 /auth 경로에 htpasswd 인증파일 생성

 

[host 에서 생성된 파일 확인]

/auth 경로에 가보면 htpasswd 파일이 생성되어있음

 

[만약 registry image에 htpasswd가 없는 경우 해결법]

글을 2020년도에 작성해서 registry image version이 2.7인데
최신 version의 경우 htpasswd가 포함되어 있지 않음.
이를 해결하기 위해 local에 htpasswrd를 설치 후 local에서 명령을 통해 생성.
 
[htpasswd tool 설치 명령어]
yum install httpd-tools -y
 
[명령어]
htpasswd -Bbn iksoon qwer1234 > /auth/htpasswd

 

4. Docker 재시작

[명령어]

systemctl restart docker

 

5. Private Registry Image 구동

 

Private Registry Container 실행.

 

[명령어]

docker run --name local-docker-registry -d --restart=always -p 5000:5000  -v /certs:/certs  -v /data/registry:/var/lib/registry/Docker/registry/v2 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt  -e REGISTRY_HTTP_TLS_KEY=/certs/server.key  -v /auth:/auth  -e REGISTRY_AUTH=htpasswd  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  registry:2.7.0 

 

[명령어 개행 version]

docker run --name local-docker-registry -d --restart=always -p 5000:5000 \
  -v /certs:/certs \
  -v /data/registry:/var/lib/registry/Docker/registry/v2 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \  
  -v /auth:/auth \   
  -e REGISTRY_AUTH=htpasswd \   
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \   
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \   
  registry:2.7.0  

 

 

 

설치 및 실행 완료.

 

 

 

 


Private Registry 에 Image push

 

[push 결과]

no basic auth credentials

메세지 나오면서 실패함.

[실패 원인]

상위에서 인증 정보 생성했던것 처럼 

login 을 해줘야 push 가 가능함

 

[docker login 명령어]

docker login 10.0.2.5:5000

 

[login 후 다시 push]

결과 : 정상

 


 

Private Registry push 된 Image list 조회

 

image list 를 조회하고자 하는 host에서 진행

 

1. hosts 파일편집

[명령어]

vi /etc/hosts 

 

(내용 추가)

10.0.2.5 = iksoon.docker.com 

 

(내용 설명)

10.0.2.5 

=  private registry Server IP 

iksoon.docker.com

= openssl req -new -key server.key -out server.csr 명령 했을때

= common Name (eg, your name or your server's hostname) 부분에서 설정한 hostname 이름을 넣어줌

 

 

2. image Registry list 조회

[명령어]

curl --user iksoon:qwer1234 --cacert server.crt -X GET https://iksoon.docker.com:5000/v2/_catalog

 

[옵션 설명]

--user = 옵션에 아이디:비번 을 넣어줌

--cacert = 옵션에서 server.crt 는 상위에서 생성한 crt 파일을 넣어줌

GET https = 암호가 걸려있는 private registry 의 경우 https 통신을 해야함

 

[결과]

push 된 images의 name 이 표시됨

 

 

3. image tag list 조회

[명령어]

curl --user iksoon:qwer1234 --cacert server.crt -X GET https://iksoon.docker.com:5000/v2/peksoon_tomcat_test/tags/list

 

 


 

 

Private Registry push 된 Image 내려받기 (Pull)

 

[명령어]

docker pull 10.0.2.5:5000/peksoon_tomcat_test

 

[옵션 설명]

10.0.2.5:5000 = private Registry Server의 IP

peksoon_tomcat_test = private Registry Server 저장되어 있는 images 이름

 

docker login은 되어있어야함

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

 

 

 

 

 

 

 

 

 

 

반응형