수색…


소개

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»를 추가합니다.

비고

도커 엔진을 설치하는 방법 (이 자습서에서는 클라이언트라고 함)

SSL 자체 서명 인증서를 생성하는 방법

인증서 생성

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.keyserver.crt 가 있습니다.

자체 서명 된 인증서로 레지스트리 실행

개인 레지스트리를 (안전하게) 실행하려면 자체 서명 된 인증서를 생성해야합니다. 이전 예제를 참조하여이를 생성 할 수 있습니다.

필자는 server.keyserver.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 또는
푸시 :

  1. hub.docker.com에서 공식 이미지 얻기 : docker pull nginx
  2. 개인 레지스트리로 푸시하기 전에이 이미지에 태그를 지정하십시오. docker tag IMAGE_ID mydomain.com:5000/nginx ( docker tag IMAGE_ID mydomain.com:5000/nginx 를 얻기 위해 docker images 사용)
  3. 이미지를 레지스트리로 docker push mydomain.com:5000/nginx : docker push mydomain.com:5000/nginx


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow