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 マークアップ言語 - フォーム

推薦する

MySQL に外部キー制約を追加する具体的な方法

このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...

Excelアップロード機能を実現するVue + iViewの完全コード

1. HTML部分 <Col span="2">ファイルをアップロー...

JavaScriptのURLオブジェクトとは何かについて話しましょう

目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...

Docker での FastAPI デプロイの詳細なプロセス

Docker 学習https://www.cnblogs.com/poloyy/p/15257059...

なぜ Tomcat が起動できないのでしょうか?

目次現象:ポートの使用:ファイルにスペルミスがあります:現象: Tomcat がインストールされ、W...

Vue の element-ui コンポーネントのデフォルトの CSS スタイルを変更する 4 つの方法

目次序文1. グローバル統合オーバーライドを使用する2. .vueファイルを変更する3. コンポーネ...

MySQL で URL タイムゾーンの罠を回避する方法

序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...

MySQL実行計画の詳細な説明

EXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情報を提供します...

MySQL binlog の使用方法の詳細な説明

binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...

Web インタビュー Vue カスタム コンポーネントと呼び出しメソッド

輸入:プロジェクトの要件により、同じコードの一部をコンポーネントにカプセル化し、必要な場所にインポー...

Navicat For MySQL の使い方に関する簡単なチュートリアル

推薦する: Navicat for MySQL 15 登録とアクティベーションの詳細なチュートリアル...

MySQL データベースのアップグレードにおけるいくつかの「落とし穴」

商用データベースの場合、データベースのアップグレードは優先度が高く、バージョンアップのロードマップ、...

Java は Apache.POI を使用して HSSFWorkbook を Excel にエクスポートします

Apache.POI の HSSFWorkbook を使用して Excel にエクスポートします。具...

Vue フロントエンド開発における keepAlive の使用方法の詳細な説明

目次序文keep-avlive フック関数keep-avliveはどのコンポーネントをキャッシュする...

Reactで例外を適切にキャプチャする方法

目次序文エラー境界エラー境界を超えてトライ/キャッチwindow.onerror、エラーイベント未処...