Docker 레지스트리를 자체 호스팅하는 방법

post는 원래 RAZINJ Dev에 게시되었습니다.



Docker RegistryDocker Hub에서 사용하는 Docker 이미지의 레지스트리이지만 Docker Hub의 문제는 이미지에 대한 개인 리포지토리가 하나만 있고 여러 개의 개인 이미지가 필요한 경우 자체 호스팅이 우리의 Docker 레지스트리라는 것입니다. 기존 서버가 최선의 선택이며, 이 게시물에서는 그렇게 할 것입니다.

목차


  • Requirements
  • Notes in self-hosting a registry
  • Install with Docker Compose
  • Use NGINX as a proxy
  • Conclusion
  • Sources

  • 요구 사항


  • Docker
  • Docker Compose
  • Docker 및 Docker Compose에 대한 기본 이해
  • NGINX

  • 레지스트리 자체 호스팅에 대한 참고 사항



    프로덕션에서 자신의 Docker 레지스트리를 자체 호스팅하는 방법에 대해 알고 싶은 두 가지 참고 사항이 있습니다.
  • 프로덕션 환경에서 Docker Registry를 사용하려면 보안 연결(SSL/TLS)이 필요합니다.
  • 제어 및 보안 강화를 위해 NGINX 웹 서버를 통해 레지스트리를 프록시하는 것이 가장 좋습니다.

  • 메모를 한 후 레지스트리 설치를 시작할 수 있습니다.

    Docker Compose로 설치



    사용 편의성을 위해 Docker Compose를 사용하여 레지스트리를 설치합니다.
    docker-compose.yml 파일을 생성합니다.

    touch docker-compose.yml
    


    다음 콘텐츠를 파일에 붙여넣습니다.

    version: '3'
    
    services:
      app:
        image: registry:2
        container_name: docker-registry
        restart: unless-stopped
        environment:
          REGISTRY_AUTH: htpasswd
          REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
          REGISTRY_AUTH_HTPASSWD_REALM: Local Registry Realm
        ports:
          - 127.0.0.1:8000:5000
        volumes:
          - ./data:/var/lib/registry
          - ./auth:/auth:ro
    


    이 파일에서는 데이터 및 인증을 위한 로컬 포트8000와 로컬 볼륨을 사용하여 레지스트리를 설명합니다(아래에서 설명함).

    인증 방법을 htpasswd(기본 인증)로 지정했으므로 다음 명령을 사용하여 htpasswd 파일을 생성해야 합니다.

    docker run --entrypoint htpasswd httpd:2 -Bbn my_registry_user my_registry_password > htpasswd
    


    그러면 다음과 유사한 내용을 포함하는 htpasswd라는 파일이 생성됩니다.

    # cat htpasswd
    my_registry_user:$2y$05$mexS70Ju7VkXag5X7EzDI.Mrt5JZPU5K3mh1oPL0oydhTj2HMpUk.
    


    이제 docker-compose.yml 파일로 이 작업을 수행하려면 다음과 같이 auth 디렉토리를 만들고 파일을 이동해야 합니다.

    mkdir auth && mv htpasswd auth
    


    파일 트리는 다음과 같아야 합니다.



    이제 설치 준비가 완료되었습니다. 이제 레지스트리를 실행해 보겠습니다.

    docker-compose up -d
    


    오류가 있는지 로그를 확인하십시오.

    docker-compose logs -f
    


    모두 잘 되었다면 다음 단계로 넘어갑니다.

    NGINX를 프록시로 사용



    레지스트리를 인터넷에 노출하기 위해 NGINX를 프록시 웹 서버로 사용합니다.

    특정 도메인 또는 하위 도메인의 경우 다음 구성을 사용할 수 있습니다.

    upstream docker_registry_app {
        server 127.0.0.1:8000;
    }
    
    server {
        listen 443 ssl http2;
        server_name sub.domain.com;
    
        # ssl
        ssl_certificate /etc/nginx/certificates/domain.com.pem;
        ssl_certificate_key /etc/nginx/certificates/domain.com.key;
    
        # logging
        access_log /var/log/nginx/sub.domain.com.access.log;
        error_log /var/log/nginx/sub.domain.com.error.log warn;
    
        client_max_body_size 0;
    
        # reverse proxy
        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
    
            proxy_read_timeout 900;
    
            proxy_pass http://docker_registry_app;
        }
    }
    
    # https www redirect
    server {
        listen 443 ssl;
        server_name www.sub.domain.com;
    
        # ssl
        ssl_certificate /etc/nginx/certificates/domain.com.pem;
        ssl_certificate_key /etc/nginx/certificates/domain.com.key;
    
        return 301 https://sub.domain.com$request_uri;
    }
    
    # http and www redirect
    server {
        listen 80;
        server_name sub.domain.com www.sub.domain.com;
    
        return 301 https://sub.domain.com$request_uri;
    }
    

    client_max_body_size 0;는 신체 크기에 제한이 없음을 의미하므로 필요에 따라 자유롭게 값을 조정하십시오.

    NGINX 구성을 추가하거나 변경한 후 다음으로 다시 시작합니다.

    sudo nginx -t && sudo nginx -s reload
    


    이제 브라우저에서 다음 URL을 방문하여 모든 것이 제대로 작동하는지 테스트할 수 있습니다.

    https://sub.domain.com/v2/_catalog
    


    기본 인증 자격 증명(이전에 htpassed 파일을 생성하는 데 사용한 사용자 이름과 암호)을 입력하라는 메시지가 표시됩니다.

    결론



    이와 같이 프로덕션용으로 준비된 개인 Docker 레지스트리를 성공적으로 자체 호스팅하고 있다고 말할 수 있습니다.

    출처


  • 도커 레지스트리website .
  • 도커 레지스트리HTTP API specs .



  • 언제나 그렇듯이, 여러분이 무언가를 배웠기를 바랍니다.

    유용한 정보를 찾으셨나요? 친구들과 자유롭게 공유하십시오.

    here의 뉴스레터에 가입하여 새 게시물과 업데이트를 알려주세요.

    게시물이 좋아요? coffee ❤️ 구매를 고려하십시오.

    좋은 웹페이지 즐겨찾기