はじめに
あらためてDockerについての学習をすすめるなかで理解したコマンドなどについて共有したいと思います。今回はdocker images
コマンドについて。
環境
・PCにインストールしたDocke起動
・PC:Windows
・Vscodeターミナルで実行
コマンドを実行した結果
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bi_app latest a39b802549a7 3 months ago 1.26GB
<none> <none> 2357e26078bc 3 months ago 1.26GB
<none> <none> cf4aaf741d85 3 months ago 1.26GB
so_app latest f16601b5af05 3 months ago 1.26GB
<none> <none> 97de8f235661 3 months ago 1.26GB
mysql <none> 6c55ddbef969 4 months ago 591MB
postgres latest d57ed788c154 4 months ago 434MB
docker images
このコマンドをどのディレクトリで実行しても同じ結果が返ってきます。つまりディレクトリは関係ないという事は分かるけど具体的にどいう仕組みなのか。
これを知りたかったので調べてみました。
コマンドの意味
docker images
のコマンドはディレクトリに関係なく同じ結果を返します。
これは、Dockerがホストマシン上の Docker デーモン(dockerd
)と通信して、保存されているイメージの一覧を取得しているからです。
どこから情報を取得しているのか?
docker images
は、ローカルに保存されている Docker イメージ の一覧を表示するコマンドです。これらのイメージは Docker が管理するストレージ に保存されており、特定のディレクトリとは関係ありません。
Dockerのストレージの場所は、環境によって異なりますが、一般的には以下のディレクトリに保存されています。
- Linux:
/var/lib/docker
- Windows(WSL2経由):
\\wsl$\docker-desktop-data\
- Mac:
/Users/<username>/Library/Containers/com.docker.docker/Data/
かってにDockerに接続している?
Dockerは クライアント・サーバーモデル になっていて、docker
コマンドを実行すると、裏で動いている Dockerデーモン(dockerd
)にリクエストを送ります。
そのため、docker images
を実行すると、自動的にデーモンに接続し、イメージの一覧を取得します。これは Dockerの仕様 です!
デーモンが動いていなければ、docker images
を実行してもエラーになります(例: Cannot connect to the Docker daemon
)。
👇エラー内容については下記サイトに一つ解決方法が記されています。
まとめ
-
docker images
は ディレクトリに関係なく ローカルのDockerデーモンから情報を取得する - Dockerは ストレージ領域 にイメージを保存している(
/var/lib/docker
など) -
docker
コマンドを使うと 自動的にDockerデーモンに接続 して情報を取得する
Dockerデーモンというなんとも強そうな名前
公式ドキュメントもあるので、より詳しく知りたい方は下記サイトを見てみることをお勧めします。
Dockerとはについての参考サイトも。