Перейти к содержимому

Volumes docker что это

  • автор:

Что делает инструкция VOLUME в Dockerfile?

Никак не могу понять что делает инструкция VOLUME [«/data»] в Dockerfile, сначала я думал, что это аналог опции -v и что можно написать так: VOLUME [«С:/test:/data»] , но оказался не прав. Так что за директорию создает иснтрукция VOLUME и где она хранится на хост-машине (windows)? И как лучше и правильно подключать директорию с данными, например, БД к контейнеру? Через опцию -v ?

Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 15 янв 2018 в 14:28
user281215 user281215
41 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
15 янв 2018 в 14:38
@VladyslavTereshyn, не помогло, можно как то своими словами?
15 янв 2018 в 14:38

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

VOLUME говорит о том, что при запуске контейнера необходимо создать директорию на хосте, заполненную данными из образа, и смонтировать в указанной точке внутри контейнера (/data):

  • Контейнер стартует
  • Перед стартом в дебрях инсталяции докера создается пустая директория
  • В директорию копируется содержимое /data из образа
  • Директория монтируется в контейнер по пути /data

Хранится она где-то внутри установки Docker (где именно это на Windows — не знаю). Не побоюсь собственного оценочного суждения — это абсолютно бесполезная директива, которая несет больше вреда, нежели пользы (потому что, например, она остается жить после смерти контейнера, потребляя ненужное место, и обнаружить в какой-то момент тысячи ненужных volume — это обычное дело). Если вам необходимо вынести данные из контейнера для сохранения (например, чтобы сохранить БД между запусками контейнера), то действительно лучше использовать -v . Основная разница между -v и VOLUME в Dockerfile состоит в том, что в -v вы указываете конечную директорию, которую нужно пробросить внутрь контейнера и сами управляете ей, а VOLUME проделывает почти то же самое, только эта директория находится непонятно где, управляется самим докером (обычно наоборот, вовсе не управляется), и управление всем этим добром стоит порядочного количества нервов.

#7 – Docker Volumes (Тома в Докер)

#7 – Docker Volumes (Тома в Докер)

Docker Volumes или же Докер Тома – они позволяют сохранять значения внутри контейнеров даже после их перезапуска. В ходе урока мы подключим язык Python, фреймворк Django и базу данных PostgreSQL. Также мы настроим верную работу между ними при помощи Докер Volumes.

Видеоурок

Докер Том или же Docker Volume – это технология, что позволяет сохранить данные для контейнера даже после их перезапуска. Такое действие часто бывает необходимым. За счет томов вы можете хранить как значения из базы данных, так и всевозможные файлы, документы и прочее.

Принцип описание томов прост. Вам нужно указывать в docker compose файле какие данные и где будут сохраняться. Обычно вы указываете папку в вашем проекте и папку на хост-машине.

Как хранить данные в Docker volumes

Если полистать какой-нибудь Докер гайдлайн, то скорее всего в нём скажут, что контейнеры должны быть маленькими, с одним процессом, легко удаляемыми и так же легко заменяемыми на более новый. Прекрасная концепция. О чём в гайдлайнах пишут немного реже, так это что же делать с данными внутри таких контейнеров. Я же не могу легко удалить тот же mysql контейнер и заменить его на новый, но пустой внутри. Он ведь мне только ради данных и нужен был.

Но, оказывается, проблема вполне решаема. Docker volumes, которые существовали в Докере с момента сотворения мира, начиная с версии 1.8 получили обновлённый API, и теперь справляются с хранением данных не только технически, но и эстетически прекрасно.

Что такое Docker volumes

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

1. Простое монтирование папки

Это вообще легко. Мы берём любую подходящую хостовую папку и подключаем её в нужное место файловой системы контейнера. Например, если мне нужно иногда обновлять mysql контейнер, или делать бэкап его данных, то просто монтируем папку к /var/lib/mysql , и теперь mysql данные находятся в относительной безопасности хостовой файловой системы:

Для чего нужна настройка хранилищ в Docker

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

Для чего нужна настройка хранилищ

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

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

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

В целом, настройка хранилищ в Docker обеспечивает надежное и гибкое управление данными в контейнерах, что делает их более удобными и эффективными в использовании.

Типы хранилищ

В Docker существует несколько типов хранилищ:

  1. Volumes (тома): специальные директории на хостовой машине или удаленном сервере, которые монтируются в контейнер. Они обеспечивают постоянное хранение данных и могут использоваться для обмена данными между контейнерами.
  2. Bind mounts (привязанные монтирования): механизм, который позволяет монтировать определенную директорию или файл на хостовой машине в контейнер. Это позволяет контейнерам иметь доступ к данным на хостовой машине и делиться данными между несколькими контейнерами.
  3. tmpfs mounts: механизм монтирования, который позволяет создавать временные файловые системы в памяти. Они полезны для хранения временных данных, которые не нужно сохранять между запусками контейнеров.

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

Как осуществляется настройка хранилищ в Docker

Настройка хранилищ в Docker может быть выполнена с помощью опции -v или —volume при запуске контейнера.

Вот несколько способов настройки:

Связывание локальной директории с директорией в контейнере:

docker run -v /путь/к/локальной/директории:/путь/к/директории/в/контейнере

Создание и использование Docker Volume:

docker volume create

docker run -v :/путь/к/директории/в/контейнере

Использование внешних хранилищ, таких как NFS или AWS EBS:

docker run -v :

Использование Docker Compose для настройки хранилищ:

yaml
version: ‘3’
services:
myservice:
image:
volumes:
— /путь/к/локальной/директории:/путь/к/директории/в/контейнере
— :/путь/к/директории/в/контейнере
— :

При настройке хранилищ в Docker также можно использовать другие опции, такие как —mount для более сложных сценариев монтирования, или —volumes-from для использования хранилищ другого контейнера.

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

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