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 파일이 없는 경우 해결법]
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가 없는 경우 해결법]
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은 되어있어야함
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
'클라우드 > Docker' 카테고리의 다른 글
07. Docker login 실패 오류 해결법 (1) | 2020.09.15 |
---|---|
06. Docker Private Registry IP가 아닌 Domain으로 접속하기 (0) | 2020.09.15 |
04. Docker Private Registry 구성하기 (0) | 2020.09.15 |
03. Docker Hub에 image push 하기 (0) | 2020.08.30 |
02. Docker tomcat, MySQL 환경 구성 (1) | 2020.08.30 |