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

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

Dockerプラットフォームを使用したスムーズなCI/CD開発の場合は、自己ホスト型のDockerレジストリサーバーの使用を検討してください。 Dockerレジストリは、Dockerイメージを保存し、それらをプルしてサーバー上でアプリケーションを実行できるリポジトリです。より高速な配信と安全なインフラストラクチャのために、独自のDockerプライベートレジストリを設定して、Dockerイメージを保存し、組織間で配布することをお勧めします。この記事では、Ubuntu20.04でプライベートDockerレジストリを設定する方法を学習します

前提条件

  • sudo権限を持つユーザーアカウント
  • Dockerレジストリ用のサーバー
  • Dockerレジストリサーバー上のNginx
  • クライアントサーバー
  • DockerとDocker-両方のサーバーで作成します。

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

Docker Registryは、Dockerイメージを1つの集中管理された場所にローカルに保存できるサーバー側アプリケーションです。独自のDockerレジストリサーバーを設定することで、Dockerハブに接続せずにDockerイメージをプルおよびプッシュできるため、帯域幅を節約し、セキュリティの脅威を防ぐことができます。

また読む Ubuntu 20.04/20.10にDockerをインストールして使用する方法

始める前に

開始する前に、クライアントサーバーとローカルレジストリサーバーの両方にDockerとDocker-Composeがインストールされていることを確認します。必要なソフトウェアがインストールされていることを確認するには、次のコマンドを実行してソフトウェアのバージョンを確認します。

$ docker version

$ docker-compose version

また、Dockerサービスが開始され、起動時に有効になるように設定されていることを確認する必要があります:

$ sudo systemctl start docker
$ sudo systemctl enable docker

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

プライベートDockerレジストリを構成するには、次の手順に従います。

レジストリディレクトリを作成する

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

次のコマンドを使用して、新しいプロジェクトディレクトリ「my-registry」と2つのサブディレクトリ「nginx」および「auth」を作成します。プロジェクト名については、独自の仮定を立てることができます。

$ mkdir -p my-registry/{nginx, auth}

次に、プロジェクトディレクトリに移動し、nginx内に次のように新しいディレクトリを作成します。

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

Dockerの作成-スクリプトとサービスの作成

プライベートレジストリの設定に必要なdocker-composeのバージョンとサービスを定義する新しいdocker-compose.ymlスクリプトを作成する必要があります。

viエディターを使用して「my-registry」ディレクトリ内に新しいファイル「docker-compose.yml」を作成します。

$ vi docker-compose.yml

docker-composeファイルでサービスを次のように定義します:

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:
      - myregistrydata:/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:
  myregistrydata:
    driver: local

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

nginxポートフォワーディングのセットアップ

nginxWebサービスのnginx仮想ホスト構成を作成する必要があります。上記の手順で作成したnginx/conf.d/ディレクトリに移動します。

$ cd nginx/conf.d/

次に、テキストエディタでnginx仮想ホストファイルを作成します。この例では、myregistry.confという名前を付けます。あなたはあなた自身の仮定を持つことができます。

$ vi myregistry.conf

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

upstream docker-registry {
    server registry:5000;
}
server {
    listen 80;
    server_name registry.linuxtechi.com;
    return 301 https://registry.linuxtechi.com$request_uri;
}
server {
    listen 443 ssl http2;
    server_name registry.linuxtechi.com;
    ssl_certificate /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;
    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    location / {
        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;
    }
}

ドメイン名をserver_nameパラメータに置き換えて、ファイルを保存します。

nginxファイルのアップロードサイズを増やす

デフォルトでは、nginxにはファイルのアップロードに1MBの制限があります。 Dockerイメージがこの制限を超えると、nginx構成ファイルのアップロードサイズを増やす必要があります。この例では、アップロード制限が2GBの追加のnginx構成ファイルを作成します。

nginx構成ディレクトリに移動します

$ cd myregistry/nginx/conf.d
$ vi additional.conf

次の行を追加してファイルを保存します

client_max_body_size 2G;

SSL証明書と認証を構成する

nginx構成ファイルを作成したら、ssl証明書を設定する必要があります。秘密鍵を含む有効なSSL証明書ファイルが必要です。証明書ファイルと秘密鍵を次のようにnginx/sslディレクトリにコピーします。

$ cd myregistry/nginx/ssl
$ cp /your-ssl-certificate-path/certificate.crt .
$ cp /your-private-key-path/private.key .

有効な購入済みSSL証明書がない場合は、独自の自己署名SSL証明書を生成できます。自己署名SSL証明書は、実稼働環境には推奨されないことに注意してください。自己署名SSL証明書を生成するには、次のコマンドを実行します。

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \
 /etc/ssl/private/nginx-private.key -out /etc/ssl/certs/nginx-certificate.crt

国コード、ドメイン名、メールIDなどの詳細を送信するように求められます。詳細を入力して続行します。

基本認証を次のように設定します:

認証ディレクトリに移動

$ cd auth

ユーザーのregistry.passwordという名前の新しいパスワードファイルを要求します。この例では、linuxtechiユーザーを使用します。

$ htpasswd -Bc registry.password linuxtechi

「htpasswdnotfoundコマンド」が表示された場合は、ターミナルで次のコマンドを実行して、再試行してください。

$  sudo apt install apache2-utils -y

強力なパスワードを入力し、もう一度入力してパスワードを確認します。 Dockerレジストリの基本認証ユーザーを追加しました。

Dockerレジストリを実行する

セットアップが完了しました。 docker-composeコマンドを使用してレジストリを作成できます。

docker-compose.ymlファイルを作成するディレクトリに移動します

$ cd myregistry

次に、次のコマンドを実行します。

$ docker-compose up -d

Dockerレジストリが起動しました。次のコマンドを使用して、実行中のコンテナを確認できます。

$ docker ps -a

次の出力が得られます:

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

Dockerハブからプライベートレジストリにイメージを保存するには、dockerpullコマンドを使用してdockerハブからdockerイメージをプルします。この例では、centosのDockerイメージをプルします。

$ docker pull centos

Docker Hubから画像を正常にプルした後、画像にタグを付けてプライベートレジストリ用にラベルを付けます。

この例では、centosイメージにregistry.linuxtechi.com/linuxtechi-centos

のタグを付けます。

$ docker imagetag[画像名]registry.linuxtechi.com/[new-image-name]

例:

$ docker images tag centos registry.linuxtechi.com/linuxtechi-centos

Dockerイメージがローカルで利用可能かどうかを確認するには、次のコマンドを実行します。

$ docker images

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

Docker HubからDockerイメージをプルし、プライベートレジストリのタグを作成しました。次に、ローカルDockerイメージをプライベートレジストリにプッシュする必要があります。

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

$ docker login https://registry.linuxtechi.com/v2/

「https://registry.linuxtechi.com」の代わりに独自のレジストリURLを使用してください

ユーザー名とパスワードの入力を求められます。ログイン成功のメッセージは次のように表示されます:

これで、Dockerイメージをプライベートレジストリにプッシュできます。イメージをプッシュするには、次のコマンドを実行します。

$ docker push registry.linuxtechi.com/linuxtechi-centos

「dockerpush」の後に画像名を置き換えます

プッシュが完了したら、ブラウザに移動してURLを入力できます:

https://registry.linuxtechi.com/v2/_catalog

Registry.linuxtechi.comを独自のURLに置き換え、基本認証を提供します。リポジトリリストは次のように表示されます:

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

ローカルのDockerイメージをプライベートのDockerレジストリにプッシュしました。同様に、DockerプライベートレジストリからローカルサーバーにDockerイメージをプルできます。

次のコマンドを実行して、プライベートレジストリサーバーにログインします。

$ docker login https://registry.linuxtechi.com

Registry.linuxtechi.comを独自のプライベートレジストリURLに置き換え、基本認証を提供します。ログインが成功したら、次のコマンドを実行して、プライベートレジストリからDockerイメージをプルします。この例では、以前にプッシュされたDockerイメージをローカルサーバーにプルします。 Dockerイメージ名について独自の仮定を立てることができます。

$ docker pull registry.linuxtechi.com/linuxtechi-centos

次のような出力が得られます:

結論:

この記事では、独自のプライベートDockerレジストリをホストする方法について学習しました。また、Dockerハブからローカルサーバーにイメージをプルし、イメージにタグを付けてプライベートレジストリにプッシュする方法についても理解しました。また、ローカルサーバーのプライベートレジストリからDockerイメージをプルする方法も学習しました。

また読む Ubuntu 20.04 LTSサーバー(Focal Fossa)にKVMをインストールする方法


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

  2. Ubuntu16.04でHAProxyをセットアップする方法

  3. Ubuntu Gnome 15.10でネットワークDockerをクリーンにセットアップする方法は?

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

  2. Ubuntu18.04にDockerをインストールする方法

  3. Ubuntu 18.04 / Ubuntu 18.10 /Ubuntu19.04にDockerをインストールする方法

  1. Ubuntu18.04にKubernetesをインストールする方法

  2. Ubuntu18.04にDockerComposeをインストールする方法

  3. UbuntuにRancherをインストールする方法