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

Эта статья предназначена для того, чтобы больше рассказать об управлении данными с помощью докеров. Чтобы узнать основы докеров, обратитесь — https://medium.com/devops-dev/dockers-a-beginners-guide-a73d57cbe412.

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

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

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

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

  1. Внутренний — чтение/запись в работающем контейнере.
  2. Внешний — чтение/запись вне работающего контейнера.

Давайте посмотрим, как это можно сделать с помощью докера.

Чтение/запись слоя в контейнере

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

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

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

Если вы хотите читать/записывать данные извне в работающие контейнеры, есть два варианта.

  1. Объемы
  2. Привязать маунтов

Тома

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

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

Есть два типа томов,

  1. Анонимные тома
  2. Именованные тома

Основное различие между этими двумя томами заключается в том, указываете ли вы имя для своего тома или нет.

Анонимный том

Следуя примеру команды запуска контейнера с анонимным томом. (без названия тома)

docker run -v /src/data
  • Docker управляет анонимным томом до закрытия контейнера, и он будет удален при удалении контейнера.
  • Поскольку это безымянный том, мы не можем поделиться им с другими контейнерами, а также не можем использовать его повторно.

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

Он создается путем предоставления имени тома, пример команды:

docker run -v my_volume_name:/src/data
  • Именованные тома не привязаны к какому-либо конкретному контейнеру, поэтому они не удалятся при удалении контейнера.
  • Именованный контейнер можно использовать совместно с другими контейнерами и повторно использовать, указав имя.

Привязать маунтов

Привязка монтирования очень похожа на тома, но позволяет пользователям привязывать папку/путь к хост-компьютеру.

docker run -v /path/in/hostmachine:/src/data
  • Фактическое местоположение доступно на жестком диске хост-системы и не привязано к какому-либо конкретному контейнеру.
  • Это можно разделить между контейнерами и повторно использовать для перезапуска одних и тех же контейнеров.
  • Поскольку это место привязано к местоположению на жестком диске хост-компьютера, пользователь может изменить содержимое этого места даже после запуска контейнеров.

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

См. для получения более подробной информации.

https://docs.docker.com/storage/

https://docs.docker.com/get-started/06_bind_mounts/