1. 導入:なぜイメージの中身を知る必要があるのか?
Dockerを使って開発をしていると、「ビルドしたはずの環境変数が設定されていない」「どのレイヤーでファイルが追加されたのか分からない」「ベースイメージのOSが何かわからない」といった壁にぶつかることはありませんか?
docker image inspectコマンドは、コンテナイメージという「ブラックボックス」の中身を詳細なJSON形式で出力するツールです。トラブルシューティングやセキュリティ監査、そして他人が作成したイメージの仕様を把握するために必須のスキルです。
2. 基礎知識:コンテナイメージの構造を知ろう
Dockerイメージは、複数の「レイヤー」が積み重なって構成されています。各レイヤーには、ファイルの変更履歴やコマンド実行結果が記録されています。
docker image inspectを実行すると、以下のような重要なメタデータを確認できます。
・Env: 設定されている環境変数
・Entrypoint / Cmd: コンテナ起動時に実行されるコマンド
・Architecture / Os: 動作するCPUアーキテクチャやOS
・RootFS: レイヤーの構成情報(DiffIDs)
3. 実装/解決策:特定の情報をスマートに抽出する
単純にコマンドを打つと膨大なJSONが流れてきますが、–formatオプション(Goテンプレート)を使うことで、必要な情報だけを抽出できます。
例えば、イメージの環境変数だけを確認したい場合は、以下のように記述します。
4. サンプルプログラム:実践的な抽出コマンド
以下のコマンドは、よく利用する情報をスマートに取得するための具体例です。そのままターミナルに貼り付けて試してみてください。
1. 環境変数をリスト形式で表示する
docker image inspect –format='{{range .Config.Env}}{{println .}}{{end}}’ nginx:latest
2. コンテナ起動時の実行コマンド(ENTRYPOINTとCMD)を確認する
docker image inspect –format=’Entrypoint: {{.Config.Entrypoint}} | Cmd: {{.Config.Cmd}}’ nginx:latest
3. イメージ作成時に使用されたOSとアーキテクチャを表示する
docker image inspect –format=’OS: {{.Os}}, Arch: {{.Architecture}}’ nginx:latest
4. JSON形式で見やすく整形して全情報をファイルに出力する(解析用)
docker image inspect nginx:latest | jq . > image_metadata.json
※上記4つ目のコマンドを実行するには、別途「jq」コマンドのインストールが必要です。
5. 応用・注意点:現場で役立つ活用テクニック
・意図しないパスワード漏洩のチェック:
Dockerイメージに誤ってAPIキーやパスワードを環境変数として埋め込んでいないか、inspectでEnvを確認する習慣をつけると、セキュリティ事故を未然に防げます。
・ベースイメージの検証:
「軽量なAlpineを使っているつもりだったが、実は巨大なDebianベースだった」といった勘違いは、SizeやRootFS情報を確認することで即座に発見可能です。
・注意点:
inspectで確認できるのはあくまで「イメージのメタデータ」です。もしファイルの中身(ソースコードなど)を確認したい場合は、docker runで一時的にコンテナを起動し、docker cpやexecを使うのが一般的です。
このコマンドを使いこなせば、コンテナのブラックボックス化を防ぎ、より堅牢なインフラ構築ができるようになります。ぜひ日々の運用に取り入れてみてください。

コメント