Docker
API v2로 도커 개인 / 보안 레지스트리
수색…
소개
Docker Hub 대신 사설적이고 안전한 docker 레지스트리. 기본적인 도커 기술이 필요합니다.
매개 변수
명령 | 설명 |
---|---|
sudo docker run -p 5000 : 5000 | 도커 컨테이너를 시작하고 컨테이너에서 물리적 시스템의 포트 5000으로 포트 5000을 바인드하십시오. |
- 이름 레지스트리 | 컨테이너 이름 ( "docker ps"가독성 향상에 사용). |
-v 'pwd'/ certs : / certs | 컨테이너의 실제 컴퓨터의 CURRENT_DIR / certs를 바인딩합니다 (예 : "공유 폴더"). |
-e REGISTRY_HTTP_TLS_CERTIFICATE = / certs / server.crt | 레지스트리에서 /certs/server.crt 파일을 사용하여 시작하도록 지정합니다. (env 변수) |
-e REGISTRY_HTTP_TLS_KEY = / certs / server.key | RSA 키 (server.key)와 동일합니다. |
-v / 루트 / 이미지 : / var / lib / registry / | 모든 레지스트리 이미지를 저장하려면 실제 컴퓨터에서이 작업을 수행해야합니다. 여기서 우리는 모든 이미지를 실제 머신의 / root / images에 저장합니다. 이렇게하면 이미지를 잃지 않고 레지스트리를 중지했다가 다시 시작할 수 있습니다. |
레지스트리 : 2 | 우리는 docker 허브 (또는 로컬)에서 레지스트리 이미지를 가져오고 싶다고 지정하고 레지스트리의 버전 2를 설치하기를 원하기 때문에«2»를 추가합니다. |
비고
인증서 생성
RSA 비공개 키 생성 : openssl genrsa -des3 -out server.key 4096
이 단계에서 Openssl은 암호문을 요구해야합니다. 암호문없이 통신 및 인증을 위해 인증서 만 사용합니다. 예를 들어 123456 만 사용하면됩니다.
인증서 서명 요청 생성 : openssl req -new -key server.key -out server.csr
인증서에 대한 몇 가지 정보를 묻는 메시지가 표시되므로이 단계가 중요합니다. 가장 중요한 정보는 개인용 도커 레지스트리와 다른 모든 시스템 간의 통신에 사용되는 도메인 이름 인 "Common Name"입니다. 예 : mydomain.com
RSA 개인 키에서 cp server.key server.key.org && openssl rsa -in server.key.org -out server.key
구문 제거 : cp server.key server.key.org && openssl rsa -in server.key.org -out server.key
내가 말했듯이 우리는 통과 구문없이 인증서에 초점을 맞출 것입니다. 따라서 모든 키의 파일 (.key, .csr, .crt)을주의하여 안전한 장소에 보관하십시오.
자체 서명 된 인증서 생성 : openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
이제 개인 레지스트리 인증에 필요한 두 개의 필수 파일 인 server.key 및 server.crt 가 있습니다.
자체 서명 된 인증서로 레지스트리 실행
개인 레지스트리를 (안전하게) 실행하려면 자체 서명 된 인증서를 생성해야합니다. 이전 예제를 참조하여이를 생성 할 수 있습니다.
필자는 server.key 와 server.crt 를 / root / certs에 넣었다.
docker 명령을 실행하기 전에 certs 폴더가 들어있는 디렉토리에 cd
넣어야합니다. 당신이 아니라면 명령을 실행하려고하면 다음과 같은 오류 메시지가 나타납니다.
level = fatal msg = "열린 /certs/server.crt : 그런 파일이나 디렉토리가 없습니다"
당신이 (내 예제에서는 cd /root
), 기본적으로 보안 / 개인 레지스트리를 사용하여 시작할 수 있습니다 : sudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2
명령에 대한 설명은 매개 변수 부분에서 사용할 수 있습니다.
도커 클라이언트에서 당겨서 또는 푸시
작동중인 레지스트리가 실행되면 이미지를 당기거나 푸시 할 수 있습니다. 이를 위해서는 도커 클라이언트의 특수 폴더에 server.crt 파일이 있어야합니다. 인증서를 사용하면 레지스트리를 인증 한 다음 통신을 암호화 할 수 있습니다.
레지스트리 머신의 server.crt 를 클라이언트 시스템의 /etc/docker/certs.d/mydomain.com:5000/에 복사하십시오. 그런 다음 이름을 ca-certificates.crt 로 바꿉니다. mv /etc/docker/certs.d/mydomain.com:5000/server.crt /etc/docker/certs.d/mydomain.com:5000/ca-certificates.crt
이 시점에서 개인 레지스트리에서 이미지를 가져 오거나 푸시 할 수 있습니다.
PULL : 도 docker pull mydomain.com:5000/nginx
또는
푸시 :
- hub.docker.com에서 공식 이미지 얻기 :
docker pull nginx
- 개인 레지스트리로 푸시하기 전에이 이미지에 태그를 지정하십시오.
docker tag IMAGE_ID mydomain.com:5000/nginx
(docker tag IMAGE_ID mydomain.com:5000/nginx
를 얻기 위해docker images
사용) - 이미지를 레지스트리로
docker push mydomain.com:5000/nginx
:docker push mydomain.com:5000/nginx