Перейти к содержанию

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

Опубликовано
  • Админы

Хотите узнать, где находятся образы, контейнеры и тома Docker?

В типичной среде Linux образы Docker и данные контейнеров можно найти в:

/var/lib/docker/

Если на вашем сервере не хватает места, вам обязательно следует заглянуть в этот каталог.

В основном, все связанные с Docker сущности находятся в /var/lib/docker.

Но давайте рассмотрим его более конкретно, на примере образа и контейнера Alpine.

Цитата

Примечание: Пожалуйста, обратите внимание, что эта информация предназначена только для образовательных целей. Манипуляции с каталогами/файлами Docker хост-системы никогда не рекомендуются. Команды docker и docker-compose всегда должны быть предпочтительным методом. Доступ к физически расположенным каталогам/файлам Docker должен осуществляться только в крайнем случае в чрезвычайных ситуациях.

 

Расположение образов Docker

Всякий раз, когда вы используете команду docker pull или запускаете docker-compose up -d для подготовки запуска приложений, именно здесь хранятся образы на сервере Ubuntu:

/var/lib/docker/overlay2

Здесь Overlay2 является драйвером хранилища Docker по умолчанию в Ubuntu.

Вы можете подтвердить это, выполнив команду docker info и поискав Storage Driver:

...
Storage Driver: overlay2
...

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

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

Доступность драйвера хранилища зависит от поддержки ядра.

Определенные местоположения образов

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

Скажем, например, я извлек образ alpine с помощью команды docker pull alpine.

Выполните следующую команду для его проверки:

$ docker inspect alpine

После выполнения команды вы заметите три поля в подразделе Data в разделе GraphDriver:

...
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
                "UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
            },

...

Вышеуказанные каталоги – это физическое расположение данных вашего контейнера внутри хост-системы.

Помните большую директорию с хэш-именем: 64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a525ab9e365e из раздела Docker Images?

Каталог под ним называется diff, как вы можете видеть в разделе LowerDir после :, который теперь является точкой монтирования контейнера – полученной из базового образа UpperDir!

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

Итак, полный путь, который является общим между образом (MergedDir, UpperDir и WorkDir) и контейнером (точка монтирования LowerDir), следующий:

/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/

После присвоения контейнеру до уровня LowerDir цель образа является смежной, поэтому четыре поля выделяются и основываются на другом каталоге (с новым хэшем) из-за динамической природы последнего, который становится:

/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/
Цитата

Примечание: Процесс монтирования каталога из base-image в контейнер очень похож на то, как вы монтируете тома в Docker!

 

Расположение томов Docker

В отличие от образов и контейнеров Docker, физическое расположение томов довольно простое.

Тома располагаются по адресу:

/var/lib/docker/volumes/

Конкретные места расположения томов

В этом случае существует два типа томов.

Первый – обычные тома Docker, а второй – bind mounts.

Тома Docker

Если вы ищете местоположение определенных томов, вы можете сначала использовать команду docker volume ls и проверить имя или ID тома.

Например, я запустил контейнер alpine с помощью следующей команды с томом:

$ docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine

Теперь автоматически будет создан том с именем test-data.

Теперь давайте создадим файл test.md в этом месте:

~$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"

Убедитесь, что файл действительно был создан:

$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit

Когда вы запустите docker volume ls, в списке появится том с именем test-data:

$ docker volume ls
DRIVER    VOLUME NAME
local     d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local     e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local     test-data

Наконец, вы можете подтвердить фактическое расположение файла на вашей хост-системе:

$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct  6 23:20 test.md

Поэтому путь для смонтированного тома всегда находится в каталоге с именем _data внутри соответствующего каталога тома.

Вы также можете проверить такие пути используя команду docker volume inspect с последующим указанием имени или ID тома и просмотрев параметр Mountpoint в выводе:

$ docker volume inspect test-data
[
    {
        "CreatedAt": "2021-10-06T23:20:20+05:30",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data",
        "Name": "test-data",
        "Options": null,
        "Scope": "local"
    }
]

Монтирование на хосте

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

$ mkdir /home/avimanyu/test-data
$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine

В этом случае смонтированный том с именем test-data станет доступен на стороне контейнера как /var/lib/app/content.

Заключение

В этом кратком руководстве я использовал общий подход на базе Linux, чтобы показать физическое расположение образов Docker, контейнеров и томов, расположенных на вашем Linux-сервере (в данном случае Ubuntu 20.04) на уровне хоста.

Featured Replies

No posts to show

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу
Яндекс.Метрика

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.