OneDay Network
docker private registry 구축하기(docker hub) 본문
1. 인증서 만들기(certbot 설치)
curl https://dl.eff.org/certbot-auto > certbot-auto
chmod +x certbot-auto
mv certbot-auto /usr/local/sbin/certbot-auto
certbot-auto --nginx
2. docker registry
docker run -d -p 5000:5000 --restart=always --name docker-registry \
-v /root/certs:/certs \
-v /root/registry:/var/lib/registry/docker/registry/v2 \
-v /root/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
registry
3. docker registry web
docker run -d -p 8080:8080 --name registry-web --link docker-registry \
-e REGISTRY_URL=https://"Domain":5000/v2 \
-e REGISTRY_TRUST_ANY_SSL=true \
-e REGISTRY_BASIC_AUTH="ID/PW(Base64)" \
-e REGISTRY_NAME="Domain":5000 hyper/docker-registry-web
4. user 생성
htpasswd -Bbn "ID" "PW" >> /root/auth/htpasswd
5. 사용법 및 검증
1. docker login "Domain":5000
-> ID/PW 입력
2. docker push, pull
-> docker push "Domain":5000/test
-> docker pull "Domain":5000/test
3. docker image 항목 확인
-> curl 명령어를 통한 확인
-> web을 통한 확인
5-1. curl 명령어를 통한 확인
※ 이미지 목록 조회
- curl -u "ID":"PW" -X GET https://"Domain":5000/v2/_catalog
※ 이미지에 대한 태그 조회(버전)
- curl -u "ID":"PW" -X GET https://"Domain":5000/v2/"Image name"/tags/list
5-2. web을 통한 확인
- http://"Domain":8080 으로 접속
6. 인증서 자동 갱신
#!/bin/bash
/usr/local/sbin/certbot-auto renew
yes | cp /etc/letsencrypt/live/"Domain"/cert.pem /root/certs/cert.pem
yes | cp /etc/letsencrypt/live/"Domain"/chain.pem /root/certs/chain.pem
yes | cp /etc/letsencrypt/live/"Domain"/fullchain.pem /root/certs/fullchain.pem
yes | cp /etc/letsencrypt/live/"Domain"/privkey.pem /root/certs/privkey.pem
docker restart docker-registry
echo `date` "UPDATE CA" >> /var/log/update_ca.log
[root@localhost certs]# crontab -l
0 01 1 * * /root/certs/update_ca.sh ※매달 1일 오전 1시
The following certs are not due for renewal yet:
/etc/letsencrypt/live/"Domain"/fullchain.pem expires on 2021-02-07 (skipped)
No renewals were attempted.
이와 같이 crontab을 등록하면 매달 1일 오전 1시에 자동으로 갱신 될 것이다.
하지만, 위 에러 메시지가 나타나면서 인증서 갱신이 되지 않을 수 있다.
이는 만료일이 1개월 미만 일 때만 정상적으로 인증서가 갱신된다는 점은 참고하면 좋을 것 같다.
Comments