Dockerイメージはどこに保存されますか?Dockerコンテナパスの説明

Dockerは広く採用されており、本番環境でアプリケーションを実行およびスケーリングするために使用されます。さらに、単一のDockerコマンドを実行することで、アプリケーションをすばやく起動するために使用できます。

企業はまた、ローカルおよびリモートのDockerコンテナーの開発を改善するためにますます多くの努力を費やしており、これには多くの利点もあります。

以下を実行すると、Docker構成に関する基本情報を取得できます。

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

出力には、ストレージドライバーとDockerルートディレクトリに関する情報が含まれています。

Dockerイメージとコンテナーの保存場所

Dockerコンテナーは、ネットワーク設定、ボリューム、およびイメージで構成されます。Dockerファイルの場所は、オペレーティングシステムによって異なります。最もよく使用されるオペレーティングシステムの概要は次のとおりです。

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • ウィンドウズ: C:\ProgramData\DockerDesktop
  • マックOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

macOSとWindowsでは、Dockerは仮想環境でLinuxコンテナを実行します。したがって、知っておくべきいくつかの追加事項があります。

Mac用Docker

DockerはmacOSとネイティブに互換性がないため、Hyperkitを使用して仮想イメージを実行します。その仮想画像データは次の場所にあります。  

~/Library/Containers/com.docker.docker/Data/vms/0

仮想イメージ内では、パスはデフォルトのDockerパス/var/lib/dockerです。

仮想環境でシェルを作成することにより、Dockerルートディレクトリを調査できます。

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Ctrl + aを押してから、kyを押すと、このセッションを強制終了できます。

Docker for Windows

Windowsでは、Dockerは少し細分化されています。Linuxコンテナと同様に機能するネイティブWindowsコンテナがあります。Linuxコンテナーは、最小限のHyper-Vベースの仮想環境で実行されます。

Linuxイメージを実行するための構成と仮想イメージは、デフォルトのDockerルートフォルダーに保存されます。

C:\ProgramData\DockerDesktop

通常のイメージを検査すると、次のようなLinuxパスが得られます。

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

次の方法で仮想イメージに接続できます。

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

そこで、参照されている場所に移動できます。

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

Dockerルートフォルダーの内部構造

内部には/var/lib/docker、さまざまな情報が保存されています。たとえば、コンテナー、ボリューム、ビルド、ネットワーク、およびクラスターのデータ。

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

Dockerイメージ

最も重いコンテンツは通常画像です。デフォルトのストレージドライバーoverlay2を使用する場合、Dockerイメージはに保存され/var/lib/docker/overlay2ます。そこでは、Dockerイメージの読み取り専用レイヤーと、その上に変更を含むレイヤーを表すさまざまなファイルを見つけることができます。

例を使用してコンテンツを調べてみましょう。

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "[email protected]:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

LowerDirは、画像の読み取り専用の層を含みます。変更を表す読み取り/書き込みレイヤーは、UpperDirの一部です。私の場合、NGINXUpperDirフォルダーにはログファイルが含まれています。

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

MergedDirは結果を表しUpperDirLowerDirコンテナを実行するためにドッカーで使用されます。WORKDIRはoverlay2ための内部ディレクトリであり、空でなければなりません。

Dockerボリューム

永続ストアをコンテナーに追加して、コンテナーが存在するよりも長くデータを保持したり、ホストまたは他のコンテナーとボリュームを共有したりすることができます。-vオプションを使用して、ボリュームでコンテナーを開始できます。

$ docker run --name nginx_container -v /var/log nginx

We can get information about the connected volume location by:

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

The referenced directory contains files from the location /var/log of the NGINX container.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

Clean up space used by Docker

It is recommended to use the Docker command to clean up unused containers. Container, networks, images, and the build cache can be cleaned up by executing:

$ docker system prune -a

Additionally, you can also remove unused volumes by executing:

$ docker volumes prune

Summary

Docker is an important part of many people’s environments and tooling. Sometimes, Docker feels a bit like magic by solving issues in a very smart way without telling the user how things are done behind the scenes. Still, Docker is a regular tool that stores its heavy parts in locations that can be opened and changed.

Sometimes, storage can fill up quickly. Therefore, it’s useful to inspect its root folder, but it is not recommended to delete or change any files manually. Instead, the prune commands can be used to free up disk space.

I hope you enjoyed the article. If you like it and feel the need for a round of applause, follow me on Twitter.

I am a co-founder of our revolutionary journey platform called Explore The World. We are a young startup located in Dresden, Germany and will target the German market first. Reach out to me if you have feedback and questions about any topic.

Happy Docker exploring :)

References

  • Docker storagediver documentation

    //docs.docker.com/storage/storagedriver/

  • Documentation Overlay filesystem

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt