GNU/Linux >> Linux の 問題 >  >> Ubuntu

プライベートDockerレジストリを設定して使用する方法

はじめに

Dockerプラットフォームを使用してスムーズなCI/CD開発を保証したい場合は、プライベートDockerレジストリを設定することを検討してください。配信を高速化するだけでなく、リソースを分散し、コンテナ間でDockerイメージを共有する実用的な方法でもあります。

このチュートリアルでは、プライベートDockerレジストリを設定し、外部からアクセスできるように構成する方法を学びます。

前提条件

  • sudoを使用したユーザーアカウントへのアクセス またはルート 特権
  • クライアントサーバー
  • プライベートDockerレジストリ用のサーバー
  • ドッカー およびDocker–Compose 両方のサーバーで
  • Nginx プライベートDockerレジストリサーバー上

プライベートDockerレジストリとは

Dockerレジストリ はサーバー側のアプリケーションであり、DockerのPlatform-as-a-Service製品の一部です。これにより、すべてのDockerイメージを1つの集中管理された場所にローカルに保存できます。

プライベートレジストリを設定するときは、インターネット経由でDockerHubと通信するサーバーを割り当てます。サーバーの役割は、イメージをプルおよびプッシュし、ローカルに保存して、他のDockerホスト間で共有することです。

外部からアクセス可能なレジストリを実行することにより、貴重なリソースを節約し、プロセスをスピードアップできます。このソフトウェアを使用すると、Docker Hubに接続しなくてもイメージをプルできるため、帯域幅を節約し、潜在的なオンラインの脅威からシステムを保護できます。

Dockerホストは、安全な接続を介してローカルリポジトリにアクセスし、ローカルレジストリからイメージをコピーして、独自のコンテナを構築できます。

始める前に

前提条件のセクションに記載されているように、このガイドでは、すべてのサーバーにDockerとDocker-Composeが既にインストールされていることを前提としています。

必要なソフトウェアがあることを確認するには、次のコマンドを使用してリリースバージョンを確認できます。

docker version
docker-compose version

確認したいもう1つのことは、Dockerサービスが開始され、起動時に有効になるように設定されていることです。

sudo systemctl start docker
sudo systemctl enable docker

プライベートDockerレジストリのインストールと構成

ステップ1:レジストリディレクトリを作成する

プライベートレジストリをホストするサーバーの構成を開始します。まず、必要なすべての構成ファイルを保存する新しいディレクトリを作成します。

1.次のコマンドは、registryというラベルの付いた新しいプロジェクトディレクトリを作成します および2つのサブディレクトリ-nginx およびauth

mkdir -p registry/{nginx, auth}

2.registryに移動します nginx内に2つの新しいディレクトリを作成します

cd registry/
mkdir -p nginx/{conf.d/,ssl}

3.次のように入力して、新しく作成されたディレクトリの階層を確認します。

tree

ステップ2:Dockerを作成する-スクリプトを作成してサービスを定義する

次に、新しい docker-compose.ymlを作成して構成する必要があります 脚本。このスクリプトは、Docker-Composeのバージョンと、プライベートレジストリを設定するために必要なサービスを定義します。

1.registryで新しいファイルを作成します ディレクトリ、お好みのテキストエディタ付き:

nano docker-compose.yml

2.この構成ファイルで定義する必要があることがいくつかあるので、注意深くフォローし、コンテンツの各セクションを注意深く追加してください。

version: '3'
services:
#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet
#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet
#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

3.ファイルを保存して閉じます。

構成の説明:

まず、使用するDocker-Composeのバージョンを定義します。この例では、 version: '3' 。次に、 #Registryから始めて、Dockerレジストリのすべてのコンポーネントの定義に進みます。 サービス。

Docker Registryは、基本的にレジストリイメージを実行するコンテナであるため、イメージは registry:2として定義されます。

restart: alwaysを追加する lineは、システムを起動するとすぐにDockerレジストリをサービスとして開始することを保証します。

ポートの決定5000:5000 ホストと実行中のコンテナーが定義されたポート番号を介して通信することをDockerに指示します。

このサービスは、Dockerボリュームの registrydataをマウントします およびローカルディレクトリauth 、認証ファイル registry.passwd

次の要素は#Nginx Serviceです 。構成の概要は、ポート 80:80で実行されるサービスです。 (HTTPS)および 443:443 (HTTPS)。仮想構成用のローカルディレクトリをマウントします( conf.d )およびSSL証明書( ssl

最後に、 mynetを設定します ブリッジドライバーとregistrydata カスタムネットワークのパラメータとしてローカルドライバを使用します。

ステップ3:Nginxポートフォワーディングを設定する

次のステップは、Nginx仮想ホストを構成し、Nginxサービス用に構成することです。

1. nginx/conf.d/に移動します 前の手順で作成したディレクトリ:

cd nginx/conf.d/

2. registry.confという名前の新しい仮想ホストファイルを作成します

nano registry.conf

3.次のコンテンツを追加します:

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.example-server.com;
    return 301 https://registry.example-server.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.example-server.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        # Do not allow connections from docker 1.5 and earlier
        # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
        if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" )  {
            return 404;
        }

        proxy_pass                          http://docker-registry;
        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;
    }

}

4.ファイルを保存して、ターミナルシェルに戻ります。

ステップ4:Nginxファイルのアップロードサイズを増やす

デフォルトでは、Nginxはファイルのアップロードサイズを 1MBに制限しています 。多くのDockerイメージがこの数を超えるため、ベストプラクティスはNginxの最大ファイルサイズを増やすことです。 max_body_sizeを設定して、ファイルサイズが大きい画像をアップロードできることを確認してください 2GB

1.次のコマンドを使用して追加の構成ファイルを作成します:

nano additional.conf

2.ファイルに次の行を追加します。

client_max_body_size 2G;

3.ファイルを保存して閉じます。

ステップ5:SSL証明書と基本認証を構成する

1.ドメインのSSL証明書ファイルをsslにコピーする必要があります ディレクトリ。これを行うには、次のコマンドを実行します。

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

2.次に、 authに移動します ディレクトリ:

cd auth

3.そして、 registry.passwdという名前の新しいパスワードファイルをリクエストします ユーザー向け:

htpasswd -Bc registry.passwd example

4.強力なパスワードを入力し、再入力して確認します。これで、ユーザーのパスワードが追加されました。

ステップ6:ルートCA証明書を追加する

次に、ルートCA証明書をDockerと作業中のシステムに追加する必要があります。

1. .crtをエクスポートします 次のように入力して、OpenSSLでファイルを作成します:

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

2.ルート証明書をDocker証明書用の新しいディレクトリにコピーします。

mkdir -p /etc/docker/certs.d/registry.example-server.com/
cp rootCA.crt /etc/docker/certs.d/example-server.com/

3.次に、同じ証明書を /usr/share/ca-certificate/extraという名前で別の新しいディレクトリにコピーします。

mkdir -p .usr.share.ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

4.新しく作成されたca-certificateを再構成します 次のように入力してパッケージ化します:

dpkg-reconfigure ca-certificates

5.最後に、Dockerサービスを再起動します。

systemctl restart docker

ステップ7:Dockerレジストリを実行する

すべての設定と準備が整ったら、Docker-Composeを使用してDockerレジストリコンテナを構築できます:

docker-compose up -d

レジストリとNginxサービスが実行されているかどうかを確認します:

docker-compose ps
netstat -plntu

出力には、サービスとそれに割り当てられたポートが表示されます。

DockerHubからプライベートレジストリにイメージをプルする

1. Docker Hubからプライベートレジストリにイメージをローカルに保存するには、 docker pullを使用します コマンド:

docker pull [docker_image]

2.画像​​にタグを追加して、プライベートレジストリ用にラベルを付けます。

docker image tag [docker_image] registry.example-server.com/[new_image_name]

3.ローカルに保存されているすべてのイメージを一覧表示するようにシステムに指示することで、Dockerイメージがローカルで利用可能かどうかを確認できます。

docker images

Dockerイメージをプライベートレジストリにプッシュする方法

1. DockerホストからプライベートDockerレジストリサーバーにイメージをプッシュするには、最初に次のコマンドを使用してレジストリにログインする必要があります。

docker login https://registry.example-server.com/v2/

2.ユーザー名を入力します およびパスワード 仮想ホスト用に定義しました。

3.これで、次のコマンドを使用してイメージをプライベートレジストリにプッシュできます:

docker push registry.example-server.com/[new_image_name]

4.プライベートDockerレジストリに保存されているイメージのリストを参照してください:

http -a example https://registry.example-server.com/v2/_catalog

Ubuntu
  1. DockerのメモリとCPU使用率の制限を設定する方法

  2. RockyLinux8でプライベートDockerレジストリをセットアップする方法

  3. Ubuntu20.04にDockerをインストールして使用する方法

  1. NFS Dockerボリューム:作成および使用方法

  2. Ubuntu20.04にDockerをインストールして使用する方法

  3. Ubuntu18.04にDockerをインストールして使用する方法

  1. Ubuntu18.04にDockerComposeをインストールして使用する方法

  2. CentOS7にDockerをインストールして使用する方法

  3. CentOS7にDockerComposeをインストールして使用する方法