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

推薦する

Vue2.x および Vue3.x のカスタム命令の使用方法とフック関数の原理を理解する

目次Vue2.x の使用法グローバル登録部分登録使用フック機能フック関数のパラメータVue3.x の...

Linuxでpyファイルを直接実行する方法

1. まずファイルを作成します(ファイルを配置するディレクトリにcdします) myTest.py を...

前後の秒、分、時間、日数を取得するMySQLデータベース

現在の時刻を取得します: current_timestamp を選択します。出力: 2016-06-...

MySQL 8.0 のメモリ消費の詳細な分析

目次1. innodb_buffer_pool_size 2. innodb_log_buffer_...

Linux deb パッケージの解凍、変更、その他の操作方法のコード例

さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...

Vue+Openlayer をベースに geojson を動的に読み込む方法

1つ以上の機能をロードする <テンプレート> <div id="map&...

複数の画像を切り替えるJavaScript

この記事では、複数の画像を切り替えるJavaScriptの具体的なコードを参考までに紹介します。具体...

React の国際化 react-intl の使用

React で国際化を実現するにはどうすればよいでしょうか? react-intlプラグインは、Re...

Ubuntu Server のターミナルのウェルカム メッセージで広告を無効にする方法

最新の Ubuntu Server バージョンを使用している場合、ようこそメッセージに、Ubuntu...

アイデアを war パッケージにパッケージ化し、tomcat にデプロイしてアクセス パスの問題 (図とテキスト)

Web プロジェクトを war にパッケージ化するアイデアにとって最も重要なことは、アトリフィカを...

Windows での MySQL コミュニティ サーバー 8.0.16 のインストールと構成方法のグラフィック チュートリアル

最近、MySQL関連の構文をよく見かけます。また、MySQLストアドプロシージャの書き方も学びたいの...

Vite2.x に基づく Vue 3.x プロジェクトの実装

Vue 3.x プロジェクトの作成 npm init @vitejs/app my-vue-app ...

docker inspect コマンドの使用に関するヒント

説明と紹介Docker inspect は Docker クライアントのネイティブ コマンドであり、...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

nginxのインストールと設定の詳細なプロセス記録

目次1 nginxの紹介1 nginxとは何か2 つのアプリケーション シナリオ2 nginxのイン...