プライベートウェアハウス(レジストリとハーバー)を構築するための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 インデックスの効率的な使用ガイド

推薦する

Apache、Tomcat、Nginx サーバーの詳細な理解と比較分析

質問1件会社のサーバーはApacheを使用しており、バックエンドはPHP、サーバーはLinux C/...

HTMLにおける絶対パスと相対パスの違いの分析

図に示すように: 1 つのページには多数のファイルが接続されているため、ファイルを参照するときには、...

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...

Vue ルーターにパラメータを渡すときにページを更新するとパラメータが失われる問題に対処する方法

目次概要方法1: params経由でパラメータを渡す方法2: クエリを通じてパラメータを渡す方法3:...

MySQL シリーズ データベース設計 3 つのパラダイム チュートリアルの例

目次1. データベース設計の3つのパラダイムに関する知識の説明1. デザインパラダイムとは何ですか?...

Zabbix でフィルターを使用して監視を実装する方法

最近、監視機器の作業をしていたとき、ポートがダウンしているというアラームが常に出ていました。データを...

MySQLの高可用性アーキテクチャの詳細な説明

目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...

MySQL 8.0 バージョンで getTables がすべてのデータベース テーブルを返す問題の簡単な分析

序文この記事では、主にライブラリ内のすべてのテーブルを返すMysql8.0ドライバgetTables...

Ubuntu 18.04 での Pycharm インストール チュートリアルの実装

方法1: Pycharmをダウンロードしてインストールするダウンロードアドレス: https://w...

Linux サーバーの状態を監視する方法

私たち、特に Linux エンジニアは毎日 Linux サーバーを扱っています。サーバーのセキュリテ...

VMware ESXi 6.0 および仮想マシンのインストール チュートリアルの展開 (画像とテキスト)

社内には以前からアイドル状態だった、構成の整ったサーバーがあったので、EXSI 6.0 を使って複数...

Centos7 での Rsync+crontab 定期同期バックアップ

最近、社内の重要なサーバデータを定期的にストレージにバックアップし、ついでにメモしておきたい以前、W...

Vue は PDF ファイルのオンライン プレビューを実装します (pdf.js/iframe/embed を使用)

序文現在、私はコースウェア PPT のオンライン プレビューを必要とする高品質のコースに取り組んでい...

HTML ハイパーリンク内の中国語文字化けの分析と解決

Vm 内のハイパーリンク URL は、Get 要求のパラメータとして中国語と連結する必要があります。...

Alibaba Cloud ESC に MYSQL8.0 をインストールするチュートリアル

接続ツールを開きます。私はMobaXterm_Personal_12.1を使用します(公式サイトのダ...