Основные понятия хранилища для контейнеров

Завершено

Контейнеры Windows по умолчанию используют эфемерное хранилище (временное пространство) для всех входных и выходных данных. Каждый контейнер имеет собственное временное пространство, в котором создаются и записываются все файлы, чтобы они не переходили на хост. При удалении экземпляра контейнера все изменения, произошедшие в временном пространстве, удаляются. При запуске нового экземпляра контейнера для него предоставляется новое временное пространство.

Хранилище слоев

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

  • Поддержка приложения
  • Любая среда выполнения приложения
  • Зависимости приложения
  • Любые другие другие файлы конфигурации, необходимые для правильного выполнения приложения.

В среде Windows слои хранятся с помощью CimFS и поддерживаются в NTFS (новая технология файловой системы), ReFS или RefDisks для хранилища слоев. Вы можете изменить место хранения файлов с помощью конфигурации docker-root(или эквивалентного с контейнером), но не следует изменять файлы в каталогах слоев. Они тщательно управляются с помощью docker (или эквивалентных команд).

Постоянное хранилище

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

  • Привязка точек монтирования
  • Именованные тома

Привязка подключений

Бинд-маунты позволяют контейнеру делиться каталогом с хостом, сопоставляя каталог на хосте с каталогом внутри контейнера. Привязанные монтирования полезны, если требуется место для хранения файлов на локальном компьютере, доступное при перезапуске контейнера и потере временного пространства. Или, если вы хотите предоставить общий доступ к файлу с несколькими контейнерами.

Однако если вы хотите, чтобы контейнер выполнялся на нескольких компьютерах с доступом к тем же файлам, то вместо этого следует использовать подключение именованного тома или SMB (блок сообщений сервера). Важно, чтобы не привязывать конфиденциальные каталоги, например C:\, в ненадежный контейнер. Эта привязка позволит ему изменять файлы на узле, к которому он обычно не имеет доступа и может создать нарушение безопасности.

В следующем примере показана команда Docker для создания бинд-маунта папки C:\ContainerData на хосте в C:\data внутри контейнера с доступом по умолчанию на чтение и запись.

docker run -v c:\ContainerData:c:\data

Именованные тома

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

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

В следующем примере показаны команды Docker для создания и запуска контейнера с именем mycontainer, сопоставленного с локальным томом c:data:

docker volume create myvolume docker run -v myvolume:c:\data microsoft/windowsservercore

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

  • Тома проще создавать резервные копии или переносить, чем связывания точек монтирования.
  • Вы можете управлять томами с помощью команд Командной строки Docker или API Docker.
  • Томы работают в контейнерах Linux и Windows.
  • Томами можно более безопасно делиться между несколькими контейнерами.
  • Драйверы томов позволяют хранить тома на удаленных узлах или поставщиках облачных служб, шифровать содержимое томов или добавлять другие функции.
  • Новые тома могут быть предварительно заполнены контейнером.

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