はじめに
この実験では、Docker イメージの詳細情報を確認するためにdocker image inspect
コマンドを使用する方法を学びます。まずサンプルイメージをプルすることから始め、その後デフォルトの出力形式、JSON 形式、そして特定の詳細を抽出するためのカスタム Go テンプレートを使用してイメージを調査する方法を探ります。この実践的な経験を通じて、Docker イメージの特性や設定を効果的に調べるスキルを身につけることができます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、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"
}
}
]
このデフォルト出力は、イメージの設定とメタデータの包括的なビューを提供します。次のステップでは、特定の情報を抽出するためにこの出力をフォーマットする方法を学びます。
前のステップでは、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 形式は、他のツールやスクリプトで出力を処理したい場合に特に便利です。
デフォルト形式や 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
の出力をフォーマットし、特定の情報を抽出する方法を探求し、イメージ詳細を分析するためのコマンドの柔軟性を示すことになるでしょう。