プライベートウェアハウス(レジストリとハーバー)を構築するためのDockerの実装

プライベートウェアハウス(レジストリとハーバー)を構築するためのDockerの実装

使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要になります。現在、一般的に使用されている倉庫には、公営倉庫と民間倉庫の 2 種類があります。最も便利な方法は、パブリック リポジトリを使用してアップロードおよびダウンロードすることです。パブリック リポジトリからイメージをダウンロードする際には登録する必要はありませんが、アップロードする際には登録が必要です。

最も一般的に使用されるプライベート倉庫はレジストリとハーバーです。以下ではプライベート倉庫の作成方法について詳しく説明します。

1. レジストリプライベートウェアハウスを構築する

1) ケースの説明

2 つの Docker サーバー、dockerA はレジストリ プライベート ウェアハウスを作成し、dockerB はテストに使用されます。

2) 事例

(1)DockerAサーバーの運用

[root@dockerA ~]# docker pull registry:2 //registry:2 のイメージをダウンロードします [root@dockerA ~]# docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2
// レジストリ サービスを実行するためのレジストリ コンテナーを作成します。
//-p: ポート マッピング (前面はホスト ポート、背面はコンテナーによって公開されるポート)。
//-v: マウントディレクトリ(最初のディレクトリはホストディレクトリ、2 番目のディレクトリはコンテナディレクトリ)を指定して、ホストディレクトリを自動的に作成します。
//--restart=always: docker サービスの起動から開始します。
[root@dockerA ~]# docker ps //コンテナが実行中であることを確認します コンテナID イメージ コマンド 作成日時 ステータス ポート 名前
f98bf93f100e レジストリ:2 "/entrypoint.sh /etc…" 3 分前 3 分前にアップ 0.0.0.0:5000->5000/tcp レジストリ
[root@dockerA ~]# netstat -anpt | grep 5000 // ポート 5000 が listen されていることを確認します tcp6 0 0 :::5000 :::* LISTEN 2370/docker-proxy  
[root@dockerA ~]# docker tag centos:7 192.168.1.1:5000/centos:7
// プライベート ウェアハウス名の仕様に準拠するようにイメージ名を変更します。注: プライベート ウェアハウス イメージの命名規則は次のとおりです: 192.168.20.7:5000/XXX (ホスト マシン IP: 5000 ポート/イメージ名)
[root@dockerA ~]# vim /usr/lib/systemd/system/docker.service 
//docker サービスのメイン設定ファイルを書き込む 13 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.1:5000
// 元の設定ファイルを変更して、安全でないレジストリ (--insecure-registry) を追加します。アドレスはホストの IP アドレスとポート 5000 です [root@dockerA ~]# systemctl daemon-reload 
[root@dockerA ~]# systemctl restart docker //docker サービスを再起動します [root@dockerA ~]# docker push 192.168.1.1:5000/centos:7
//名前を変更したイメージをレジストリのプライベート ウェアハウスにアップロードします [root@dockerA ~]# curl 192.168.1.1:5000/v2/_catalog //プライベート ウェアハウス内のイメージを表示します {"repositories":["centos"]}
[root@dockerA ~]# curl 192.168.1.1:5000/v2/centos/tags/list //イメージの詳細情報を表示します {"name":"centos","tags":["7"]}

(2)DockerBサーバーの運用

[root@dockerB ~]# vim /usr/lib/systemd/system/docker.service 
//docker 13 のメイン設定ファイルを変更する ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.1:5000
// レジストリと一致するコンテンツを追加し、レジストリプライベートウェアハウスサーバーの IP アドレスとポートを指定します [root@dockerB ~]# systemctl daemon-reload 
[root@dockerB ~]# systemctl restart docker //docker サービスを再起動します [root@dockerB ~]# curl 192.168.1.1:5000/v2/_catalog //プライベート ウェアハウス内のイメージを表示します {"repositories":["centos"]}
[root@dockerB ~]# curl 192.168.1.1:5000/v2/centos/tags/list //プライベートウェアハウス内のイメージを表示します {"name":"centos","tags":["7"]}
[root@dockerB ~]# docker pull 192.168.1.1:5000/centos:7
//プライベートリポジトリのイメージをダウンロードします [root@dockerB ~]# docker images //イメージがローカルリポジトリにダウンロードされたことを確認します TAG IMAGE ID CREATED SIZE
192.168.1.1:5000/centos 7 5e35e3505 週間前に追加 203MB

この時点で、レジストリ専用倉庫が構築されました!

2. ハーバーのプライベート倉庫を建設する

Registry プライベート ウェアハウスと比較すると、Harbor プライベート ウェアハウスははるかに強力で、Web グラフィカル管理をサポートしているため、企業で非常に人気があります。

1) ケースの説明

2 つの Docker サーバー、dockerA は Harbor プライベート ウェアハウスを作成し、dockerB はテストに使用されます。

2) 事例

(1)docker-composeツールをダウンロードする

まず、図に示すように、GitHub の公式 Web サイトにアクセスします。





DockerAサーバーの運用

[root@dockerA ~]# yum -y yum-utils デバイスマッパー永続データ lvm2 をインストールします
//docker-compose ツールに必要な依存関係をダウンロードします (docker 環境をデプロイするときにインストールできます)
[root@dockerA ~]# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
//docker-compose ツールをダウンロードします [root@dockerA ~]# chmod +x /usr/local/bin/docker-compose
[root@dockerA ~]# docker-compose -v      
docker-compose バージョン 1.25.0、ビルド 0a186604
//docker-compose ツールのバージョン情報をチェックして、正常にインストールされていることを確認します

(2)港湾の構成

GitHub の公式サイトで検索して、対応するバージョンを見つけることもできます。ここではこれ以上のスクリーンショットは撮りません! URLはhttps://github.com/goharbor/harbor/releasesです。
図に示すように:

同じ操作がdockerAサーバーでも実行されます

[root@dockerA ~]# wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1.tgz
// harbor ソフトウェア パッケージをダウンロード [root@dockerA ~]# tar zxf harbor-offline-installer-v1.9.1.tgz -C /usr/local
[root@dockerA ~]# cd /usr/local/harbor/
[root@dockerA harbor]# vim harbor.yml 
//設定ファイルを書き込みます。他のバージョンはデフォルトで cfg で終わりますが、このバージョンは yml で終わります。ファイルの内容は同じです。hostname: 192.168.1.1 //ローカル IP アドレスに変更します harbor_admin_password: Harbor12345    
//この行はすでに存在します。自分で入力する必要はありません。ユーザー名とパスワードを覚えておいてください。必要に応じて変更できます[root@dockerA harbor]# ./install.sh //インストール スクリプトを実行します[root@dockerA harbor]# vim /usr/lib/systemd/system/docker.service 
//dockerメイン設定ファイルを書き込む 13 ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.1
//レジストリと同様に、ポート番号は harbor 構成ファイルには入力されていないため、ここで追加できます。そうしないと、エラーが発生する可能性があります [root@dockerA harbor]# systemctl daemon-reload 
[root@dockerA harbor]# systemctl restart docker //docker サービスを再起動します [root@dockerA harbor]# pwd
/usr/local/harbor //ディレクトリに注意してください。このディレクトリ内にある必要があります [root@dockerA harbor]# docker-compose start
//docker-compose ツールを使用してすべてのコンテナを起動します (docker を再起動するとすべてのコンテナが閉じられるため)
[root@dockerA harbor]# netstat -anpt | grep 80 //ポート80がtcp 0 0 172.18.0.1:33780 172.18.0.5:10514 ESTABLISHED 70076/docker-proxyでリッスンしていることを確認します 
tcp6 0 0 :::80 :::* 72870/docker-proxyを聴く

クライアントは次の Web ページにアクセスします。




(3)画像をアップロードする

倉庫が構築できたら、dockerA(harbor)サーバーにイメージをアップロードしてください。

[root@dockerA ~]# dockerログイン -u admin -p Harbor12345 192.168.1.1
// ログインするには、ユーザー名、パスワード、ハーバー サーバー アドレスを指定します。警告! CLI 経由で --password を使用することは安全ではありません。--password-stdin を使用してください。
警告! パスワードは暗号化されずに /root/.docker/config.json に保存されます。
この警告を削除するには、資格情報ヘルパーを構成します。
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

ログイン成功 //ログイン成功[root@dockerA ~]# docker tag centos:7 192.168.1.1/test/centos:7
// イメージ名を変更する必要があります。test は先ほど作成したウェアハウスの名前です [root@dockerA ~]# docker push 192.168.1.1/test/centos:7
// ハーバーサーバーのテストリポジトリにイメージをアップロードします

アップロードが完了すると、図のようになります。

(4)ダウンロードしたイメージをdockerBサーバーでテストする

[root@dockerB ~]# vim /usr/lib/systemd/system/docker.service 
//docker 13 のメイン設定ファイルを書き込みます ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.1
//ハーバーサーバーのIPアドレスを指定 [root@dockerB ~]# systemctl daemon-reload 
[root@dockerB ~]# systemctl restart docker //docker サービスを再起動します [root@dockerB ~]# docker login -u admin -p Harbor12345 192.168.1.1
// ハーバー サーバーにログインします。警告! CLI 経由で --password を使用することは安全ではありません。--password-stdin を使用してください。
警告! パスワードは暗号化されずに /root/.docker/config.json に保存されます。
この警告を削除するには、資格情報ヘルパーを構成します。
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

ログイン成功 //ログイン成功[root@dockerB ~]# docker pull 192.168.1.1/test/centos:7
//テスト用のイメージをダウンロード [root@dockerB ~]# docker images //イメージがダウンロードされたことを確認する リポジトリ タグ イメージ ID 作成 サイズ
192.168.1.1/test/centos 7 5e35e350 5 週間前に追加 203MB

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ミラーリポジトリである Harbor の設定と使用に関するチュートリアル
  • HarborをベースにしたDockerプライベートイメージリポジトリの構築の詳細な説明
  • Dockerプライベート倉庫Harborの導入と展開方法
  • Dockerがプライベート倉庫Harborを構築する手順
  • ドッカー専用倉庫港湾建設プロセス
  • Harbor がプライベート画像ウェアハウス環境とサービス展開例を視覚化

<<:  JavaScript と JQuery フレームワークの基本チュートリアル

>>:  MySQL インデックスの効率的な使用ガイド

推薦する

MySQL 制約の超詳細な説明

目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...

Nginx設定の原理と実装プロセスの詳細な説明https

Linuxユーティリティcertbotを使用してhttps証明書を生成するこのツールは Let&#...

HTML の doctype とエンコーディングに関する簡単な説明

文書タイプDoctype は、指示を解析するためにどのバージョンの HTML を使用するかをブラウザ...

Vue の基本的な手順の例のグラフィック説明

目次1. v-on指令1. 基本的な使い方2. 糖衣構文3. イベントパラメータ4. イベント修飾子...

Docker Swarm を使用して分散クローラー クラスターを構築する例

クローラーの開発プロセス中に、クローラーを複数のサーバーに展開する必要がある状況に遭遇したことがある...

MySQL ロック関連知識のまとめ

MySQL のロックロックは、並行環境におけるリソースの競合を解決する手段です。その中でも、楽観的並...

Vue-router ネストルーティングの詳細な説明

目次ステップ1. ルーティング ルールを設定し、子構成項目を使用します。 2. ジャンプ(フルパスを...

CentOS 7 パスワードを忘れた場合の解決プロセス図

必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...

MySQL の結合インデックスと左端一致原則の詳細な説明

序文これまでインターネットでMySQLジョイントインデックスの最左接頭辞マッチングに関する記事をたく...

JS配列メソッドの詳細な説明

目次1. 元の配列が変更されます1. プッシュ(): 2.ポップ(): 3. シフト(): 4.un...

vue3 watch と watchEffect の使い方と違い

1.リスナーを見る時計のご紹介 'vue' から { ref, reactive, ...

MySql Installer 8.0.18 画像とテキストによるビジュアル インストール チュートリアル

目次1. MySQL 8.0.18のインストール2. 環境変数を設定する3. 接続テスト1. MyS...

ES5とES6の違いを分析する

目次概要関数シグネチャオプションパラメータ非厳密モード例外処理実用要約する概要ご存知のとおり、ES6...

MySQL ファントムリードとその排除方法の詳細な説明

目次トランザクション分離レベルファントムリーディングとは何ですか?ファントムリードを排除する方法要約...

MySQLの左結合を内部結合に素早く変換するプロセス

日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...