Где хранятся docker images linux

Хранение данных в Docker

Важная характеристика Docker-контейнеров — эфемерность. В любой момент контейнер может рестартовать: завершиться и вновь запуститься из образа. При этом все накопленные в нём данные будут потеряны. Но как в таком случае запускать в Docker приложения, которые должны сохранять информацию о своём состоянии? Для этого есть несколько инструментов.

В этой статье рассмотрим docker volumes, bind mount и tmpfs, дадим советы по их использованию, проведём небольшую практику.

Особенности работы контейнеров

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

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

На схеме показано устройство контейнера, запущенного из образа Ubuntu 15.04. Контейнер состоит из пяти слоёв: четыре из них принадлежат образу, и лишь один — самому контейнеру. Слои образа доступны только для чтения, слой контейнера — для чтения и для записи. Если при работе приложения какие-то данные будут изменяться, они попадут в слой контейнера. Но при уничтожении контейнера слой будет безвозвратно потерян, и все данные вместе с ним.

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

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

В Docker есть несколько способов хранения данных. Наиболее распространенные:

  • тома хранения данных (docker volumes),
  • монтирование каталогов с хоста (bind mount).

Особые типы хранения:

  • именованные каналы (named pipes, только в Windows),
  • монтирование tmpfs (только в Linux).

На схеме показаны самые популярные типы хранения данных для Linux: в памяти (tmpfs), в файловой системе хоста (bind mount), в томе Docker (docker volumes). Разберём каждый вариант.

Тома (docker volumes)

Тома — рекомендуемый разработчиками Docker способ хранения данных. В Linux тома находятся по умолчанию в /var/lib/docker/volumes/. Другие программы не должны получать к ним доступ напрямую, только через контейнер.

Тома создаются и управляются средствами Docker: командой docker volume create, через указание тома при создании контейнера в Dockerfile или docker-compose.yml.

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

Один том может быть примонтирован одновременно в несколько контейнеров. Когда никто не использует том, он не удаляется, а продолжает существовать. Команда для удаления томов: docker volume prune.

Можно выбрать специальный драйвер для тома и хранить данные не на хосте, а на удалённом сервере или в облаке.

Для чего стоит использовать тома в Docker:

  • шаринг данных между несколькими запущенными контейнерами,
  • решение проблемы привязки к ОС хоста,
  • удалённое хранение данных,
  • бэкап или миграция данных на другой хост с Docker (для этого надо остановить все контейнеры и скопировать содержимое из каталога тома в нужное место).

Монтирование каталога с хоста (bind mount)

Это более простая концепция: файл или каталог с хоста просто монтируется в контейнер.

Используется, когда нужно пробросить в контейнер конфигурационные файлы с хоста. Например, именно так в контейнерах реализуется DNS: с хоста монтируется файл /etc/resolv.conf.

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

Особенности bind mount:

  1. Запись в примонтированный каталог могут вести программы как в контейнере, так и на хосте. Это значит, есть риск случайно затереть данные, не понимая, что с ними работает контейнер.
  2. Лучше не использовать в продакшене. Для продакшена убедитесь, что код копируется в контейнер, а не монтируется с хоста.
  3. Для успешного монтирования указывайте полный путь к файлу или каталогу на хосте.
  4. Если приложение в контейнере запущено от root, а совместно используется каталог с ограниченными правами, то в какой-то момент может возникнуть проблема с правами на файлы и невозможность что-то удалить без использования sudo.
Читайте также:  Vpn клиент для linux mint

Когда использовать тома, а когда монтирование с хоста

Volume Bind mount
Просто расшарить данные между контейнерами. Пробросить конфигурацию с хоста в контейнер.
У хоста нет нужной структуры каталогов. Расшарить исходники и/или уже собранные приложения.
Данные лучше хранить не локально (а в облаке, например). Есть стабильная структура каталогов и файлов, которую нужно расшарить между контейнерами.

Монтирование tmpfs

Tmpfs — временное файловое хранилище. Это некая специально отведённая область в оперативной памяти компьютера. Из определения выходит, что tmpfs — не лучшее хранилище для важных данных. Так оно и есть: при остановке или перезапуске контейнера сохранённые в tmpfs данные будут навсегда потеряны.

На самом деле tmpfs нужно не для сохранения данных, а для безопасности, полученные в ходе работы приложения чувствительные данные безвозвратно исчезнут после завершения работы контейнера. Бонусом использования будет высокая скорость доступа к информации.

Например, приложение в контейнере тормозит из-за того, что в ходе работы активно идут операции чтения-записи, а диски на хосте не очень быстрые. Если вы не уверены, в какой каталог идёт эта нагрузка, можно применить к запущенному контейнеру команду docker diff . И вот этот каталог смонтировать как tmpfs, таким образом перенеся ввод-вывод с диска в оперативную память.

Такое хранилище может одновременно работать только с одним контейнером и доступно только в Linux.

Общие советы по использованию томов

Монтирование в непустые директории

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

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

Монтирование служебных файлов

С хоста можно монтировать любые файлы, в том числе служебные. Например, сокет docker. В результате получится docker-in-docker: один контейнер запустится внутри другого. UPD: (*это не совсем так. mwizard в комментариях пояснил, что в таком случае родительский docker запустит sibling-контейнер). Выглядит как бред, но в некоторых случаях бывает оправдано. Например, при настройке CI/CD.

Монтирование /var/lib/docker

Разработчики Docker говорят, что не стоит монтировать с хоста каталог /var/lib/docker, так как могут возникнуть проблемы. Однако есть некоторые программы, для запуска которых это необходимо.

Ключ командной строки для Docker при работе с томами.

Для volume или bind mount:

Команды для управления томами в интерфейсе CLI Docker:

Создадим тестовый том:

Вот он появился в списке:

Команда inspect выдаст примерно такой список информации в json:

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

После самоуничтожения контейнера запустим другой и подключим к нему тот же том. Проверяем, что в нашем файле:

То же самое, отлично.

Теперь примонтируем каталог с хоста:

Docker не любит относительные пути, лучше указывайте абсолютные!

Теперь попробуем совместить оба типа томов сразу:

Отлично! А если нам нужно передать ровно те же тома другому контейнеру?

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

Создавать том заранее необязательно, всё сработает в момент запуска docker run:

Посмотрим теперь на список томов:

Ещё немного усложним команду запуска, создадим анонимный том:

Такой том самоуничтожится после выхода из контейнера, так как мы указали ключ –rm.

Если этого не сделать, давайте проверим что будет:

Хозяйке на заметку: тома (как образы и контейнеры) ограничены значением настройки dm.basesize, которая устанавливается на уровне настроек демона Docker. Как правило, что-то около 10Gb. Это значение можно изменить вручную, но потребуется перезапуск демона Docker.

При запуске демона с ключом это выглядит так:

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

Если вам нужно вручную очистить содержимое всех томов, придётся удалять каталог, предварительно остановив демон:

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

Автор статьи: Александр Швалов, практикующий инженер Southbridge, Certified Kubernetes Administrator, автор и разработчик курсов Слёрм.

Источник

Русские Блоги

Два способа изменить место хранения локального образа и контейнера Docker

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

Метод первый, мягкая ссылка

По умолчанию место хранения Docker: /var/lib/docker
Вы можете проверить конкретное местоположение с помощью следующей команды:

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

Этот метод будет реализован через мягкое подключение.

Сначала остановите службу Docker:

Затем переместите весь /var/lib/docker Каталог к ​​пути назначения:

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

Метод 2. Измените путь хранения образа и контейнера.

Параметры, определяющие путь хранения образа и контейнера: —graph=/var/lib/docker , Нам нужно только изменить файл конфигурации, чтобы указать параметры запуска.

Файл конфигурации Docker может устанавливать большинство параметров фонового процесса, а место хранения в каждой операционной системе несовместимо. Расположение в Ubuntu: /etc/default/docker , Расположение в CentOS: /etc/sysconfig/docker 。

Если это CentOS, добавьте следующую строку:

Если это Ubuntu, добавьте следующую строку (поскольку selinux не включен по умолчанию в Ubuntu):

Наконец, перезапустите, путь к Docker изменится на / root / data / docker.

Источник

Где хранятся изображения Docker на главной машине?

Мне удалось найти контейнеры под каталогом /var/lib/docker/containers , но я не могу найти изображения.

Каковы каталоги и файлы в разделе /var/lib/docker ?

ОТВЕТЫ

Ответ 1

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

По умолчанию это будет aufs , но может вернуться в overlay , overlay2 , btrfs , devicemapper или zfs в зависимости от поддержки вашего ядра. В большинстве мест это будет aufs , но RedHats отправился с devicemapper .

Вы можете вручную установить драйвер хранилища с параметром -s или —storage-driver= в демон Docker.

  • /var/lib/docker/ будет содержать конкретное хранилище драйверов для содержимого изображений.
  • /var/lib/docker/graph/ теперь содержит только метаданные об изображении, в файлах json и layersize .
  • /var/lib/docker/aufs/diff/ имеет содержимое файла изображений.
  • /var/lib/docker/repositories-aufs — это файл JSON, содержащий локальную информацию об изображении. Это можно просмотреть с помощью команды docker images .

В случае devicemapper :

  • /var/lib/docker/devicemapper/devicemapper/data сохраняет изображения
  • /var/lib/docker/devicemapper/devicemapper/metadata метаданные
  • Обратите внимание, что эти файлы представляют собой тонкие подготовленные «разреженные» файлы, поэтому они не такие большие, как кажется.

Ответ 2

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

ОБНОВЛЕНИЕ (Предоставлено mmorin):

По состоянию на 15 января 2019 года, кажется, есть только этот файл:

который содержит Docker Disk и все образы и контейнеры внутри него.

Ответ 3

В специальном случае Mac OS X или Windows, используя boot2docker, ваши изображения Docker хранятся в виртуальной виртуальной машине VM, которой управляет boot2docker.

Эта виртуальная машина будет храниться в обычном месте изображений VirtualBox:

Windows: %USERPROFILE%/VirtualBox VMs/boot2docker-vm

Вы можете reset его запустить (ПРЕДУПРЕЖДЕНИЕ: Это уничтожит все изображения, которые вы создали и загрузили до сих пор):

Это особенно полезно, если вы сохраняли тонны промежуточных изображений при построении/отладке сборки без полезных параметров —rm, я цитирую их здесь для справки: Использование:

Ответ 4

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

Файл данных: /var/lib/docker/devicemapper/devicemapper/data

Файл метаданных: /var/lib/docker/devicemapper/devicemapper/metadata

Ответ 5

Изображения сохраняются в /var/lib/docker/graph/ /layer .

Обратите внимание, что изображения просто отличаются от исходного изображения. Идентификатор родителя хранится с метаданными изображения /var/lib/docker/graph/ /json .

Когда вы docker run изображение. AUFS «объединит» все слои в одну удобную файловую систему.

Ответ 6

В недавно выпущенном «Docker for Windows», который использует Hyper-V, данные находятся на виртуальном жестком диске Docker:

Вы также можете открыть «Менеджер Hyper-V» для доступа к Docker/MobyLinuxVM.

Ответ 7

Для тех, кто использует панель инструментов Docker (которая использует докер-машину), ответы, касающиеся boot2docker в Mac OS X, недействительны. Доклер-машина VM называется «по умолчанию» и существует в каталоге /Users/ /.docker/machine/machines/default/ .

Ответ 8

В Ubuntu вы можете «играть» с запущенными изображениями

Собственно, изображения хранятся в пределах /var/lib/docker/aufs/diff

Ответ 9

В Docker для Windows (родная Windows) хранилище контейнеров по умолчанию:

Ответ 10

Если вы используете Docker для MAC (не boot2docker ), то местоположение /Users/ UserName> /Library/Containers/com.docker.docker/Data/

Ответ 11

Как ответил здесь, если вы находитесь на Mac, он находится в

Ответ 12

Расширяя ответ Tristan, в Windows с Hyper-V вы можете переместить изображение с помощью следующих шагов из matthuisman:

  1. Стоп докер и т.д.
  2. Введите «Диспетчер Hyper-V» в поле поиска панели задач и запустите его.
  3. Выберите свой ПК в левой панели (мой называется DESKTOP-CBP **)
  4. Щелкните правой кнопкой мыши на правильной виртуальной машине (моя называется MobyLinuxVM)
  5. Выберите «Выключить» (если он запущен)
  6. Щелкните правой кнопкой мыши еще раз и выберите «Переместить»
  7. Следуйте инструкциям

Ответ 13

Я использую boot2docker для Docker на Mac OSX, поэтому изображения хранятся в /Users/ /VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk .

Ответ 14

Я могу ответить на этот вопрос только для пользователей Ubuntu:

Корневой каталог докеров можно найти при запуске команды docker info

Каталог Docker будет указан в этой строке: » Docker Root Dir: /var/lib/docker «

О изображениях докеров, они хранятся в каталоге докеров: /var/lib/docker/aufs/diff/

Помните, что все это не так во всей версии докера. В настоящее время я использую 1.12.3.

Ответ 15

Если вы помните, что Docker все еще работает в виртуальной машине, системные пути относятся к виртуальной машине, а не из системы Mac Osx. Как говорится, все содержится в файле VM:

Попробуйте запустить Alpine образ с этим параметром тома и командой ls, вы можете перечислить хост VM:

Docker запускает —rm -it -v/: /vm-root alpine: край ls -l/vm-root

После этого просто попробуйте:

Docker запускает —rm -it -v/: /vm-root alpine: край ls -l/vm-root/var/lib/docker

Теперь вы можете перечислить папку докера с хоста WM

Ответ 16

В Docker для Windows журналы находятся здесь: %USERPROFILE%\AppData\Local\Docker

Ответ 17

проверьте папку докера в /var/lib

изображения хранятся в расположении ниже:

Ответ 18

Используйте команду docker info для отображения общесистемной информации, и ее местоположение может отличаться.

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

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

Вот пример на Ubuntu (проверьте Root Dir):

А вот пример на Travis CI (см. Docker Root Dir):

Вы можете использовать параметр —format для извлечения этой информации в один файл, например

Ответ 19

Окружающая среда: Windows 10 Pro, Docker Desktop 2.0.3.0 край

щелкните правой кнопкой мыши значок докера в области уведомлений, выберите настройки — дополнительно:

Расположение образа диска (редактируется через браузер):

C:\Users\Public\Documents\Hyper-V\Виртуальные жесткие диски \DockerDesktop.vhdx

(это там — каталог документов скрыт)

Ответ 20

В Fedora Docker использует LVM для хранения, если он доступен. В моей системе docker info показано:

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

Ответ 21

На Debian Unstable/Sid,

docker info о docker info чтобы найти общесистемную информацию.

изображения хранятся в /var/lib/docker/image/overlay2/imagedb/content и

контейнеры хранятся в /var/lib/docker/containers

докер версия 18.06.0-ce , API версия 1.38

Ответ 22

В Windows 2016 докер (DockerMsftProvider) использует папку «windowsfilter» в корневом каталоге докера.

Он использует папку «tmp» в корневом каталоге докера для загрузки файлов и удаляет файлы после извлечения загруженных файлов в папку «windowsfilter».

Ответ 23

Я не смог решить вопрос с Docker версии 18.09 на macos, используя приведенные выше ответы, и попытался снова.

Единственным реальным решением для меня было использование этой конфигурации docker-compose.yml :

После запуска с docker-compose up я, наконец, получил /tmp/host-volume от macos, расшаренных как доступный для записи том из контейнера:

Надеюсь, что это помогает другим.

Ответ 24

Изображения хранятся в /var/lib/docker а затем в соответствующем каталоге storage driver .

Используемый драйвер хранилища можно определить, выполнив команду docker info .

Ответ 25

Согласно руководству по началу работы с Docker «ваш встроенный образ» находится в «локальном реестре образов Docker».

Это все еще странно для меня, потому что теперь это приводит к вопросу. Где мой компьютер — локальный реестр образов Docker?

Тем не менее, я определенно думаю, что эта информация стоит поделиться в качестве ответа.

Ответ 26

используйте docker inspect container_id
найти папку в MergedDir

Ответ 27

Для «Docker Desktop», нажмите на значок в панели задач Docker и нажмите «Настройки».

На вкладке «Дополнительно» вы можете увидеть расположение образа диска.

Ответ 28

Если кому-то это нужно для сценариев, вот решение в одну строку.

В оболочке POSIX с включенным PCRE grep попробуйте:

DOCKER_ROOT_DIR=»$(docker info 2>&1 | grep -oP ‘(?

Обратите внимание, что в Windows 10 (с 10.0.18999.1 ) в конфигурациях по умолчанию возвращается:

  • C:\ProgramData\Docker в режиме «Контейнеры Windows»
  • /var/lib/docker , в режиме «контейнеры Linux»

Источник

Читайте также:  Активированная windows для gpt
Оцените статью