Где Docker хранит образы, контейнеры и тома на Linux

Docker – это мощный инструмент для создания, доставки и запуска контейнерных приложений. Основой работы Docker являются три ключевых элемента: образы (images), контейнеры (containers) и тома (volumes). Каждый из них имеет свои особенности хранения на Linux-хосте. Понимание того, где и как Docker хранит данные на вашей системе, является важным шагом в управлении контейнерной инфраструктурой.


Также будет статья будет полезна для пользователей Найс ОС Linux, которая активно использует контейнеризацию на основе Docker.

Как Docker работает с файловой системой

Прежде чем перейти к обсуждению конкретных директорий, давайте вкратце рассмотрим, как Docker взаимодействует с файловой системой. Docker использует технологию Union File System (или UnionFS), которая объединяет несколько слоев файловых систем для создания одного монтируемого слоя. Это позволяет эффективно использовать пространство на диске, минимизируя дублирование данных.

Docker также применяет несколько драйверов хранения (storage drivers), таких как overlay2, aufs, btrfs, zfs, и devicemapper. В зависимости от конфигурации вашего хоста и версии Linux, драйвер может быть разным, но по умолчанию на большинстве современных систем используется overlay2.

Теперь давайте разберемся, где Docker хранит различные элементы на Linux-хосте.

Где хранятся образы Docker

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


/var/lib/docker

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


/var/lib/docker/overlay2

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


docker images

Эта команда покажет вам список всех образов, которые находятся на вашей системе.

Использование альтернативных директорий для хранения данных Docker

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

Для этого откройте или создайте файл /etc/docker/daemon.json и добавьте туда следующие строки:


{
  "data-root": "/path/to/new/docker/directory"
}

После этого перезапустите Docker:


sudo systemctl restart docker

Теперь Docker будет хранить свои данные в указанной директории.

Где хранятся контейнеры Docker

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

Наиболее распространенный путь для контейнеров на Linux-хосте:


/var/lib/docker/containers

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

Вы можете узнать идентификатор конкретного контейнера с помощью команды:


docker ps -a

Эта команда покажет все контейнеры на вашей системе, включая остановленные.

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

Где Docker хранит тома (Volumes)

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

Тома хранятся в отдельной директории на хосте, обычно это:


/var/lib/docker/volumes

Внутри этого каталога каждый том хранится в отдельной директории, которая имеет уникальный идентификатор. Эти директории содержат данные, которые контейнеры могут монтировать для долговременного хранения.

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


docker volume ls

Чтобы найти путь к конкретному тому, выполните команду:


docker volume inspect 

Вы получите JSON-структуру с информацией о томе, включая путь на хосте.

Создание и управление томами

Вы можете создавать тома с помощью следующей команды:


docker volume create my_volume

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


docker run -d -v my_volume:/path/in/container my_image

Это примонтирует том my_volume в указанный путь внутри контейнера. Данные, записанные в этот путь, будут сохраняться на хосте в директории /var/lib/docker/volumes/my_volume/_data.

Пример: управление данными Docker на Найс ОС Linux

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

Чтобы изменить расположение данных Docker на Найс ОС, следуйте тому же процессу, что и на других системах Linux – настройте daemon.json и укажите новую директорию для хранения данных.

Команды для работы с данными Docker

Для эффективного управления данными Docker вы можете использовать следующие команды:

  1. Просмотр образов Docker:
    
    docker images
        
  2. Просмотр контейнеров:
    
    docker ps -a
        
  3. Просмотр томов:
    
    docker volume ls
        
  4. Очистка ненужных данных:

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

    
    docker system prune
        

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

  5. Просмотр детальной информации о конкретном томе:
    
    docker volume inspect 
        

Заключение

Docker хранит свои данные – образы, контейнеры и тома – в системных каталогах Linux, таких как /var/lib/docker. Это хранилище организовано по разным подкаталогам в зависимости от типа данных и используемого драйвера хранения. Понимание того, где хранятся эти данные и как с ними работать, является важным аспектом эффективного управления контейнерами.

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

Блог НАЙС ОС

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