Docker イメージのプルとタグ操作 pull | tag

Docker イメージのプルとタグ操作 pull | tag

Fabric プロジェクトのソースコードを読み直してみたところ、Docker の部分でよくわからない点がたくさんあることに気付きました。読んでいくうちに、Fabric イメージを pull するために docker pull を使用し、イメージの名前を変更するために docker tag を使用しているのがわかりました。少し考えてみると、以前使用したことはあったものの、あまりよく理解しておらず、なんとなく使っていたことがわかりました。今では使い方を忘れてしまいました...

1. docker プル

イメージソース(通常はDocker Hub)からイメージをプルします。

docker pull [オプション] 名前[:タグ|@ダイジェスト]

オプション、略語デフォルト説明する
--すべてのタグ、-a画像ライブラリからタグ名を持つすべての画像を取得します
--コンテンツの信頼を無効にする真実画像検証を無視

例えば:

$ docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG

オプション:
# -a 異なるタグを持つすべてのイメージをプルします -a, --all-tags リポジトリ内のタグ付けされたすべてのイメージをダウンロードします
# イメージ検証を無視します。デフォルトオプション --disable-content-trust イメージ検証をスキップします (デフォルトは true)

実際に試してみましょう。動作環境はよく使われるUbuntu 16.04です

1.1 通常のプル

実際には、最新バージョンのイメージを直接プルすることができます。デフォルトでは、最新のタグが付いたイメージがプルされます。

例えば:

#Java イメージをプルします。タグは最新です
$ docker プル java
デフォルトタグの使用: 最新
最新: library/java から取得
5040bd298390: プル完了 
fce5728aad85: プル完了 
76610ec20bf5: プル完了 
60170fec2151: プル完了 
e98f73de8f0d: プル完了 
11f7af24ed9c: プル完了 
49e2d6393f32: プル完了 
bb9cdec9c7f3: プル完了 
ダイジェスト: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
ステータス: java:latest の新しいイメージをダウンロードしました

プルが完了したら、すでに持っている画像を表示できます。

$ docker イメージ

リポジトリ タグ イメージ ID 作成 サイズ

java 最新 d23bdf5b1b1b 20か月前 643MB

1.2 タグ名のプル

上記の出力から、プルされた Java イメージは 1 つだけですが、プル プロセス中に 5040bd298390 や fce5728aad85 など複数のプルが完了したことがわかります。これは、イメージが複数の「レイヤー」で構成でき、そのような「レイヤー」が他のイメージ (フロントエンド コンポーネントやモジュールに少し似ています) によって再利用されて新しいイメージを形成できるためです。

すでにダウンロードされているイメージを含む別のイメージをプルする場合、docker pull はレイヤーを繰り返しプルせずにメタデータのみをプルします。

Docker のイメージ ライブラリはコンテンツ アドレス ストレージを使用し、イメージ ID は、そこに含まれる構成と「レイヤー」を表す SHA256 ダイジェストです。証明してみましょう。タグ名が latest のイメージである java:latest をプルしたので、latest と同じバージョンでタグ名が異なるイメージ (基本的には同じイメージですが、タグ名が異なる) を見つける必要があります。Docker Hub では次の結果が見つかりました。

タグ名 8-jdk のイメージをプルします。

$ docker pull java:8-jdk
8-jdk: library/java から取得
ダイジェスト: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
ステータス: java:8-jdk の新しいイメージをダウンロードしました

明らかに、ここでのプルでは「レイヤー」情報は参照されず、サマリーの sha256 値は、タグ名が latest のイメージとまったく同じです。本質的に、これらはまったく同じ 2 つのイメージであり、同じ「レイヤー」で構成されているため、再度プルする必要はありません。

この時点で、私と同じ疑問が湧くかもしれません。「まったく同じ?」ということは、動作環境には 1 つしかないということですか?では、誰のタグ名を使用すればよいのでしょうか?次の出力を見てみましょう。

$ docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
java 8-jdk d23bdf5b1b1b 20か月前 643MB
java 最新 d23bdf5b1b1b 20か月前 643MB

すべてのイメージを表示すると、8-jdk と latest というタグ名のイメージがリストされていることがはっきりとわかります。java:8-jdk と java:latest は基本的に同じイメージであるため、イメージ ID は同じですが、タグが異なるだけです。

イメージはまったく同じなので、その「レイヤー」は一度だけ保存され、追加のディスク領域を消費しません。つまり、オペレーティング環境には Java イメージが 1 つだけ存在し、そのイメージに異なるタグを付けることもできます。

イメージ、レイヤー、コンテンツアドレス指定リポジトリの詳細については、まだオープンされていない新しいピットにアクセスしてください。Docker イメージ、レイヤー、ストレージ ドライバーの詳細な分析

1.3 概要プル

上記の2つの方法で画像を取得すると、sha256が取得されます。

sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d

イメージを取得する方法をまとめてみましょう。

$ docker pull java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d: library/java から取得
ダイジェスト: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
ステータス: java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d のイメージは最新です

この概要の画像はすでに最新のものであるため、取得する必要はありません。

$ docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
java 8-jdk d23bdf5b1b1b 20か月前 643MB
java 最新 d23bdf5b1b1b 20か月前 643MB

ミラーリストは変更されません。

ここで、Summary は Dockerfile の FROM で使用できるという知識ポイントを示します。

java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d から

MAINTAINER メンテナー <[email protected]>

この参照方法では、特定のサマリーのため、イメージは特定のバージョンに固定され、更新されません。別のバージョンを使用する必要がある場合は、サマリーの内容を変更する必要があります。

1.4 他のレジストリからプルする

繰り返しになりますが、デフォルトでは、docker pull は Docker Hub からイメージをプルします。もちろん、他のレジストリからイメージをプルするように設定することもできます。

$ docker pull ローカルレジストリ.example:6666/testing/test-image

登録センターの URL の前に http:// または https:// を追加する必要はありません。

1.5 同じ画像ライブラリから複数の画像を一度に取得する

同じイメージ ライブラリ内のすべてのイメージをプルするには、docker pull -a を使用します。

1.6 プルをキャンセル

プルアクションをキャンセルするには、操作インターフェイスで直接 CTRL+c を押してプルプロセスを強制終了します。

2. dockerタグ

ソース画像に新しいタグを作成する

docker タグ SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

イメージ名は、library/java のように、スラッシュで区切られた各名前コンポーネントで構成されます。

名前とタグを区切るには、library/java:8-jdk のようにコロンを使用します。

イメージ名の前にプレフィックスを追加して、イメージソースが他のレジストリまたはプライベートレジストリであることを示すこともできます。

ローカルレジストリ.example:6666/library/java:8-jdk

2.1 名前で参照される画像にタグを付ける

$ docker タグ java java:byname

読者は、docker tag java java:bynameとdocker tag java lib/java:bynameの相違点と類似点を確認することができます。

2.2 IDで参照される画像にタグを付ける

$ docker タグ d23bdf5b1b1b java:byid

2.3 名前とタグで参照される画像にタグを付ける

$ docker タグ java:8-jdk java:bynameandid

2.4 プライベートレジストリ内のイメージのタグ付け

イメージをプライベート レジストリにアップロードするには、イメージの名前を変更する必要があります。ルールは次のとおりです。

$ docker タグ java:8-jdk localregistry.example:6666/library/java:8-jdk-v1

Docker pull と Docker tag はよく使われるコマンドです。使い方は簡単ですが、コツがたくさんあります。読者は自分で練習して試してみることができます。

追記

実は、私は長い間Dockerに触れてきました。この部分を書こうと思ったきっかけは何ですか?

私が文章を書こうと思った当初の目的は、知識を蓄積することでした。上司からは常に、技術を迅速に応用して価値を生み出すことを求められてきました。その結果、理論的な研究や基礎原理、基本的なコマンドの本当の意味さえもわからず、ただ使えるようになり、使い方もわかるようになっただけかもしれません。

自動車学校では生徒に運転技術を教える(あるいは教えない)が、自動車の構成(構造)や動作メカニズム(基本原理)は決して教えないのと同じです。手でギアを変えたりハンドルを回したりでき、足でクラッチ、アクセル、ブレーキを踏むことができれば、それで十分ではないでしょうか? 運転できます。

では、なぜ沈殿するのでしょうか?

まず、誰かがあなたに何らかの命令や原則について尋ねたとき、あなたは躊躇し、答えることができません。なぜなら、あなたは原則やその根底にある原理は言うまでもなく、指先の筋肉を通して指示を記憶しているだけだからです。

次に、他の経験から類推して学びました。最初はフロントエンドの初心者でしたが、その後 Spring Boot アーキテクチャを使用して Java アプリケーションを作成し、現在は Linux コマンド (シェル)、Docker、Go を使用してブロックチェーン フレームワーク HyperLedger Fabric を本番環境に適用することを学んでいます。大きな飛躍のように思えますが、それでも人とマシンのコミュニケーションという同じ分野です。私が学んだのは、さまざまな機械語を話す機械とコミュニケーションをとるために、さまざまな言語を使うことでした。私は、読み書きができる、機械の国に住む外国人のような存在でした。機械の世界で実践を続ける中で、私は HTML、CSS、JavaScript に対する最初の啓蒙から徐々に離れつつあります。建国記念日の前夜なので、とりあえずここに書いておきます。水を吸いすぎて日光が足りないもやしのような感じです。どんどん背が高くなってはいますが、背が高くなるほど細くなります。根は十分に茂っておらず、首は十分に強くなく、曲がったり折れたりしやすくなります。私たちは常に自分自身を奮い立たせ、初心を貫き、義務を忘れず、前線からより多くの栄養のある内容を吸収し、自分自身を強化する必要があります。

上記の記事 Docker の pull イメージとタグ操作 pull | tag は、エディターが皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • docker によってプルされたイメージがどこに保存されるかの詳細な説明
  • Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装
  • docker によってプルされたイメージがどこに保存されるかの詳細な説明
  • docker イメージのプル速度が遅い問題の解決策
  • docker イメージのプル速度が遅い問題を解決する方法
  • docker によってプルされたイメージファイルが保存される場所の詳細な説明
  • docker pull imageエラーの問題を解決する

<<:  Mysqlの日付と時刻関数を扱う記事

>>:  HTML マークアップ言語 - フォーム

推薦する

jsを使用して簡単なスネークゲームを書く

この記事では、参考までに、jsで書かれたシンプルなスネークゲームの具体的なコードを紹介します。具体的...

CSS: 訪問した疑似クラスセレクタの秘密の記憶

昨日、a:visited を使用して「Guess You Like」の右側にある訪問済みテキストの色...

大規模な Vue.js プロジェクトの構築と維持のための 10 のベスト プラクティス

目次1. スロットを使用してコンポーネントを理解しやすくし、より強力にする2. Vuexストアを正し...

CSSスタイルで実現されるHTML背景色のグラデーション効果

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

HTML タグ マーキーを使用してスクロール効果を実現する簡単な方法 (必読)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...

Vueコンポーネントの作成方法と使用方法を説明する記事

目次1. コンポーネントとは何ですか? 2. グローバルコンポーネントを作成する方法1 1. Vue...

Vue のグローバル ウォーターマーク実装例

目次1. 透かしのJsファイルを作成する2. 導入操作2.1 App.vueや他のページでの参照2....

Docker はキューとタスクのスケジューリングを実現するために Laravel アプリケーションをデプロイします

前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...

DockerでNginxサーバーを作成する方法

動作環境: MAC Docker バージョン: Docker version 17.12.0-ce,...

JSが絵柄デジタル時計を実現

この記事の例では、画像デジタル時計を実現するためのJSの具体的なコードを参考までに共有しています。具...

H5 WeChatパブリックアカウント認証を実装するための簡単な手順

序文昨日、h5 WeChat認証の実装が必要なプロジェクトがありました。したがって、この機能を完了す...

nginx でクロスドメイン障害修復を構成する方法の例

Nginxのクロスドメイン設定は次のようには機能しません サーバー{ 聞く 80; server_n...

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

mysql8.0 Windows x64 zip パッケージのインストールと構成のチュートリアル

MySQL 8 Windows版 zipインストール手順(ダウンロードアドレス) 1. ZIPファイ...

実用的なクイックスタートReactルーティング開発

インストールインストールするには、次のコマンドを入力します。 // ネプ npm で react-r...