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をインストールする方法