Dockerレジストリを自己ホストする方法


このpost 当初はRAZINJ Dev

Docker Registry で使用されるDocker画像のレジストリですDocker Hub , しかし、Docker Hubでの問題は、我々が我々のイメージのための1つのプライベートリポジトリだけを得るということです、そして、我々が複数の個人的なイメージ自己ホスティングを必要とする場合、我々の既存のサーバーのDockerレジストリは最高のオプションです、そして、このポストでは、我々はちょうどそれをしています.

目次

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

  • Docker
  • Docker Compose
  • Docker and Docker Composmentの基礎理解
  • NGINX
  • 登録の自己ホスティングのメモ


    あなた自身のDockerレジストリをあなたが知っていたいと思っている生産において自己ホスティングについての2つのメモがあります.
  • 生産環境でDockerレジストリを使用すると、安全な接続(SSL/TLS)が必要です.
  • それ以上の制御とセキュリティのためのNGinx Webサーバーを介してプロキシをプロキシに最適です.
  • メモを取った後、我々はレジストリをインストールを開始することができます.

    Dockerでインストールする


    使いやすさのために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 そして、我々のデータと認証のためのローカルボリューム(我々は、下記に入ります).
    Authメソッドをhtpasswd (基本的なauth )生成する必要があります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
    
    あなたの基本的なAuth資格情報を入力するように求められますhtpassed ファイル名).

    結論


    このように、私たちは自己生産のために私達自身の個人的なDockerのレジストリを自己完結していると言うことができます.

    ソース

  • Dockerレジストリwebsite .
  • DockerレジストリHTTP API specs .
  • いつものように、あなたは何かを学びました.
    この便利な発見?お友達とそれを共有すること自由に感じなさい.
    ニュースレターに加わってくださいhere 新しい投稿と更新を通知します.
    ポストのように?私たちを買うcoffee ❤️.