방법 도커 레지스트리 PW를 구축하는 방법을 가르쳐

면책 조항 :이 문서는 블로거 원본입니다, 블로거 허용하지 않고, 공공 우려 번호 기술 교류 (jishuhui_2015가) 저자에 연결될 수 있습니다 복제 할 수 없다. https://blog.csdn.net/egworkspace/article/details/80518647

면책 조항 :
이 문서는 블로거 원본입니다은 허용 블로거없이 복제 할 수 없다. 있는 공개 문제 기술 교류 (ID : jishuhui_2015)는 저자에 링크 할 수 없습니다.

억, 서문

어디서든 구축, 선박 및 응용 프로그램을 실행

더이 문서의 개념에 대한 고정 표시기가 가상화 시장으로, 떠오르는 스타, 고정 표시기는 모든 연령층의 점점 더 많은 기업이었다, 세부 사항에 가지 않을 것이다, 점점 더 많은 개발자는 부두 노동자의 품 안으로 부어하기로 결정했다.

동시에 여러 응용 프로그램을 쉽게하여, 물론,이 모든 기본 리눅스 관련 기술 덕분에 실행 서로 격리하는 디자인의 부두 노동자의 철학, 그것은 하나의 물리적 기계 (또는 가상 머신)을 할 수 있습니다 "컨테이너"물론, 윈도우 운영 체제 모두, OS의 X를 포함.

부두 노동자의 튜토리얼은 충분히 있었지만 인해 반복의 최근 몇 년 동안 고정 표시기의 급속한 발전, 더 빠른 버전으로, 여러 버전 간의 호환성은 인터넷에 블로그 게시물을 발견하면, 당신은 자신의 문제를 해결하지 못할 수있다 .

물론, 내용 도커 환경 설치, 기본 명령 등을 성공적으로 될 문서의 기본 내용을 마스터 할 수있는 공식 웹 사이트를 통해 읽을 아무 문제가 없다. 내가 SSL 기반 도커 레지스트리 (권장 연습의 공식 웹 사이트)를 구축하려고이 부분에 대한 문제가 많이 발생했습니다 그러나, 블로그 문서 내용의 대부분은 사용하여 SSL 링크를 건너 뛸 수 있습니다 액세스 HTTP 양식.

이에 점유율은 후 도커 레지스트리가 더 이상 문제가 구축하지 않으려면,이 문서를 다 읽고.

> docker --version

Docker version 18.03.1-ce, build 9ee9f40

이는 나중에 Docker1.6 + 이상을 설치하는 것이 좋습니다, 내 도커 환경입니다.

또한, 독자도 필요합니다

1 CentOS_7_64bit 호스트 운영 체제 (또는 가상 머신)와 컴퓨터;

2, 도메인 이름에 대해 적용됩니다. 그렇지 않으면, 당신은 호스트 파일을 변경할 수 있지만 성공을 보장하지 않습니다. 저자 알리 구름이 5 년을 포함, 개인 도메인 이름에 적용, ¥ 105;

도메인 이름 때문에 HTTPS 액세스를 달성하기 위해 필요로하는 CA 인증서를 얻을 수있는 무료 방법을 적용하는 경우 (3), SSL 인증서도 알리 구름 무료 인증서 요청을 갖고, 필수입니다. 그렇지 않으면, 당신은 성공을 보장하지 않습니다, 보웬 언급 많은 연습 인 자신을 생성하기 위해 OpenSSL을 사용할 수 있습니다;

4, 다음 선택하는 nginx를 에이전트에로드.

5, 부두 노동자의 기본 개념과 일반적인 명령을 잘 알고 있지만, 그래서 고차 지식 Dockerfile, 작성, 떼,는 Kubernetes 등을 이해하지 않습니다.

첫째, 거울 도커에서 말하기

추상 개념은 우리가 느낄 수 있도록 나는 두 가지 예를주는 말을 많이 정교 :

1, 우리는 가능성의 수를 기본 운영 체제뿐만 아니라, 집에서 ISO 파일 시스템을 다운로드 할 필요가 내장 된 사전 설치 소프트웨어;

받는다는 항아리가 중앙 저장소에서 종속성을 당겨마다 방지하기 위해, 패키지 종속성을 관리 사용하는 경우 2, 프록시웨어 하우스를 할 넥서스를 사용합니다.

그만큼 그들은 적절한 호스트에로, 상자 밖으로 할 수있는 소프트웨어 도커 이미지 (파일)의 일련의 조합입니다, 고려 될 수있다.

이 문서에서는 다섯 개 일반적으로 사용되는 명령이 있습니다, 부두 노동자 미러링에 대해 필요합니다

A, 미러 풀 버전을 지정하려는 경우, 이름 뒤에 거울웨어 하우스를, 당신은 태그를 가져올 수 있습니다.

> docker pull <repo>[:tag]

B, 모든 미러 목록 미러는 기본 정보를 얻을 수 있습니다.

> docker images
REPOSITORY                   TAG             IMAGE ID          CREATED        SIZE
redis                       latest          bfcb1f6df2db      3 weeks ago     107MB
registry                      2             d1fd7d86a825      4 months ago    33.3MB
hyper/docker-registry-web   latest          0db5683824d8      19 months ago   599MB

C, 미러를 제거 . 그것은 거울 ID, 이름 또는 이미지 저장소로 삭제 될 수 있습니다.

> docker rmi <IMAGE ID>/<repo>

D, 미러 마킹 . 이 동작은 유사 힘내 마킹, 미러링 된 버전을 사용할 등가 릴리스 수행 될 수있다.

> docker tag <repo> <new_repo>[:tag]

전자, 미러 푸시 . 힘내 연산 필드를 밀어 배울 수와 동일한, 패키지 된 화상 (즉 등록 도커) 원격 저장소로 푸시.

> docker push <new_repo>[:tag]

단지 간단한에서 이상 다섯 개 명령은이 글의 초점이 아니다. 명령을 미러링 더, 당신은 자신에 액세스 할 수 있습니다.

다음 작업을하기 전에, 독자 첫째 레지스트리 풀다운 미러.

> docker pull registry:2
2: Pulling from library/registry
81033e7c1d6a: Pull complete 
b235084c2315: Pull complete 
c692f3a6894b: Pull complete 
ba2177f3a70e: Pull complete 
a8d793620947: Pull complete 
Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
Status: Downloaded newer image for registry:2

이 프로세스는 네트워크 조건에 따라, 독자가 참 몇 분이 걸린다.

참고 : 저자는, 시간을 끌어 지정된 TAG, 레지스트리의 V1 버전에 대한 레지스트리의 사용 V2 버전이며, 독자 상관, 기본적으로 제거 할 필요가 없다.

둘째, 미리보기

실행 도커 레지스트리, 당신은이 섹션을 읽을 수있는 효과를 볼 열망 독자하십시오.

다음 명령을 실행합니다 :

> docker run -d \
 -p 5000:5000 \
 -v /usr/local/registry:/var/lib/registry \
 --restart=always \
 --name registry \
 registry:2

이것은 일반적인 실행 명령은, 우연이, 다음, 레지스트리 포트는 5000 년에 시작되지 않습니다.

대조를 들어, 리더 (작기 때문에 부피) 비지 미러를 당길 수 실험을 수행 하였다.

> docker pull busybox

최신 비지 박스 미러를 당기 후 레지스트리에 릴리스에 대한 준비, 자신의 마킹 제공합니다.

> docker tag busybox localhost:5000/bosybox:v1.0

마지막으로 레지스트리에 밀었다.

> docker push localhost:5000/bosybox:v1.0

이 경우, 레지스트리는 비지 박스해야합니다 : V1.0 거울 및 도커 허브가 될 수 자체 내장 된 레지스트리를 통해, 상단을 끌어에 당신은 갈 수 없습니다.

> docker pull localhost:5000/bosybox:v1.0

원격 저장소 미러링을 확인하려면 다음 명령을 실행할 수 있습니다 :

> curl http://localhost:5000/v2/_catalog

참조는 전체 그림은 위의 명령, 우리는 중요한 결론을 도출 할 수 있습니다 참조 반영 :

레지스트리에 대한 액세스는 REST API를 일련의를 통해 이루어집니다.

지금까지, 우리는 "반"의 도커 레지스트리를 구축, 그는 다른 호스트에서 미러를 밀어하려고하면 레지스트리 만,이 시스템에서 제대로 작동 할 수 있기 때문에 "반"이라고, 결과는 실패입니다.

당신은 외부에서 접근 달성하고자하는 경우에는 사용해야 CA의 보안 인증서를 .

셋째, SSL 인증서를 기반으로 업데이트 레지스트리

이 섹션의 작업을하기 전에, 독자의 확인이 문서의 시작 부분에 나열된 조건을 충족합니다.

iwendao.vip을하고, 두 번째 수준 도메인을 매핑 : 나는 도메인 이름에 적용 registry.iwendao.vip, 특히이 두 번째 레벨 도메인 애플리케이션 CA의 인증서를 기반으로 다음 방문 도커 레지스트리로 설계합니다.

xxxxxx.pem, xxxxxx.key : 당연히 다음, 알리 클라우드 애플리케이션 인증서가없는 두 개의 문서가 인증서 다운로드 후, 가방을 압축, 시만텍가 발급됩니다.

/ usr / 지방 / 인증서 표시를 : 그것은 그 디렉토리에 저장된 가정, FTP 도구를 통해 호스트에 업로드은 server.key,의 server.pem로 이름을 바 꾸었습니다.

> ll /usr/local/certs
- rw-r--r-- 1 root root 1678 May 28 13:42 server.key
- rw-r--r-- 1 root root 3662 May 28 13:42 server.pem

문제가 중간 인증서이기 때문에, 더 CRT 파일을 찾을 수 없습니다, 당신이 얻을 수있는 다음 명령을 사용할 수 있습니다 :

> cat server.pem > server.crt

직접 콘텐츠 파일을 입력 파일과 PEM 브라운관는 server.crt 파일을 생성.

이 시점에서, 도메인 이름과 인증서가 준비가되어 있습니다.

당신의 nginx 프록시를 사용하려는 경우, nginx.conf 파일을 변경해야, 다음과 같은 구성 요소의 저자이다 :

user  root root;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout 60;
    gzip  on;
    server {
        listen 443;
        server_name i-wendao;
        ssl on;
        root html;
        index index.html index.htm;
        ssl_certificate   /usr/local/certs/server.pem;
        ssl_certificate_key  /usr/local/certs/server.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location ~  {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass https://registry;
        }
    }
    upstream registry {
        server 127.0.0.1:5000;
    }
}

구성 파일에 Nginx.conf, 당신은이 개 장소에주의를 지불해야합니다 :

하나는의 nginx에 SSL을 열고, PEM하기 전에 파일을 다운로드하고 키는 공식, 효과적인 프로 테스트에 의해 주어진 알리 구름의 예 인 구성해야합니다;

레지스트리에 액세스 REST API를 통해 수행되므로 2,뿐만 아니라 proxy_pass 구성은 HTTPS 프로토콜 구성 위치 노드를 액세스 // 레지스트리 : HTTPS 구성된 경우 HTTP : // 레지스트리 , 도커 번 레지스트리 SSL 사용 후, 액세스는 사실이 아니다.

호스트 구성은 도커 컨테이너의 다음 구성이 완료되었습니다.

도커 레지스트리 서버 배포의 공식은 두 가지 방법을했다 :

첫째, 몇 가지 매개 변수의 경우는 고정 표시기 실행 명령을 직접 지정할 수 있습니다;

YAML에 의한 또 다른 구성 파일은 한 번에 다수의 파라미터를 구성 할 수 있습니다.

이 섹션에서, 저자가 배치 된 제를 사용하는 최종의 부착 배치는 제 2 실시 형태의 텍스트에 발견 될 수있다.

> docker run -d \
  -p 5000:5000 \
  -v /usr/local/registry:/var/lib/registry \
  -v /usr/local/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
  --restart=always \
  --name registry \
  registry:2

당신의 nginx 리더를 설치하지 않으면이 명령을 실행할 수 있습니다 :

> docker run -d \
  -p 443:443 \
  -v /usr/local/registry:/var/lib/registry \
  -v /usr/local/certs:/certs \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
  --restart=always \
  --name registry \
  registry:2

당신은 CRT에 키 두 개의 인증서 파일을 사용할 때 도커 레지스트리 서버가 SSL을 사용하는 볼 수 있습니다.

다음으로, 우리는 약간의 실험.

> docker tag busybox registry.iwendao.vip/bosybox:v1.0

마지막으로 레지스트리에 밀었다.

> docker push registry.iwendao.vip/bosybox:v1.0

거울 원격 저장소를 볼 수 있습니다.

> curl https://registry.iwendao.vip/v2/_catalog

다른 호스트에서, 위의 단계를 반복, 여전히 설명이 성공적으로 설정되었습니다 성공할 수 있습니다.

네, 인증 축복

레지스트리 서버에 구축함으로써, 우리는 명확하게 보안 통제를위한 부두 노동자가 전체 네트워크 HTTPS의 맥락에서 단지 적절한 방법입니다 충분한주의를 가지고 느낄 수 있습니다.

플러스 로그인 검증 메커니즘 -이 섹션은 더 철저하게 부두 노동자의 보안을 목표로 고도의 지식이다.

그것은 PW 때문에 분명히, 그것은 모든 사람은 작업에 대한 로그인 사용자와 암호 덕분에 미러링 제출할 수 있다는 것을 의미한다.

물론, 로그인 검증 메커니즘 HTTPS 프로토콜이 있음을, 그렇지 않으면 사용자 이름과 암호는 일반 텍스트로 전송됩니다.

도커 인증 메커니즘은 또한, 당신은 레지스트리 직전에 확인 가로 채기 위해 (예 :의 nginx 등) 프록시를 사용하여 달성하기 위해 많은 계획을 가지고, 달성하기 어려운,에 로그온 할 수있는 권한을 부여 사용자를 안내하는 일부 하이 엔드 토큰 서버가 있습니다.

본 논문에서는 가장 간단한 htpasswd가 로그인 검증 메커니즘을 달성한다. htpasswd가 도입에 대한 자세한이 기사, 독자의 자체 검사의 범위가 아닙니다.

이 명령 도구가 호스트에 설치되어 있지 않은 경우, 다음과 같은 명령을 실행할 수 있습니다 :

> yum install httpd-tools

아파치 htpasswd가이 자회사 도구 명령이기 때문에, 아파치 경우,이 명령을 사용할 수 있습니다 설치 될 예정이다.

독자는 설치하지 않고, 직접 레지스트리 거울, 내장 된 아파치를 사용 할 수 있습니다.

암호 파일은 / usr / 지방 / 인증 디렉토리에 저장되어 있다고 가정하면, 다음 명령을 실행

> htpasswd -Bbn admin 123456 > /usr/local/auth/passwd

다음과 같이 내장 된 아파치 레지스트리를 미러링 :

> docker run --entrypoint htpasswd registry:2 -Bbn admin 123456 > /usr/local/auth/passwd

두 가지 방법이 동일한 목적을 달성하려면 : / usr / 지방 / 인증 / passwd 파일에 사용자 이름과 암호를 생성 할 수 있습니다.

명령 관리자 사용자 이름, 123456 암호입니다.

보기의 passwd 파일 내용 :

> cat /usr/local/auth/passwd
admin:$2y$05$/2H8DTcY.1JROHm0MnnK8.UulmbSclib63qTe8FGyWnnE9XWBz3cy

동일한 순서이지만, 그러나 다른 호스트에서, 상기 생성 된 결과와 동일하지 않다. 따라서, 호스트 (A)에서 생성 된 암호 파일은 호스트 B의 인증을 위해 사용될 수 없다

다음 단계는 레지스트리 컨테이너를 시작하는 것입니다 :

> docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /usr/local/auth:/auth \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/passwd \
  -v /usr/local/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
  registry:2

당신이하려고하면 성공적인 시작 후, 직접 원격 저장소를 거울을 볼 수있는 것입니다 메시지가 표시되지 인증, 다음과 같이 :

> curl https://registry.iwendao.vip/v2/_catalog
{
    "errors": [{
        "code": "UNAUTHORIZED",
        "message": "authentication required",
        "detail": [{
            "Type": "registry",
            "Class": "",
            "Name": "catalog",
            "Action": "*"
        }]
    }]
}

풀 포함, 푸시 작업도에 의해 제한됩니다. 당신이 전에 따라서, 당신은 로그인해야합니다.

> docker login https://registry.iwendao.vip

이 로그인 이후의 과정에 발표되었다.

> docker logout https://registry.iwendao.vip

등록 용 五 웹 UI

우리는 레지스트리 서버 후 좋은 빌드 할 때, 우리 미러링 관리를 시작하는 것을 의미합니다. 이번에는 사용자에게 도움이되는 시각적 이미지 관리 툴이 없다는 것을 발견 할 것이다.

오픈 소스 웹 UI 관리 도구의 많은 이미 있습니다 :

1 도커-레지스트리 프론트 엔드 . (5 월 2018 년), 그 주요 기능 지금까지 기능, GitHub의에 오픈 소스, 1K + 별을 삭제 목록보기,보기 탭, 아직 열려있는 이미지를 반영하는 것입니다.

2, 부두 노동자 - 레지스트리 - 웹 . 비교 고정 표시기 - 레지스트리 프론트 엔드 미러 이미지 삭제 기능 제공 프로젝트뿐만 아니라 시스템 액세스의 역할, 기능은 더 GitHub의에 오픈 소스, 300 개 이상의 별, 향상되었습니다.

3, 목장 . 전체 도커 컨테이너 관리 능력이에 대해 플랫폼 유사한는 Kubernetes 위치, 이미지 관리, 그냥 그렇게 간단하지 않다.

4, 조선소 . 불행하게도, 저자는 GitHub의에 별에서, 과거의 영광을 쉽게 볼 수 유지에는 에너지가 없습니다.

UI가 그들을 반복하지 않습니다 WEB에 설치 및 배포, 해당 문서가 있습니다. 이미지 관리에 대한 특별한 요구 사항, 당신은 웹 UI 수 없습니다, 또는 처음 두 중 하나를 사용하십시오.

VI 요약

이 문서에서는, 도커 레지스트리 PW가 내장 된 과정을 자세히 학습 블로그의 모든 유형의 데이터를 요약, 공식 웹 사이트 독자가 성공적으로 도커 레지스트리 PW를 구축 할 수 있도록합니다.


첨부 파일 :

1, YAML 파일은 레지스트리 서버를 시작합니다

구성 파일 저장 경로가 있다고 가정 : /usr/local/registry/config.yml를

다음과 같이 내용을 편집 :

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
    maxthreads: 100
  delete:
    enabled: true
http:
  addr: 0.0.0.0:5000
  host: https://registry.iwendao.vip
  secret: yoogurt-taxi-123!@#
  headers:
    X-Content-Type-Options: [nosniff]
  tls:
    certificate: /certs/214709594090104.crt
    key: /certs/214709594090104.key
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

더 많은 구성 항목, 당신은에 액세스 할 수 있습니다 구성 레지스트리를 .

구성 파일의 구성 항목은 -e 매개 변수에서 이전에 환경 변수에 매핑 할 수 규칙은 다음과 같습니다

1, 변수 이름은 대문자로 구성;

2 고정 프리픽스 플러스 REGISTRY;

3, YAML 구성 항목에 콜론 (:) 밑줄 (_)되었다.

예를 들면 :

TLS : REGISTRY_HTTP_TLS_CERTIFICATE는 HTTP에 해당 인증서 구성 항목을;

htpasswd가 : 경로 구성 항목 REGISTRY_AUTH_HTPASSWD_PATH, 그것은 인증을 해당합니다.

그것은 주목할 가치가 그 레지스트리, 당신은 디렉토리를 마운트 할 수있는 -v 인수를 지정해야 할 때 거울을 시작한다는 것을 의미 컨테이너에 관련된 모든 구성 파일의 경로입니다.

구성 파일을 저장 한 후, 당신은 용기를 시작할 수 있습니다 :

> docker run -d -p 5000:5000 --restart=always --name registry \
             -v /usr/local/certs:/certs
             -v /usr/local/registry/config.yml:/etc/docker/registry/config.yml \
             registry:2

도커 책의 2, 소개

  • "이 첫 번째 도커 책 (개정판),"잘 자격이 고정 표시기 책을 깨달음. 처음 다섯 장을 볼 수 있습니다 제로 기반 초보자 참고 도서로 사용할 수 있습니다, 기본에, 도커의 관련 원칙을 사용을 파악 초점을 맞 춥니 다. 이 책을 읽고 나면, 그것을 학습을 계속하기 위해 부두 노동자에 대한 관심을 구축 할 수 있습니다, 항목을 연습 동시에 추천 내용을 따릅니다.
  • "도커 컨테이너와 컨테이너 클라우드 (제 2 판)은"지식 컨텐츠를 전진했다. 지식의 기초의 첫 번째 부분은, 신속 이상 갈 수 있습니다. 이 책은 모든 측면의 반복 설명했다 클라우드 컨테이너의 개념, 매우 흥미로운, 그것을 흡수 할 수있다. 그런 다음 컨테이너 배열이 콘텐츠를 배포, 연습, 훈련의 느낌과 결합 될 수있다.
  • 잘 자격이는 Kubernetes 항목 책 "확실한 가이드 (제 2 판)를는 Kubernetes". 은 "도커 컨테이너와 컨테이너 클라우드 (제 2 판)"라고는 Kubernetes 섹션을 읽은 후, 다시 책을 읽고, 그것은 쉽게 될 것입니다.

우리를 따르라

추천

출처blog.csdn.net/egworkspace/article/details/80518647