Эта статья предназначена для того, чтобы больше рассказать об управлении данными с помощью докеров. Чтобы узнать основы докеров, обратитесь — https://medium.com/devops-dev/dockers-a-beginners-guide-a73d57cbe412.
При запуске вашего приложения в изолированном контейнере одной из ключевых проблем будет управление вашими данными между хост-компьютером и работающим контейнером.
Давайте рассмотрим пример использования докера в DevOps, когда вы хотите запустить свое приложение в контейнерной среде и в конечном итоге иметь следующие варианты использования для управления данными:
- Некоторые данные используются только во время работы приложения, которые можно использовать только внутри контейнера.
- Некоторые данные необходимо читать/записывать на хост-компьютер, на котором запущены контейнеры.
- Некоторые данные должны быть разделены между несколькими контейнерами.
С помощью Dockers вы можете по-разному обрабатывать эти сценарии обмена файлами/данными во время работы контейнера. Вы можете в целом разделить это на две категории,
- Внутренний — чтение/запись в работающем контейнере.
- Внешний — чтение/запись вне работающего контейнера.
Давайте посмотрим, как это можно сделать с помощью докера.
Чтение/запись слоя в контейнере
Когда контейнер запускается вместе с содержимым образа, каждый экземпляр контейнера будет поддерживать уровень чтения/записи, чтобы приложение могло читать/записывать любые данные.
- Это не общая память, и она доступна в каждом экземпляре контейнера.
- Этот слой будет создан, когда вы запустите контейнер, и будет уничтожен, когда вы удалите контейнер.
Уровень чтения/записи — это внутреннее хранилище данных для контейнеров, которое полезно для хранения временных данных приложения.
Если вы хотите читать/записывать данные извне в работающие контейнеры, есть два варианта.
- Объемы
- Привязать маунтов
Тома
Тома — это фактические папки на жестком диске главного компьютера, которые доступны контейнеру для чтения/записи данных.
Тома управляются докерами, т. е. когда вы создаете том, докер устанавливает папку на вашем хост-компьютере и абстрагирует точное местоположение от пользователей. Это лучшие варианты для данных, которые не нужно редактировать с главного компьютера.
Есть два типа томов,
- Анонимные тома
- Именованные тома
Основное различие между этими двумя томами заключается в том, указываете ли вы имя для своего тома или нет.
Анонимный том
Следуя примеру команды запуска контейнера с анонимным томом. (без названия тома)
docker run -v /src/data
- Docker управляет анонимным томом до закрытия контейнера, и он будет удален при удалении контейнера.
- Поскольку это безымянный том, мы не можем поделиться им с другими контейнерами, а также не можем использовать его повторно.
Именованный том
Он создается путем предоставления имени тома, пример команды:
docker run -v my_volume_name:/src/data
- Именованные тома не привязаны к какому-либо конкретному контейнеру, поэтому они не удалятся при удалении контейнера.
- Именованный контейнер можно использовать совместно с другими контейнерами и повторно использовать, указав имя.
Привязать маунтов
Привязка монтирования очень похожа на тома, но позволяет пользователям привязывать папку/путь к хост-компьютеру.
docker run -v /path/in/hostmachine:/src/data
- Фактическое местоположение доступно на жестком диске хост-системы и не привязано к какому-либо конкретному контейнеру.
- Это можно разделить между контейнерами и повторно использовать для перезапуска одних и тех же контейнеров.
- Поскольку это место привязано к местоположению на жестком диске хост-компьютера, пользователь может изменить содержимое этого места даже после запуска контейнеров.
В зависимости от типа данных, времени их жизни и уровня доступа можно выбрать любой из вышеперечисленных способов управления данными с запущенными контейнерами.
См. для получения более подробной информации.