docker private registry에 인증 절차 추가하기
"가장 빨리 만나는 Docker" 책을 참고함.
구조는 아래와 같이 잡는다.
(내부) docker-registry <---> nginx auth <---> (외부)docker daemon
기본 registry를 내려받아 실행.
sudo docker run -d --name docker-registry -v /tmp/registry:/tmp/registry registry:0.9.1
(* port는 nginx에서 redirect될거라 오픈할 필요는 없음.)
openssl로 key 제작
1. openssl genrsa -out 이름.key 2048
2. openssl req -new -key 이름.key -out.이름.csr (작성시 도메인은 registry.test.com로 맞춰야 한다.)
3. openssl x509 -req -days 365 -in 이름.csr -signkey 이름.key -out 이름.crt
이 파일을 nginx 서버와 클라에서 아래 과정을 거쳐 인증서를 시스템에 설치한다.
1. cp 이름.crt /usr/share/ca-certificates/ (ca-certificates 폴더가 없다면 "sudo apt-get install curl")
2. echo "이름.crt" | tee -a /etc/ca-certificates.conf (설치할 인증서 목록에 추가함.)
3. update-ca-certificates (ca-certificates.conf에 포함된 내용을 참고로 인증서 설치)
이후 도커 재시작 필요함.
nginx 서버는 아래와 같이 실행할 것! (이걸 실행 후 openssl 처리해야 할 걸.)
sudo docker run --name reg-auth \
-p 443:443 \
-d \
-v /rs2m/data:/data \
-v /rs2m/data/nginx.conf:/etc/nginx/nginx.conf \
-v /rs2m/data/이름.crt:/etc/이름.crt \
-v /rs2m/data/이름.key:/etc/이름.key \
-v /rs2m/data/.htpasswd:/etc/nginx/.htpasswd \
--link docker-registry:docker-registry \
nginx:1.7.9
nginx.conf는 아래와 같이 !!
worker_processes 1;
events{
worker_connections 1024;
}
http{
server{
listen 443 ssl;
server_name registry.test.com
ssl on;
ssl_certificate /etc/rs2m_reg.crt;
ssl_certificate_key /etc/rs2m_reg.key;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization "";
proxy_redirect http:// https://;
client_max_body_size 0;
chunked_transfer_encoding on;
location / {
proxy_pass http://rs2m-reg:5000;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
}