導入使用したい Docker イメージを見つけたものの、特定のニーズに合わせて変更できなかったことはありませんか?あるいは、気に入った Docker イメージを見つけたものの、それがどのように構築されたかを理解したい場合もあります。どちらの場合も、いくつかのツールを使用して Docker イメージをリバースして Dockerfile を生成することができます。 Docker イメージを Dockerfile に変換するということは、既存の Docker イメージを取得し、それを使用して変更および制御できる Dockerfile を作成することを意味します。 このプロセスにより、Docker イメージの内部動作を理解し、変更を加えたり、さまざまなプラットフォームで実行できるようにイメージを更新したり、特定のニーズに合わせて最適化したりすることができます。 このブログ記事では、いくつかのオープンソース ツールを使用して Docker イメージを解釈し、Dockerfile に変換するプロセスについて説明します。 Dedockifyを使用して実装写真 Docker イメージはブラック ボックスのようなもので、イメージ構築プロセス中に実行される一連の命令のレイヤーが含まれています。 現在、Dedockify という、イメージの作成に使用された Dockerfile のおおよそのバージョンを再構築するのに役立つ Python スクリプトを使用するツールがあります。 Dedockify は、各画像レイヤーの隣に保存されているメタデータを活用して機能します。これは、階層ツリーに沿って後方にトラバースし、各レイヤーに関連付けられたコマンドを収集することによって行われます。 このプロセスにより、イメージビルドプロセス中に実行されたコマンドのシーケンスを再構築できるようになります。 ただし、問題があります。COPY または ADD 命令を使用すると、Dedockify によって生成された出力は元の Dockerfile と完全に一致しません。これは、Dedockify が元の docker build コマンドが実行されたときに存在していたビルド コンテキストにアクセスできないためです。 Dedockify を使用するには、Docker コンテナとして実行します。 パラメーター <imageID> はイメージ ID です (短縮または完全指定が可能)。
どのように機能しますか? Dockerfile からイメージを構築する場合、Dockerfile 内の各命令によって新しいレイヤーが生成されます。すべてのイメージ レイヤーを表示するには、docker images コマンドを (現在は非推奨の) --tree フラグ付きで使用できます。 これらの各レイヤーは、Dockerfile 内の命令を実行した結果です。実際、これらのレイヤーのいずれかに対して docker inspect を実行すると、そのレイヤーを生成するために使用された命令を確認できます。 Docker の例: 以下は、公式の Docker Ruby イメージをプルし、そのイメージの Dockerfile を生成する方法を示した例です。 ダイブツールを使って達成するDive は、Docker イメージ、レイヤーの内容を探索し、Docker/OCI イメージのサイズを縮小する方法を見つけるためのツールです。 写真 Dive は、Docker イメージやレイヤーの内容を探索し、イメージ サイズを縮小する方法を見つけるためのツールです。ファイル サイズ、権限など、各レイヤーの内容の詳細な内訳が提供されます。イメージのサイズを縮小するために削除できる不要なファイルや依存関係を識別するのに特に役立ちます。 特徴:
方向: Dive を使用するには、システムにインストールし、Docker または OCI イメージに対して実行する必要があります。 たとえば、公式の Alpine Linux イメージを分析するには、次のコマンドを実行します。 Dive は画像のレイヤーの詳細な内訳を表示し、各レイヤーの内容を調べて最適化の可能性を特定できるようにします。 Dive のようなサードパーティ製ツールに加えて、すぐに使用できるツールが docker history です。例 1 のイメージに対して docker history コマンドを使用すると、このイメージの作成に使用された Dockerfile 内のエントリを表示できます。 したがって、次の結果が得られるはずです。 CREATED BY 列の内容はすべて切り捨てられることに注意してください。これらは、Bourne シェルを介して渡される Dockerfile 命令です。この情報は、ここでは省略されていますが、Dockerfile を再作成する際に役立つ可能性があります。--no-trunc オプションを使用すると、すべてを確認することもできます。 これには有用なデータが含まれていますが、コマンド ラインから解析するのは少し難しい場合があります。 docker inspect を使用することもできます。 イメージからの Dockerfile (dfimage)docker history コマンドの動作と同様に、Python スクリプトは Docker が各イメージ レイヤーの横に保存するメタデータを使用して、イメージの構築に使用された Dockerfile を (おおよそ) 再作成できます。 https://github.com/LanikSJ/dfimage Python スクリプト自体は Docker イメージとしてパッケージ化されているため、Docker run コマンドを使用して簡単に実行できます。 ruby:latest 引数はイメージ名とタグです (省略形または完全なイメージ名とタグを使用できます)。 このスクリプトは Docker API と対話してさまざまなイメージ レイヤーのメタデータを照会するため、Docker API ソケットへのアクセスが必要です。上記の -v フラグにより、スクリプトを実行しているコンテナー内で Docker ソケットが使用できるようになります。 このスクリプトは、ローカル レジストリに存在するイメージ (つまり、 docker images と入力したときに表示されるイメージ) でのみ機能することに注意してください。ローカル リポジトリに存在しないイメージの Dockerfile を生成する場合は、まず docker pull コマンドを使用してイメージをプルする必要があります。 要約するDocker イメージを Dockerfile にリバース エンジニアリングすること、つまり「Docker イメージのバックトラック」は、イメージのビルド プロセスを理解して再作成するのに役立つ便利な手法です。 Dive や Dedockify などのツールは、イメージ レイヤーとメタデータを分析して対応する Dockerfile を生成するのに役立ちます。 |
<<: Alibaba の調整システムの詳細な分析: 分散トランザクションの一貫性の課題!
>>: クラウドエンジニアとクラウドアーキテクトが不可欠な理由
2012年、Baiduからさまざまなアップデートがありました。SEOがなければ、ユーザーをどのように...
2012年まであと1時間あるので、愚痴を書く時間も少しあると思います。笑 2011年12月は間違いな...
2017年と比較すると、2018年の春節マーケティングは精彩を欠いていました。毎年1月下旬になると、...
ブログがうまく運営されるかどうかは、ブロガーの日々のコミュニケーションに大きく左右されることが多いで...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています5月25日...
検索エンジンが新しいアルゴリズムの時代に入って以来、検索エンジンのウェブサイトのスコアは、基本エクス...
最近はマーケティングプロモーションにWeChatを使っている人が多く、皆さんもご存知だと思います。も...
間違いその1: リンクを購入する。他のウェブサイトからリンクしてもらうためにお金を払うよう説得しよう...
近年のクラウドコンピューティング、エッジコンピューティング、人工知能などの技術の発展を振り返ると、ク...
多くのウェブマスターは、SEO は難しい、単調すぎる、退屈すぎる、結果が出ない繰り返し作業が多すぎる...
「絶対に失われない高速な個人用クラウドストレージ」をうたうアリババのCoolPanは、2015年10...
1. 電子商取引が「コールドチェーン」の欠点を補うために生鮮食品市場に参入電子商取引は「コールドチェ...
現在の企業 IT インフラストラクチャ技術の唯一の選択肢として、クラウド コンピューティングは探索と...
昨年 11 月 25 日、欧州の RIPE NCC は、利用可能なプールに残っている最後のアドレスか...
SEO ウェブマスターにとって、ランキングはウェブサイトへのトラフィックの源です。重要なキーワードの...