問題現象:
最近、ウィンドウサーバー環境でDockerローカルミラーウェアハウスを作成する方法を研究しています。インターネットはほとんどすべてLinuxサーバー環境に基づいているため、この目標は参照、学習、および実践を通じて達成できます。
問題分析:
自習を通じて、Dockerミラーウェアハウスを作成するためのいくつかの基本的な論理原則を発見しました。これは、ウィンドウ環境やLinux環境に関係なくまったく同じです。
注:dockerに直接ダウンロードされたイメージは、ローカルのプライベートイメージウェアハウスではなく、ローカルのdockerライブラリに保存されます。
違い:
ローカルDockerライブラリ:Dockerのインストール後にDockerサービスに付属するライブラリです。
マシンプライベートミラーリングウェアハウス:のDockerサービスで、レジストリコンテナを起動し、イメージライブラリを格納するためのコンテナを作成します。コンテナはローカルポートバインディングを実行できるため、マシンをミラープライベートウェアハウスとも呼びます。
構成:
ウィンドウ、docker / dockerデスクトップ(ウィンドウ環境にはdockerデスクトップをお勧めします)
手順:
1. dockerデスクトップを起動し、cmdコマンドウィンドウを開いて、次のように入力します。
docker search registry
2.レジストリミラーを参照して、次のように入力します。
docker pull registry
3.ミラーを確認し、ローカルにダウンロードされたレジストリミラーを確認します
docker images #查看本地镜像,可以看到registry镜像
4.イメージを確認し、ローカルにダウンロードされたレジストリイメージを確認します。次のステップは、レジストリサービスコンテナを展開することです。
まず、マシン上にフォルダーを作成します(たとえば、Eドライブの下にレジストリフォルダーを作成し、共有するように設定します)。
入る:
docker run -d -p 5000:5000 --restart=always -v E:/registry:/var/lib/registry registry:latest
セルフリスタートを設定し、ローカル5000ポートをバインドして、コンテナー内の画像保存場所のパスをローカルパスにマップします。
5.コンテナーを表示し、デプロイされたレジストリコンテナーを確認して、次のように入力します。
docker ps #查看运行中的容器
6.コンテナがデプロイされた後、ローカルミラーウェアハウスが構築されます。次のステップは、接続するウェアハウスアドレスを追加することです。
画像の倉庫アドレス(:直接可視化ドッキングウィンドウのデスクトップ構成、シンプルに実装することができます単位IP:5000)Iに追加されたnsecure、レジストリに:
7. dockerデスクトップを再起動し、名前を変更して新しいイメージを作成し(docker tag image id、image new tag name)、形式に注意してください。(local ip:5000 /)で始まる必要があります。
8.ミラーイメージをローカルミラーウェアハウスにアップロードし、次のように入力します。
docker push
事前に一度アップロードしたので、レイヤーが既に存在する(データがすでに存在する)と表示されます
最新のものを見ることができます:ダイジェスト:sha256:、、、サイズ:。。。(つまり、プッシュは成功します)
以下に、最初にミラーをアップロードした結果グラフの例を示します。
9.ローカルミラーウェアハウスアドレスのミラーをチェックして、ミラーが正常にアップロードされているかどうかを確認します。
方法1:ブラウザーを開き、ローカルのip:5000 / v2 / _catalog を入力して、Dockerインターフェースにアクセスし、ミラー情報を表示します(この方法が最も正確です)。
方法2:マシンのE:\ Registry \ docker \ repository \ v2 \ repositoryファイルパスを直接開きます。すべてのミラーがこのディレクトリに保存されるため、内部にレジストリフォルダがあることがわかります。このフォルダはミラープッシュされたばかりのデータファイル:
注:このミラーの名前はパス内のレジストリと簡単に混同されるため、初心者はレジストリミラーを使用してテストしないことをお勧めします。概念は異なり、区別する必要があります。
ファイルを入力すると、次の情報が表示されます。これは、プッシュが成功したことを意味します。
、
10.ローカルミラーウェアハウスでミラーを削除します。最初はローカルフォルダで直接削除する方法を考えましたが、欠点があります。
マシンのE:\ repository \ docker \ repository \ v2 \ repositoryファイルパスを開き、 レジストリフォルダーを削除します;
同様に、 E:\ Registry \ docker \ repository \ v2 \ blobsファイルパスを開き、sha256フォルダーを削除します。
方法1を使用して以下を確認します。
削除は成功したようですが、実際はそうではありません。もう一度プッシュすると、ローカルのプライベートミラーライブラリがすでに存在していることがわかります。これは、削除が成功しなかったことを示しています。
だから、一番直接的な方法は、コンテナに行って鏡像の特定の保管場所を確認することだと思いました。まだ鏡があるかどうかにかかわらず、私は魔法のようなものを見つけました。
レジストリコンテナ内の/ var / lib / repository / docker / repository / v2 / repositoryのパスを lsコマンドとcdコマンドで段階的に 調べた ところ、上記の方法で削除されたイメージがそのまま残っていることがわかりました。 ;つまり、削除が無効です。
そこで、レジストリコンテナの構成ファイルを調べました。
理由はわかりませんが、オンラインで情報を調べると、次のことがわかりました。
レジストリコンテナの削除機能はデフォルトで無効になっています。
機能の削除はセキュリティ上の理由から禁止すべきだと思います。
しかし、好奇心に駆られて情報を確認したところ、インターネット上の設定ファイルを変更する方法があり、次のように削除機能を有効にできることがわかりました。
ここでは練習しません。オンラインで利用できる別のより安全な方法があります。
レジストリコンテナの/ var / lib / repository / docker / repository / v2 / repositoryパスに移動し、 削除するイメージを直接削除します。
またはもっと簡単に
1.次のコマンドをcmdで直接実行します。
docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>
lsコマンドを 確認すると、フォルダーが空である、つまり削除が成功し、exitコマンドを実行してコンテナーを終了できることがわかります:(質問:blobの下のファイルを削除する必要がありますか?ブロブが一時的なデータである可能性があること)
2.次に、ガベージコレクション操作を実行する必要があります。
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
結果のフィードバック:
このフィードバックの30を見ると、今回は削除が成功しない可能性があると常に感じています。
それから私はもう一度押して、それがまだ存在していることを発見しました、しかし多くの練習の後、私は時々それが成功したことを発見しました:
したがって、このガベージコレクション操作は通常すぐには実行されないため、キャッシュされたデータが実際にクリアされるまでに時間がかかる場合があります。このガベージコレクションメカニズムはblobフォルダーに関連している可能性があります。
検証:
したがって、ミラーファイルを削除した後、このガベージコレクション操作を実行する前に10分間待ったところ、新しいフィードバックがあることがわかりました。
私は希望を感じますが、もう一度押すと、それはまだ存在していると言います:
いろいろ試してみたら、99%の問題を解決できる伝説の方法、リスタートを思いついた。
そこで、ガベージコレクション操作コマンドを実行した後、再起動コマンドを実行し、再起動後にプッシュしました。問題がないことがわかりました。何度も試行した結果、正常に削除できました。これまでのところ、ミラーの削除の問題は解決しました。
総括する:
1.問題がなければ、ミラーを削除しないでください。面倒です。
2.削除手順は次のとおりです。
10.2.1:マシンのE:\ repository \ docker \ repository \ v2 \ repositoryファイルパスを開き、 削除するイメージファイルを削除します。
10.2.2:cmdで、ガベージコレクション操作コマンドを実行します。
docker exec b0533d3f7f8e bin/registry garbage-collect /etc/docker/registry/config.yml
10.2.3:レジストリコンテナを再起動します
docker restart registry容器的id
10.2.4:もう一度押してローカルDockerライブラリイメージをアップロードします
docker push 192.168.2.120:5000/minio
11.サーバー間のミラーウェアハウスアドレスへのアクセス:
例:サーバー(ローカルマシン)アドレス:192.168.2.120:5000
サーバーBアドレス:192.168.2.220:5000
するアクセス のミラー倉庫アドレス Bを中A、Bの倉庫からミラーを引っ張ります。
11.1最初に、(B)このマシンのDocker構成にミラーウェアハウスアドレスを追加します(A):
11.2次に、Dockerデスクトップのマシン(A)を起動/再起動します。
11.3事前にBサーバー上にBのミラーウェアハウスを作成し、Bのip:5000 /で始まるミラーを作成し、b:のミラーウェアハウスアドレスにプッシュします。
:
11.4このマシン(A)でブラウザを開いて、Bのミラーライブラリの情報を表示します。Bライブラリにプッシュされたばかりのミニオミラーが1つだけで、アクセスが成功していることがわかります。
11.5このマシン(A)からBライブラリのミラーイメージをプルし、次のように入力します。
docker pull
ダウンロード:
ダウンロードが完了しました:
注:これは、ローカルマシン(A)にダウンロードされたDockerウェアハウスです。ローカルのプライベートミラーウェアハウスに保存する必要がある場合は、次のように、新しいミラーを作成して上記と同じ方法でプッシュする必要があります。