Docker, лекция 10. Сохранение данных с использованием томов (Volumes)

Docker, лекция 10. Сохранение данных с использованием томов (Volumes)

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

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

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

Подключение тома

В этом примере Redis будет использоваться для сохранения данных. Запустим контейнер Redis и создадим том данных с помощью параметра -v. Это указывает, что любые данные, сохраненные в контейнере в каталоге /data, должны сохраняться на хосте в каталоге /docker/redis-data.

docker run -v /docker/redis-data:/data --name r1 -d redis \redis-server --appendonly yes

Запишем данные в redis командой:

cat data | docker exec -i r1 redis-cli --pipe

Если команда выполнена успешна, то в папке /docker/redis-data будет создан aof файл.

ls /docker/redis-data

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

docker run -v /docker/redis-data:/backup ubuntu ls /backup

Shared Volumes

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

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

Теперь сопоставляем том нашего контейнера Redis с контейнером Ubuntu. Каталог /data существует только в контейнере Redis, однако с помощью -volumes-from контейнер Ubuntu может получить доступ к данным.

docker run --volumes-from r1 -it ubuntu ls /data

Read-only тома

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

ВАЖНО: если контейнер попытается изменить данные в каталоге, произойдет ошибка: Read-only file system.

docker run -v /docker/redis-data:/data:ro -it

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *