Docker映像存储在哪里? Docker容器路径介绍

Docker has been widely adopted and is used to run and scale applications in production. Additionally, it can be used to start applications quickly by executing a single Docker command.

Docker已被广泛采用,并用于在生产中运行和扩展应用程序。 此外,它可以通过执行单个Docker命令来快速启动应用程序。

Companies also are investing more and more effort into improving development in local and remote Docker containers, which comes with a lot of advantages as well.

公司还投入越来越多的精力来改善本地和远程Docker容器的开发,这也具有很多优势。

You can get the basic information about your Docker configuration by executing:

您可以通过执行以下命令获取有关Docker配置的基本信息:

$ docker info

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

The output contains information about your storage driver and your docker root directory.

输出包含有关存储驱动程序和docker根目录的信息。

Docker映像和容器的存储位置 (The storage location of Docker images and containers)

A Docker container consists of network settings, volumes, and images. The location of Docker files depends on your operating system. Here is an overview for the most used operating systems:

Docker容器由网络设置,卷和映像组成。 Docker文件的位置取决于您的操作系统。 以下是最常用的操作系统的概述:

  • Ubuntu: /var/lib/docker/

    Ubuntu: /var/lib/docker/

  • Fedora: /var/lib/docker/

    Fedora的: /var/lib/docker/

  • Debian: /var/lib/docker/

    Debian: /var/lib/docker/

  • Windows: C:\ProgramData\DockerDesktop

    Windows: C:\ProgramData\DockerDesktop

  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

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

In macOS and Windows, Docker runs Linux containers in a virtual environment. Therefore, there are some additional things to know.

在macOS和Windows中,Docker在虚拟环境中运行Linux容器。 因此,还有一些其他事情要知道。

Mac版Docker (Docker for Mac)

Docker is not natively compatible with macOS, so Hyperkit is used to run a virtual image. Its virtual image data is located in:  

Docker与macOS本身不兼容,因此Hyperkit用于运行虚拟映像。 其虚拟图像数据位于:

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

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

Within the virtual image, the path is the default Docker path /var/lib/docker.

在虚拟映像中,该路径是默认Docker路径/var/lib/docker

You can investigate your Docker root directory by creating a shell in the virtual environment:

您可以通过在虚拟环境中创建外壳来调查Docker根目录:

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

You can kill this session by pressing Ctrl+a, followed by pressing k and y.

您可以通过按Ctrl + a ,然后按ky终止此会话。

Windows版Docker (Docker for Windows)

On Windows, Docker is a bit fractioned. There are native Windows containers that work similarly to Linux containers. Linux containers are run in a minimal Hyper-V based virtual environment.

在Windows上,Docker有点分散。 有些本机Windows容器的工作方式与Linux容器类似。 Linux容器在最小的基于Hyper-V的虚拟环境中运行。

The configuration and the virtual image to execute linux images are saved in the default Docker root folder.

执行Linux映像的配置和虚拟映像保存在默认Docker根文件夹中。

C:\ProgramData\DockerDesktop

C:\ProgramData\DockerDesktop

If you inspect regular images then you will get linux paths like:

如果您检查常规映像,则将获得linux路径,例如:

$ docker inspect nginx

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

You can connect to the virtual image by:

您可以通过以下方式连接到虚拟映像:

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

There, you can go to the referenced location:

在这里,您可以转到参考位置:

$ 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根文件夹的内部结构 (The internal structure of the Docker root folder)

Inside /var/lib/docker, different information is stored. For example, data for containers, volumes, builds, networks, and clusters.

/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映像 (Docker images)

The heaviest contents are usually images. If you use the default storage driver overlay2, then your Docker images are stored in /var/lib/docker/overlay2. There, you can find different files that represent read-only layers of a Docker image and a layer on top of it that contains your changes.

最重的内容通常是图像。 如果使用默认的存储驱动程序overlay2,则您的Docker映像将存储在/var/lib/docker/overlay2 。 在这里,您可以找到不同的文件,这些文件分别代表Docker映像的只读层和其上包含您的更改的层。

Let’s explore the content by using an example:

让我们通过一个示例来探索内容:

$ docker image pull nginx
$ docker image inspect nginx

[
    {
        "Id": "sha256:207...6e1",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256: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"
            },
...

The LowerDir contains the read-only layers of an image. The read-write layer that represents changes are part of the UpperDir. In my case, the NGINX UpperDir folder contains the log files:

LowerDir包含图像的只读层。 表示更改的读写层是UpperDir的一部分。 就我而言,NGINX UpperDir文件夹包含日志文件:

$ 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

The MergedDir represents the result of the UpperDir and LowerDir that is used by Docker to run the container. The WorkDir is an internal directory for overlay2 and should be empty.

MergedDir表示Docker用于运行容器的UpperDirLowerDir的结果。 WorkDir是overlay2的内部目录,应该为空。

Docker卷 (Docker Volumes)

It is possible to add a persistent store to containers to keep data longer than the container exists or to share the volume with the host or with other containers. A container can be started with a volume by using the -v option:

可以向容器添加持久性存储,以使数据保存的时间长于容器的存在,或者可以与主机或其他容器共享卷。 可以使用-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.

引用的目录包含来自NGINX容器的/var/log位置的文件。

$ 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

清理Docker使用的空间 (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命令清理未使用的容器。 可以通过执行以下操作清除容器,网络,映像和构建缓存:

$ 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.

Docker是许多人的环境和工具的重要组成部分。 有时候,Docker通过非常聪明的方式解决问题而又不告诉用户幕后事情是如何做的,有点像魔术。 不过,Docker是一种常规工具,可将重型零件存储在可以打开和更改的位置。

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.

有时,存储空间可能会很快用完。 因此,检查其根文件夹很有用,但不建议手动删除或更改任何文件。 而是可以使用prune命令释放磁盘空间。



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

希望您喜欢这篇文章。 如果您喜欢它并感到需要掌声,请在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 :)

快乐的Docker探索:)



参考文献 (References)

  • Docker storagediver documentation

    Docker Storagediver文档

    Docker storagediver documentationhttps://docs.docker.com/storage/storagedriver/

    Docker storagediver文档https://docs.docker.com/storage/storagedriver/

  • Documentation Overlay filesystem

    文档覆盖文件系统

    Documentation Overlay filesystemhttps://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt

    文档覆盖文件系统https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt

翻译自: https://www.freecodecamp.org/news/where-are-docker-images-stored-docker-container-paths-explained/

你可能感兴趣的:(linux,java,docker,python,大数据)