Docker где хранятся образы в windows 10

I'm using the Windows 10 Home operating system. I have installed Docker toolbox. I have created a docker image of my .net core application by using following command. $ docker build -t helloWorld:...

If you are on windows 10 and running windows containers

docker running windows containers

In the above image, docker is running windows containers. So its showing switch to linux containers.

First run docker info command (more specific docker info --format “{{json .DockerRootDir}}”).

You should see root dir as

Docker Root Dir: C:ProgramDataDocker

Now run a command to pull an image like

docker pull hello-world

After it pulls the image, you can look into the docker root dir.

Notice the current modified date time. In one of the folders you can see the sha of the layers.

Docker location on windows

Finally, you also have to take a look into the following folder, if you want to know where the images are downloaded. The two folders above and below are

  • C:ProgramDataDockerimagewindowsfilter
  • C:ProgramDataDockerwindowsfilter

Docker location

Now for linux images.

If your docker is running windows containers, and then if you try to fetch a linux based container such as nginx, like so

docker pull nginx:latest

you will get a message as follows.

latest: Pulling from library/nginx
no matching manifest for windows/amd64 10.0.18363 in the manifest list entries

So switch to linux contaners. See the very first image.

Once the docker for linux is running, run the command again.

docker pull nginx:latest

You can see that image is downloading.

Now where is this image downloaded on your hard disk? docker info command may not help much in this case.

So start again. Click Settings and now «Switch to Windows Containers…»

Settings On Docker Desktop for linux containers

And now see the path.

Settings Page on docker desktop showing the path

On my machine, it’s C:ProgramDataDockerDesktopvm-data

LinuxImages location

Note the date modified column. Notice and observe that after you pull or remove a linux based image.

That’s a diskspace reserved for linux env, so you will not be able to browse further down to see where the image is.

but if you have to, then launch a linux based VM, install docker and explore the path
/var/lib/docker/

Sometimes you may encounter permission issues. If so see this and this

NOTE: Am super new to both Windows and Docker

The tutorial I’ve been using says that they are under /var/lib/docker/containers if we’re using Linux, but I can’t seem to find that on my Windows machine.

Thanks!

asked Jun 9, 2015 at 5:45

Mina Han's user avatar

2

Enter docker-machine with

docker-machine ssh 

there you should find your containers.

sudo ls /var/lib/docker/containers

orad's user avatar

orad

14.8k22 gold badges76 silver badges112 bronze badges

answered Jun 9, 2015 at 5:49

christian's user avatar

christianchristian

8,84210 gold badges39 silver badges51 bronze badges

3

After review some post on Stackoverflow and Google. I found this directory :

C:ProgramDataMicrosoftWindowsHyper-V

Here you can fin the configuration with the Virtual Machines

C:ProgramDataMicrosoftWindowsHyper-VVirtual Machines

Another important thing is the images are virtualized by the Hyper-V, so the info should be stored here.

C:UsersPublicDocumentsHyper-VVirtual hard disks

answered Mar 9, 2017 at 15:40

codesandtags's user avatar

Update 2020 for WSL2

If you’re using this with WSL2, docker images will be maintained inside of your wsl drive available at \wsl$ per this github issue:

  • Windows: \wsl$docker-desktop-datamntwsldocker-desktop-datadatadockervolumes
  • Linux: sudo ls /mnt/wsl/docker-desktop-data/data/docker/volumes

answered Oct 29, 2020 at 23:50

KyleMit's user avatar

KyleMitKyleMit

36.4k63 gold badges440 silver badges635 bronze badges

Docker installed on windows with docker toolbox(using virtual box in place of hyper-v)
one VM is created on at
C:UsersYOURUSERNAME.dockermachinemachines with name default so you can find all VM files in default folder.

you can connect this vm using

docker-machine ssh

and you can find pulled images and container under this path (you may need to use sudo sometimes)

/var/lib/docker

answered Sep 5, 2018 at 7:43

Raghavendra's user avatar

RaghavendraRaghavendra

1,3914 gold badges18 silver badges28 bronze badges

I use WSL 2 and my images downloaded to next location:
c:Users<User>AppDataLocalDockerwsldata
Hope it helps.

answered Jan 5 at 5:22

Oleksandr Yanov's user avatar

NOTE: Am super new to both Windows and Docker

The tutorial I’ve been using says that they are under /var/lib/docker/containers if we’re using Linux, but I can’t seem to find that on my Windows machine.

Thanks!

asked Jun 9, 2015 at 5:45

Mina Han's user avatar

2

Enter docker-machine with

docker-machine ssh 

there you should find your containers.

sudo ls /var/lib/docker/containers

orad's user avatar

orad

14.8k22 gold badges76 silver badges112 bronze badges

answered Jun 9, 2015 at 5:49

christian's user avatar

christianchristian

8,84210 gold badges39 silver badges51 bronze badges

3

After review some post on Stackoverflow and Google. I found this directory :

C:ProgramDataMicrosoftWindowsHyper-V

Here you can fin the configuration with the Virtual Machines

C:ProgramDataMicrosoftWindowsHyper-VVirtual Machines

Another important thing is the images are virtualized by the Hyper-V, so the info should be stored here.

C:UsersPublicDocumentsHyper-VVirtual hard disks

answered Mar 9, 2017 at 15:40

codesandtags's user avatar

Update 2020 for WSL2

If you’re using this with WSL2, docker images will be maintained inside of your wsl drive available at \wsl$ per this github issue:

  • Windows: \wsl$docker-desktop-datamntwsldocker-desktop-datadatadockervolumes
  • Linux: sudo ls /mnt/wsl/docker-desktop-data/data/docker/volumes

answered Oct 29, 2020 at 23:50

KyleMit's user avatar

KyleMitKyleMit

36.4k63 gold badges440 silver badges635 bronze badges

Docker installed on windows with docker toolbox(using virtual box in place of hyper-v)
one VM is created on at
C:UsersYOURUSERNAME.dockermachinemachines with name default so you can find all VM files in default folder.

you can connect this vm using

docker-machine ssh

and you can find pulled images and container under this path (you may need to use sudo sometimes)

/var/lib/docker

answered Sep 5, 2018 at 7:43

Raghavendra's user avatar

RaghavendraRaghavendra

1,3914 gold badges18 silver badges28 bronze badges

I use WSL 2 and my images downloaded to next location:
c:Users<User>AppDataLocalDockerwsldata
Hope it helps.

answered Jan 5 at 5:22

Oleksandr Yanov's user avatar

Where are Docker Images Stored? Docker Container Paths Explained

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.

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.

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

$ docker info

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

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

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:

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Windows: C:ProgramDataDockerDesktop
  • 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.

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:  

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

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

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

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

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.

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

C:ProgramDataDockerDesktop

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

$ 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

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.

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

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:

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

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:

$ 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 work at eBay Kleinanzeigen, one of the biggest classified companies globally. By the way, we are hiring!

Happy Docker exploring :)

References

  • Docker storagediver documentation
    https://docs.docker.com/storage/storagedriver/
  • Documentation Overlay filesystem
    https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt


Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Docker Desktop в Windows 10 создаёт WSL 2 дистрибутив docker-desktop-data и соответствующий виртуальный диск для него, который обычно расположен здесь:

%USERPROFILE%AppDataLocalDockerwsldataext4.vhdx

Именно тут хранятся все контейнеры и образы докера. Для перемещения этого диска в другое место нужно выполнить несколько шагов.

Шаг 1. Выйти из Docker Desktop (если запущен).

Контекстное меню Docker Desktop

Завершение работы Docker Desktop

Шаг 2. В командной строке выполняем команду для вывода списка дистрибутивов Linux:

wsl --list -v
  • wsl — команда для взаимодействия с подсистемой Linux в Windows;
  • --list — вывести список дистрибутивов Linux;
  • -v — вывести расширенную информацию.

Результат выполнения команды должен быть примерно таким:

Результат выполнения команды wsl для вывода списка дистрибутивов Linux

Список дистрибутивов Linux с расширенной информацией

Состояние дистрибутивов (STATE) должно быть Stopped.

Шаг 3. Экспортируем данные в файл. Можно экспортировать в любое место, этот файл позже можно будет удалить. Например, в корень диска f::

wsl --export docker-desktop-data "f:docker-desktop-data.tar"

Шаг 4. Удалим дистрибутив docker-desktop-data из WSL. Во время выполнения этой операции виртуальный диск со всеми данными докера будет удалён.

wsl --unregister docker-desktop-data

Шаг 5. Импортируем дистрибутив обратно в WSL, но теперь в новое место. Например, в папку f:dockerwsl (папка должна быть предварительно создана):

wsl --import docker-desktop-data "f:dockerwsl" "f:docker-desktop-data.tar" --version 2

Шаг 6. Запускаем Docker Desktop и проверяем, что всё работает. Если всё хорошо, можно удалить файл, который мы создали при экспорте дистрибутива на 3 шаге (f:docker-desktop-data.tar).

На этом всё. Данные докера хранятся теперь в новом месте.

Статья основана на ответе на вопрос «How can I change the location of docker images when using Docker Desktop on WSL2 with Windows 10 Home?» cо StackOverflow.

При написании статьи использовалось следующее ПО:

  • Windows 10 Pro 20H2
  • Docker Desktop 3.5.1 (66090)

Docker использует два типа форматов для представления запущенных процессов — образы и контейнеры, и оба хранят данные на диске вашего компьютера. Мы поговорим о командах, которые Docker предоставляет для обработки данных, и о том, как вы можете использовать их для доступа к файлам изображений и контейнеров.

Разница между изображениями и контейнерами

Образы — это то, что вы создаете, когда запускаете docker build; они хранятся в реестре контейнеров, таком как Docker Hub, и содержат все файлы и код для запуска приложения. Вы можете думать о них как о файлах ISO для операционной системы виртуальной машины.

Контейнеры создаются из образов, и они похожи на настоящую виртуальную машину, на которой выполняется приложение. У вас может быть несколько контейнеров, работающих параллельно с одним и тем же образом. Каждый контейнер будет иметь свою собственную файловую систему, необязательно созданную с помощью «монтирования томов», которые привязывают данные от хоста к контейнеру.

Изображения хранят все содержимое изображения на вашем диске. Всякий раз, когда вы берете изображение из Интернета, оно загружается и сохраняется, обычно навсегда. Изображения могут быть очень большими, поэтому со временем они могут накапливаться, особенно для ноутбуков с ограниченным объемом памяти.

Если вы хотите получить прямой доступ к данным изображения, они обычно хранятся в следующих местах:

  • Linux: / var / lib / docker /
  • Windows: C: ProgramData DockerDesktop
  • macOS: ~ / Библиотека / Контейнеры / com.docker.docker / Data / vms / 0 /

Однако трогать эти данные — плохая идея. Хранилище Docker сложное и на самом деле сильно различается в зависимости от какой драйвер памяти он использует. Linux теперь по умолчанию использует overlay2 в большинстве дистрибутивов, что даже недоступно для большинства конечных пользователей. Игнорирование этого может привести к потере данных.

Вместо этого Docker предоставляет управляемые команды для обработки изображений. Вы можете просмотреть все версии загруженных изображений с помощью простой команды:

образ докера ls

К счастью, это не так плохо, как кажется, поскольку в образах Docker версии хранятся постепенно. Это означает, что всякий раз, когда вы загружаете новую версию, она заменяет только те части, которые были изменены. Если вы часто используете один и тот же образ снова и снова, вы, вероятно, не будете слишком дорого стоить для хранения.

Однако, если вы используете много разных изображений, у вас может быть сохранено много изображений, которые даже больше не используются. Чтобы очистить их, Docker предоставляет встроенную команду для запуска сборки мусора. Это приведет к удалению всех изображений, на которые нет ссылок, т. Е. Не отмеченных тегами или не упоминаемых каким-либо контейнером.

обрезка образа докера

Чтобы удалить все старые образы, не используемые существующими контейнерами, запустите его с флагом -a:

docker image prune -a

Это охватывает основной вариант использования, но есть еще несколько полезных команд:

  • inspect: отображает информацию о версии контейнера.
  • save & load: сохраняет и загружает изображения в tar-архив.
  • rm: удаляет изображение напрямую.
  • pull / push: обновления из удаленного реестра.
  • история: предоставляет журнал изменений.

Работа с хранилищем контейнеров Docker

Вы можете просмотреть всю информацию о контейнере с помощью docker inspect, который показывает драйверы и данные файловой системы, а также все существующие монтирования и тома.

докер проверяет идентификатор контейнера

Контейнеры хранят данные двумя способами. Во-первых, это базовая файловая система, которая копируется из образа и уникальна для каждого контейнера. Docker использует «нижний каталог» и «верхний каталог», которые представляют собой отдельные уровни, которые объединяются в одну гибридную файловую систему. Нижний каталог хранит данные базового образа, а верхний каталог хранит все, что было изменено во время выполнения, например файлы журнала. В любом случае их хранение зависит от того, какой драйвер файловой системы Docker настроен на использование.

Тогда есть горы, которые привязывают каталоги с хоста к контейнеру, обычно управляются автоматически с помощью функции Docker, называемой тома. Они обычно хранятся и доступны для конечных пользователей. Если вы выполняете какую-либо работу, требующую изменения данных в запущенных контейнерах, вам, вероятно, следует изменить том или привязать монтирование.

Доступ к томам

Доступ к монтированию привязки можно получить напрямую, и это отличный выбор, если вы хотите сохранить конфигурацию, которая используется для многих контейнеров, или хранить доступные данные, которые сохраняются при перезапуске контейнера.

Если вы хотите изменить данные, хранящиеся в томах, вы тоже можете это сделать. Они хранятся в стандартном формате, доступном из Linux:

/ вар / библиотека / докер / тома / volumeID / _data

Вы можете получить идентификатор тома и информацию с помощью docker volume inspect.

Как и изображения, тома могут устареть. Вы можете легко их удалить, но их резервное копирование и перенос — более сложный процесс.

объем докера удалить объем докера rm volumeID

Изменение файловой системы контейнера Docker

Если вы хотите изменить файловую систему контейнера, как и изображения, это плохая идея. В большинстве случаев вам следует создать новую версию контейнера с обновленными изменениями и развернуть обновление.

Однако, если вы хотите внести некоторые быстрые изменения, не останавливая контейнер, лучший способ — просто открыть оболочку bash внутри контейнера и изменить ее с помощью Docker. Сделать это очень просто — запустите docker exec в контейнере и передайте «bash» в качестве команды:

docker exec -it контейнер bash

Отсюда вы можете использовать обычные команды Linux. Если вы хотите сделать это удаленно, вы можете установить SSH-сервер в свой контейнер и привязать порт 22 к другому порту на хосте.

It provides all the steps required to change the images and containers path of the Docker Desktop on Windows 10.

The default path of Docker Desktop data is C:ProgramDataDocker. The main issue with Docker in C drive is the space limitation. We might have allocated low space to C drive while installing Windows Operation System. Also, the Docker images and containers need a good amount of space on the disk. In such cases, we have to move the Docker images and containers to another drive having sufficient space. This tutorial provides all the steps required to change the images and containers path of the Docker Desktop on Windows 10. The steps should be the same on other versions of the Windows Operating System.

Notes: In case you are using WSL 2 for Docker Desktop, you can skip to the section Configuring WSL 2 Virtual Disk location. You may also follow the Symlink approach as mentioned in the Approach C section. Also, make sure to take the required backups before starting the process in case of any failure in either of the approaches.

Approach A — Configure Data Root

Add daemon.json

Open the location C:ProgramDataDockerconfig and add daemon.json if it does not exist.

Stop Docker Desktop

Stop the Docker Desktop before making the changes.

Update daemon.json

Now update the daemon.json as shown below.

{
"data-root": "E:\ProgramData\Docker"
}

It will specify the path to store all the images, containers, and layers out of the C drive.

Start Docker Desktop

Now start the Docker Desktop after applying the changes.

Test Changes

We can also test the changes by issuing the below-mentioned command using PowerShell.

docker pull hello-world

It should create the files to the new location.

Approach B — Configure WSL 2 Data Location

Configuring WSL 2 Virtual Disk location

This step is specific for the Docker Desktop installation with WSL 2. The WSL 2 Docker Desktop Data Virtual Machine default location is %USERPROFILE%AppDataLocalDockerwsldataext4.vhdx. You can follow the below-listed steps to relocate the docker data.

Step 1 — Shut down the Docker Desktop by right-clicking the Docker Tray Icon as shown in Fig 1.

Docker Desktop with WSL 2 - Relocate the Data - Quit Docker

Fig 1

Step 2 — Relocate the docker-desktop-data virtual machine disk image using the below-mentioned commands as shown in Fig 2.

wsl --shutdown

wsl --export docker-desktop-data docker-desktop-data.tar

wsl --unregister docker-desktop-data

wsl --import docker-desktop-data e:dockerwsldata docker-desktop-data.tar --version 2

Docker Desktop with WSL 2 - Relocate the Data - Move WSL Virtual Disk

Fig 2

Step 3 — Delete %USERPROFILE%docker-desktop-data.tar.

Step 4 — Start Docker Desktop. It should start using the new location of WSL data.

Approach C — Configure Symlinks

In this approach, we will simply stop the Docker Desktop, move the space-eating directories to another drive having sufficient space, and finally creating symlinks.

Step 1 — Stop Docker Desktop.

Step 2 — Relocate the existing directories %USERPROFILE%AppDataLocalDocker and C:ProgramDataDocker to new directories. For example — move %USERPROFILE%AppDataLocalDocker to E:DockerAppData and C:ProgramDataDocker to E:DockerProgramData. Make sure that you completely remove the existing directories from the C drive before creating the symlinks as shown below.

# Link AppData - Replace youruser with actual user
mklink /j "C:UsersyouruserAppDataLocalDocker" "E:DockerAppData"

# Link ProgramData
mklink /j "C:ProgramDataDocker" "E:DockerProgramData"

Step 3 — Now start the Docker Desktop. It should start the Docker Engine using the new directories.

Summary

This tutorial provided all the steps required to specify the Docker Desktop location to store the containers, images, and volumes. It also provided the steps to relocate the WSL docker-desktop-data virtual machine disk image to a new location for Docker Desktop installed with WSL 2.

Docker хранит загруженные образы, запущенные контейнеры и данные постоянного тома в едином общем каталоге root на вашем системном диске.

Вы можете настроить конфигурацию так, чтобы использовать внешний диск, сетевой ресурс или второй внутренний диск, если вам нужно добавить хранилище к вашей установке.

🐳 Где хранятся образы, контейнеры и тома Docker в хост-системе Linux?

Предварительные условия

Основная часть этого руководства относится к Docker Engine для Linux и Docker Desktop для Windows и Mac.

Вам нужно найти файл Docker daemon.json на всех трех платформах.

Где docker хранит данные на Mac,Linux, Windows?

Он будет находиться в одном из следующих мест:

  • /etc/docker/daemon.json на Linux.
  • %programdata%dockerconfigdaemon.json на Windows.
  • ~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/etc/docker/daemon.json на Mac.

Docker рекомендует пользователям Windows и Mac обновлять конфигурационный файл через пользовательский интерфейс, а не вручную вносить изменения в текстовом редакторе.

Вы можете получить доступ к экрану настроек, перейдя в Preferences > Docker Engine > Edit file в интерфейсе Docker Desktop.

Изменение каталога данных

Расположение каталога данных Docker контролируется параметром data-root в вашем конфигурационном файле.

В старых версиях Docker, выпущенных до версии 17.06, вместо этого используется graph.

Вы можете проверить, какая версия у вас установлена, выполнив команду docker version.

$ docker version
...
Server: Docker Engine - Community
  Engine:
    Version: 20.10.17

Найдите или добавьте соответствующий ключ в файл конфигурации.

В качестве его значения задайте желаемый путь к каталогу.

Вот пример Linux, при котором будет хранить данные Docker на внешнем диске, смонтированном в файловой системе:

{
    "data-root": "/mnt/docker-data"
}

После внесения изменений необходимо перезапустить демон Docker:

$ sudo service docker restart

Docker Desktop можно перезапустить на Windows и Mac, выйдя из него, а затем запустив новый экземпляр.

Вам следует скопировать содержимое текущего каталога данных на новый путь, если вы хотите сохранить существующий контент.

В противном случае вы начнете с чистого листа, не имея доступа к ранее созданным контейнерам и образам.

Изменение каталога данных без перезапуска

Вы можете переместить каталог данных без перезапуска демона, создав симлинк из /var/lib/docker в новое место.

Это может быть полезно, если у вас не хватает места на хосте, где внеплановый перезапуск службы Docker не представляется возможным.

Скопируйте существующие данные Docker в новый каталог:

$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data

Затем создайте симлинк, который преобразует /var/lib/docker в целевое местоположение:

$ sudo ln -s /mnt/docker-data/ /var/lib/docker

Не используйте эту технику для рабочих нагрузок, которые быстро изменяют данные файловой системы.

Существует риск возникновения несоответствий, если данные будут записаны за время между копированием существующего каталога и созданием симлинка.

Не используйте эту технику для рабочих нагрузок, которые быстро изменяют данные файловой системы. Существует риск возникновения несоответствий, если данные будут записаны за время между копированием существующего каталога и созданием симлинка.

Что на самом деле изменится?

Изменение корневого каталога Docker влияет на все различные типы данных, которые хранит демон.

Сюда входят ваши образы, контейнеры, установленные плагины, конфигурация Swarm, тома, а также кэш сборки Docker.

При изменении пути все эти данные будут записаны в новое место.

Вы не можете выборочно перемещать определенные типы в отдельные точки монтирования.

Это означает, что важно выбрать место хранения, которое обеспечит хорошую общую производительность.

Использование медленного внешнего диска может ухудшить отзывчивость операций docker CLI, даже если он подходит для определенных типов данных, например, для долгосрочного хранения образов.

В отсутствие поддержки путей передачи данных для каждого типа данных, обрезка неиспользуемых ресурсов может быть лучшим способом управления требованиями Docker к хранению данных.

Вместо того чтобы выделять Docker больше места, очистите избыточные ресурсы и перенесите неиспользуемые образы в отдельный центральный реестр.

Это может освободить значительное пространство на вашем хосте.

Одноразовое использование другого каталога данных

Вы можете вручную запустить Docker Engine с определенным каталогом данных, передав флаг –data-root при запуске демона. Это можно использовать для переключения между каталогами данных или запуска чистого экземпляра без существующих данных.

$ sudo /usr/bin/dockerd --data-root /mnt/docker-data

Флаг отменяет путь к директории, указанный в файле daemon.json.

Сконфигурированный каталог останется нетронутым, и вы сможете вернуться к этому экземпляру в будущем.

Заключение

Docker хранит все свои данные, включая собранные и извлеченные образы, созданные контейнеры и тома, в одном дереве каталогов.

Корнем обычно является /var/lib/docker, но вы можете настроить его, добавив соответствующую настройку в свой конфигурационный файл или указав флаг –data-root при запуске демона.

Изменение каталога данных означает, что существующие данные не появятся в Docker, пока вы не скопируете их по новому пути. Вы можете использовать эту возможность для поддержания нескольких независимых хранилищ Docker, например, одно для личных проектов, а другое для работы.

Однако перед переключением контекстов необходимо перезапустить демон, поскольку одновременно может работать только один экземпляр.

см. также:

  • Как назвать или переименовать контейнеры Docker
  • 🐳 Автоматический запуск Docker контейнера
  • 🐳 Понимание инструкции Dockerfile VOLUME
  • 🐳 Как установить ограничение памяти для контейнеров Docker
  • 🐳 Преобразование команд Docker run для команд в Docker-Compose

Понравилась статья? Поделить с друзьями:
  • Docker windows 10 установка hyper v
  • Docker windows 10 wsl 2 or hyper v
  • Docker windows 10 wsl 2 installation is incomplete
  • Docker toolbox windows 7 64 bit
  • Docker mount windows folder to container