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

Ubuntu18.04LTSでプライベートDockerレジストリを設定する方法

Docker Registryまたは「Registry」は、Dockerイメージの保存と配布に使用できる、オープンソースで拡張性の高いサーバー側アプリケーションです。これは、DockerHubの背後にあるサーバー側のアプリケーションでした。ほとんどのユースケースでは、アプリケーション開発にCI / CDシステムを実装する場合、Dockerレジストリは優れたソリューションです。プライベートDockerレジストリは、アプリケーションのすべてのカスタムDockerイメージを一元化することで、開発および本番サイクルのパフォーマンスを向上させます。

このチュートリアルでは、Ubuntu18.04サーバーにプライベートDockerレジストリをインストールして構成する方法を説明します。 Nginxウェブサーバーを使用し、ユーザー名とパスワードでレジストリを保護します(基本認証)。

前提条件

  • Ubuntu18.04サーバー
  • root権限

何をしますか?

  1. 依存関係のインストール
  2. DockerとDocker-composeをインストールします
  3. プライベートDockerレジストリを設定する
  4. テスト
ステップ1-パッケージの依存関係をインストールする

まず、プライベートDockerレジストリをデプロイするためのパッケージの依存関係をいくつかインストールします。

次のコマンドを使用して、パッケージの依存関係をインストールします。

sudo apt install -y gnupg2 pass apache2-utils httpie

gnupg2およびpassパッケージは、パスワード認証をDockerレジストリに保存するために使用されます。また、apache2-utilsは基本認証の生成に使用され、httpieはテストに使用されます。

ステップ2-DockerとDocker-composeをインストールします

次に、公式のUbuntuリポジトリからdockerとdocker-composeをインストールします。

次のコマンドを実行して、DockerとDocker-composeをインストールします。

sudo apt install -y docker.io docker-compose -y

インストールが完了したら、Dockerサービスを開始し、起動時間に追加します。

sudo systemctl start docker
sudo systemctl enable docker

Dockerが稼働しており、Docker-composeがインストールされています。以下のコマンドを使用して確認してください。

docker version
docker-compose version

また、システムにインストールされているDockerとDocker-composeのバージョンが表示されます。

ステップ3-プライベートDockerレジストリをセットアップする

このステップでは、いくつかのディレクトリ環境を作成してDockerレジストリ環境を構成し、docker-compose.yml、nginx仮想ホスト、追加の構成などを含むいくつかの構成を作成します。

-プロジェクトディレクトリを作成する

「registry」というプロジェクトの新しいディレクトリを作成し、その中に「nginx」および「auth」ディレクトリを作成します。

mkdir -p registry/{nginx,auth}

その後、ディレクトリ「registry」に移動し、「nginx」内に新しいディレクトリを再度作成します。

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

その結果、プロジェクトディレクトリは次のようになります。

tree

-Dockerの作成-スクリプトの作成

次に、Dockerレジストリをデプロイするための新しいdocker-compose.ymlスクリプトを作成します。

'registry'ディレクトリに移動し、新しい構成ファイル'docker-compose.yml'を作成します。

cd registry/
vim docker-compose.yml

まず、使用する作成バージョンとサービスを定義します。

version: '3'
services:

その後、「レジストリ」という名前の最初のサービスを追加します。 Docker Registryサービスは、docker team'registry:2によって提供されるdockerイメージを使用します。 Dockerボリューム「registrydata」と基本認証ファイル「registry.passwd」を含む「auth」という名前のローカルディレクトリをマウントします。そして最後に、「mynet」という名前のカスタムDockerイメージで実行され、コンテナとホストの両方でポート5000を公開します。

#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

次に、HTTPおよびHTTPSポートを実行し、仮想ホスト構成用にローカルディレクトリ「conf.d」をマウントし、ssl証明書用に「ssl」をマウントする「nginx」サービスの構成。

#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

最後に、カスタムネットワーク「mynet」をブリッジドライバーで定義し、「registrydata」をローカルドライバーで定義します。

#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

構成を保存して閉じます。

完全な構成は次のとおりです。

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

-Nginx仮想ホストを構成する

docker-composeスクリプトを作成した後、nginxサービスの仮想ホストと追加の構成を作成します。

'nginx / conf.d /'ディレクトリに移動し、'registry.conf'という名前の新しい仮想ホストファイルを作成します。

cd nginx/conf.d/
vim registry.conf

次の構成を貼り付けます。

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.hakase-labs.io;
    return 301 https://registry.hakase-labs.io$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.hakase-labs.io;

    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;
    }

}

保存して閉じます。

次に、nginxのmax_body_sizeを増やすための追加の構成を作成します。これにより、最大サイズ2GBのDockerイメージをアップロードできるようになります。

vim additional.conf

以下に構成を貼り付けます。

client_max_body_size 2G;

保存して閉じます。

-SSL証明書と基本認証を構成する

ドメインのSSL証明書ファイルを「ssl」ディレクトリにコピーします。

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

次に、「auth」ディレクトリに移動して、新しいパスワードファイル「registry.passwd」を生成します。

cd auth/

ユーザーhakaseの新しいパスワードを生成します。

htpasswd -Bc registry.passwd hakase
TYPE THE STRONG PASSWORD

そして、プライベートDockerレジストリをデプロイするための環境設定が完了しました。

以下は、環境ファイルとディレクトリのスクリーンショットです。

tree

-Dockerレジストリを実行します

以下のdocker-composeコマンドを使用してDockerレジストリを実行します。

docker-compose up -d

そして、以下のような結果が得られます。

その後、レジストリとnginxサービスが稼働していることを確認します。次のコマンドを使用して確認してください。

docker-compose ps
netstat -plntu

また、「レジストリ」サービスがポート「5000」で実行されていることが示され、「nginx」サービスは以下のようにHTTPポートとHTTPSポートを公開します。

ステップ4-テスト

プライベートDockerレジストリをテストする前に、ルートCA証明書をDocker自体とシステムに追加する必要があります。

pemファイル証明書を使用している場合は、OpenSSLコマンドを使用して.crtファイルにエクスポートします。

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

次に、Docker証明書用の新しいディレクトリを作成し、ルートCA証明書をそのディレクトリにコピーします。

mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/

次に、新しいディレクトリ'/ usr / share / ca-certificate / extra'を作成し、ルートCA証明書をそのディレクトリにコピーします。

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

その後、「ca-certificate」パッケージを再構成し、Dockerサービスを再起動します。

dpkg-reconfigure ca-certificates
systemctl restart docker

-Dockerイメージをダウンロード

次のコマンドを使用して、新しいDockerイメージをダウンロードします。

docker pull ubuntu:16.04

完了したら、以下のコマンドを使用してプライベートレジストリのイメージにタグを付けます。

docker image tag ubuntu:16.04 registry.hakase-labs.io/ubuntu16

システム上のDockerイメージのリストをもう一度確認すると、次のように新しいイメージが取得されます。

docker images

-画像をプライベートローカルレジストリにプッシュ

次のコマンドを使用して、プライベートDockerレジストリにログインします。

docker login https://registry.hakase-labs.io/v2/

'registry.htpasswd'ファイルに基づいてユーザー名とパスワードを入力します。

次に、レジストリで利用可能なDockerイメージを確認します。

http -a hakase https://registry.hakase-labs.io/v2/_catalog

また、レジストリにDockerイメージはありません。

次に、カスタムイメージをプライベートDockerレジストリにプッシュします。

docker push registry.hakase-labs.io/ubuntu16

もう一度確認して、プライベートリポジトリに「ubuntu16」Dockerイメージが含まれていることを確認してください。

http -a hakase https://registry.hakase-labs.io/v2/_catalog

そして最後に、Nginxと基本認証を使用したプライベートDockerレジストリのインストールと構成が正常に完了しました。


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

  2. Ubuntu18.04LTSでRsyslogサーバーをセットアップする方法

  3. Ubuntu18.04および16.04LTSでElasticsearchをセットアップする方法

  1. Ubuntu 22.04 /20.04LTSにDockerをインストールする方法

  2. Kubernetes(k8s)でプライベートDockerレジストリを設定する方法

  3. Ubuntu20.04でプライベートDockerレジストリを設定する方法

  1. Ubuntu20.04LTSでOpenNMSネットワーク監視ソリューションをセットアップする方法

  2. CentOS 7 / Ubuntu 16.04 /Fedora26/25でDockerプライベートレジストリをセットアップする方法

  3. Ubuntu14.04LTSにZabbix2.2をインストールする方法