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

推薦する

React 高階コンポーネント HOC 使用方法の概要

HOCを紹介する一文高階コンポーネント (HOC) とは何ですか? 公式ドキュメントによると、「高階...

HTMLファイルとは何ですか?HTMLファイルを開く方法

HTML は Hypertext Markup Language の略です。現在、ほとんどの Web...

Dockerでのpython3.8イメージのインストールについて

Docker Hub公式サイト1. Pythonミラーを検索するdocker 検索 python 2...

MySQL 接続例外とエラー 10061 の解決方法

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

JavaScript で最も高速なループはどれですか?

どの for ループまたは反復子がニーズに適しているかを知ることで、アプリケーションのパフォーマンス...

Windows 10 での MySQL 8.0.11 圧縮バージョンのインストール チュートリアル

この記事では、MySQL 8.0.11圧縮版のインストールチュートリアルを参考までに紹介します。具体...

Linux での感嘆符コマンド (!) の使用の概要

序文最近、弊社では mbp の設定をしており、ssh を使うことが多くなりました。複雑なコマンドを書...

HTMLプログラミングタグとドキュメント構造の詳細な説明

HTML を使用してコンテンツをマークアップする目的は、Web ページにセマンティクスを与えることで...

WAMPにインストールするとMySQLが起動できるが、再起動後に起動できなくなる問題の解決方法

初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...

MySQL で重複レコードをクエリして削除する方法の完全なガイド

序文この記事では主に、MySQL で重複レコードをクエリして削除する方法を紹介します。参考と学習のた...

Docker で nginx のログレベルを調整する方法

目次はじめにNginx Dockerファイル新しい会議もっと参考文献はじめに最近、アプリケーションの...

パーソナライズされたクリエイティブなウェブサイトデザインの例 (30)

そこで、個性的なスタジオやフリーランスを表現する組み合わせを 30 個選びました。デザインを目立たせ...

MySQLのREDOログ(リドゥログ)とロールバックログ(アンドゥログ)の詳しい説明

序文:前回の記事では、MySQL システムでよく使用されるログをいくつか説明しました。実は、トランザ...

JavaScript配列重複排除の詳細な説明

目次1. アレイ重複排除2. 配列内のオブジェクトの重複排除3. 配列内の同じフィールドに基づいて別...

ウェブページの幅を携帯電話の画面(ビューポート)の幅に自動的に適応させる実装コード

一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...