はじめに
この実験では、Docker イメージの詳細情報を確認するためにdocker image inspectコマンドを使用する方法を学びます。まずサンプルイメージをプルすることから始め、その後デフォルトの出力形式、JSON 形式、そして特定の詳細を抽出するためのカスタム Go テンプレートを使用してイメージを調査する方法を探ります。この実践的な経験を通じて、Docker イメージの特性や設定を効果的に調べるスキルを身につけることができます。
サンプルイメージを取得
このステップでは、レジストリから Docker イメージを取得 (pull) する方法を学びます。Docker イメージはコンテナの構成要素であり、アプリケーションを実行するために必要なアプリケーションコード、ライブラリ、依存関係、設定ファイルを含む読み取り専用のテンプレートです。
イメージを取得するには、docker pullコマンドの後にイメージ名を指定します。タグを指定しない場合、Docker はデフォルトでlatestタグを取得します。
Docker が正しくインストールされているかテストするために使用される非常に小さなイメージであるhello-worldイメージを取得してみましょう。
docker pull hello-world
イメージがダウンロードされていることを示す、以下のような出力が表示されるはずです:
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
この出力は、Docker がデフォルトのレジストリである Docker Hub からhello-worldイメージのlatestタグを取得していることを示しています。Pull completeと表示されている行は、イメージの異なるレイヤーがダウンロードされたことを示しています。
デフォルトフォーマットでイメージを検査
このステップでは、Docker イメージの詳細情報を確認する方法を学びます。docker inspectコマンドは、イメージ、コンテナ、ネットワーク、ボリュームなどの Docker オブジェクトに関する豊富な情報を提供します。デフォルトでは、構造化された形式で情報が出力されます。
イメージを調査するには、docker inspectコマンドの後にイメージ名または ID を指定します。前のステップで取得したhello-worldイメージを調査してみましょう。
docker inspect hello-world
このコマンドは、hello-worldイメージに関する大量の情報をデフォルト形式で出力します。出力には、イメージ ID、作成日時、アーキテクチャ、オペレーティングシステム、設定などの詳細が含まれます。
[
{
"Id": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
"RepoTags": ["hello-world:latest"],
"RepoDigests": [
"hello-world@sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591"
],
"Parent": "",
"Comment": "",
"Created": "2023-03-07T21:50:09.004511104Z",
"Container": "a928b81f51a91111111111111111111111111111111111111111111111111111",
"ContainerConfig": {
"Hostname": "a928b81f51a9",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": ["/hello"],
"Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"DockerVersion": "20.10.21",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": ["/hello"],
"Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1330,
"VirtualSize": 1330,
"GraphDriver": {
"Data": null,
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:2db29710123e5455b34e722505b562504b39e55355e344405b54d3153a94650b"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
このデフォルト出力は、イメージの設定とメタデータの包括的なビューを提供します。次のステップでは、特定の情報を抽出するためにこの出力をフォーマットする方法を学びます。
JSON フォーマットでイメージを検査
前のステップでは、hello-worldイメージを調査し、デフォルトの出力形式を確認しました。この形式は情報量が多いものの、プログラムで解析するのが難しい場合があります。Docker のinspectコマンドでは、--formatフラグを使用して出力形式を指定できます。特に有用な形式の一つが JSON です。
イメージを調査し、JSON 形式で出力を取得するには、docker inspectコマンドに--format jsonフラグを追加します。
hello-worldイメージをもう一度調査してみましょう。今回は出力を JSON 形式で表示します。
docker inspect --format json hello-world
このコマンドは前回と同じ情報を出力しますが、単一の JSON オブジェクトを含む JSON 配列としてフォーマットされます。
[
{
"Id": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
"RepoTags": ["hello-world:latest"],
"RepoDigests": [
"hello-world@sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591"
],
"Parent": "",
"Comment": "",
"Created": "2023-03-07T21:50:09.004511104Z",
"Container": "a928b81f51a91111111111111111111111111111111111111111111111111111",
"ContainerConfig": {
"Hostname": "a928b81f51a9",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": ["/hello"],
"Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"DockerVersion": "20.10.21",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": ["/hello"],
"Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 1330,
"VirtualSize": 1330,
"GraphDriver": {
"Data": null,
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:2db29710123e5455b34e722505b562504b39e55355e344405b54d3153a94650b"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
JSON 形式は、他のツールやスクリプトで出力を処理したい場合に特に便利です。
カスタム Go テンプレートでイメージを検査
デフォルト形式や JSON 形式に加えて、docker inspectコマンドでは Go テンプレートを使用して出力をフォーマットできます。これは非常に強力な機能で、特定のフィールドを抽出したり、必要な形式で正確に出力したりすることが可能です。
--formatフラグは Go テンプレート文字列を受け付けます。ドット表記を使用して調査対象オブジェクトのフィールドにアクセスできます。例えば、イメージ ID にアクセスするには.Idを使用します。ネストされたフィールドにアクセスするには、.Config.Cmdのようにドットを連結することで、コンテナが実行するコマンドを取得できます。
hello-worldイメージを調査し、イメージ ID とコンテナが実行するコマンドを抽出してみましょう。
docker inspect --format 'ID: {{.Id}} Command: {{.Config.Cmd}}' hello-world
このコマンドでは、Go テンプレート文字列'ID: {{.Id}} Command: {{.Config.Cmd}}'を使用しています。
{{.Id}}はイメージオブジェクトのIdフィールドにアクセスします{{.Config.Cmd}}はConfigオブジェクト内のCmdフィールドにアクセスします
出力はテンプレートに従ってフォーマットされます:
ID: sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591 Command: [/hello]
Go テンプレートを使用すれば、デフォルトのdocker inspect出力で利用可能なあらゆる情報を抽出できます。これはスクリプト作成やタスク自動化に非常に便利です。
まとめ
この実験では、レジストリから Docker イメージをダウンロードするためにdocker pullコマンドを使用する方法を学び、具体的な例としてhello-worldイメージを取得しました。その後、取得したイメージの詳細情報を確認するためにdocker inspectコマンドを調査しました。
デフォルトの出力形式を使用してイメージを調査する練習を行い、イメージの特性に関する包括的な概要を確認しました。提供された内容には完全には記載されていませんが、その後のステップではおそらく JSON 形式やカスタム Go テンプレートを使用してdocker inspectの出力をフォーマットし、特定の情報を抽出する方法を探求し、イメージ詳細を分析するためのコマンドの柔軟性を示すことになるでしょう。



