Начало работы с Docker — монтирование данных

Docker

Управление данными докера

Существует два основных способа управления данными в контейнере:

  • Объемы
  • Смонтировать каталог хоста (привязать монтирование)

объем данных

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

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

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

Docker предоставляет два метода монтирования: -v и -mount.

Новые пользователи Docker должны выбрать параметр --mount

Опытные пользователи Docker уже знакомы с параметрами -v или --volume, но рекомендуется использовать параметр -mount.

Создать том данных

docker volume create my-volume

Просмотр информации об указанном томе данных

docker volume inspect my-volume

Запустите контейнер, который монтирует том данных:

При использовании команды запуска docker используйте флаг --mount, чтобы смонтировать том данных в контейнер.

Создайте контейнер с именем session-web и загрузите том данных в каталог /webapp в контейнере.

# 方法一
docker run --name session-web -d -p 8888:8080 --mount source=my-volume,target=/webapp  session-web:latest
# 方法二
docker run --name session-web -d -p 8888:8080 -v my-volume:/webapp     session-web:latest

удалить объем данных

docker volume rm my-volume

Том данных предназначен для сохранения данных, его жизненный цикл не зависит от контейнера, Docker не удаляет автоматически том данных после удаления контейнера, и не существует такого механизма, как сборка мусора, для обработки данных, на которые не ссылается какой-либо рулон контейнера. Если вам нужно удалить том данных при удалении контейнера. Вы можете использовать команду docker rm -v при удалении контейнера.

Бесхозные тома данных могут занимать много места, для очистки используйте следующую команду

docker volume prune

смонтировать каталог хоста

Используйте флаг --mount, чтобы указать монтировать каталог на локальном хосте в контейнер.

# 方法一
docker run --name session-web -d -p 8888:8080 \
-v my-volume:/webapp \
session-web:latest
# 方法二
docker run --name session-web -d -p 8888:8080 \
--mount type=bind,source=/src/webapp,target=/opt/webapp session-web:latest

Приведенная выше команда загружает каталог хоста /src/webapp в каталог контейнера /opt/webapp. Эта функция очень удобна при тестировании, например, пользователи могут поместить некоторые программы в локальную директорию, чтобы проверить, правильно ли работает контейнер.

Путь к локальному каталогу должен быть абсолютным путем

Раньше при использовании параметра -v Docker автоматически создавал для вас папку, если локальный каталог не существовал.

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

Смонтировать файл localhost как том данных

Флаг --mount также может монтировать отдельные файлы с хоста в контейнер.

# 方法一
docker run --rm -it \
--mount type=bind,source=#HOME/.bash_history,target=/root/.bash_history \ 
ubuntu:17.10 bash

# 方法二
docker run --rm -it \
-v $HOME/.bash_history:/root/.bash_history \
ubuntu:17.10 bash