Объемы Docker предпочтительным способом работы с постоянными данными, создаваемыми и используемыми контейнерами Docker. Давайте посмотрим, как это работает, рассмотрев, как создавать объемы Docker в Windows. Вы также узнаете, как их управлять!
В этом блоге есть видео, созданное участником TechSnips, Мэттом МакЭлритом. Можете посмотреть его, или, если предпочитаете текст, читайте дальше!
Хранение постоянных данных
Если вам нужно сохранить постоянные данные для контейнеров, у вас есть несколько вариантов. Сначала я покажу вам, как использовать связывание путей. В данный момент я нахожусь в папке под названием data на моем C:\. Если я перечислю содержимое этой папки, вы увидите, что у меня есть пять текстовых файлов.

Если я хочу сделать эту папку доступной для контейнера, я могу примонтировать ее при запуске контейнера.
Давайте запустим контейнер с помощью docker run
. Я запущу этот контейнер в интерактивном режиме, затем укажу -V
. Здесь я укажу путь к моей папке с данными, за которым последует двоеточие, затем я укажу путь внутри контейнера, куда я хочу, чтобы эта папка была примонтирована.
Для этого я собираюсь указать папку C:\shareddata. Затем я укажу основное образ Windows сервера, и, наконец, скажу, что хочу запустить PowerShell, когда окажусь в контейнере.
Теперь, когда я нахожусь в новом контейнере, если я выведу содержимое C:\, вы увидите, что у меня есть папка shareddata.

Давайте зайдем в эту папку и посмотрим, что внутри. Вот мои пять тестовых файлов, которые находятся на моем хосте контейнера.

I can also create files in this folder, which will be available to other containers or my container host. Let’s go ahead and run a new item to create a file called containertest.

Мы видим, что новый файл был создан изнутри контейнера. Теперь я выйду из этого контейнера, что приведет к его выключению, запустив exit
.
Если я запущу docker ps
, вы увидите, что в данный момент нет запущенных контейнеров.

Перечисление данных в томах Docker.
Теперь давайте еще раз перечислим содержимое папки данных с моего хоста контейнера.

Мы видим новый файл, созданный изнутри контейнера, названный containertest. У привязанных монтирований есть некоторые ограниченные функции, однако тома предпочтительнее для выполнения наших целей. Для начала работы с томами мы можем выполнить ту же команду для запуска контейнера, но на этот раз с несколькими небольшими отличиями. Где мы указали том, вместо использования пути в файловой системе хоста контейнера, я собираюсь использовать слово hostdata в качестве имени тома, который я хочу создать и использовать.
Изнутри нового контейнера, если я выведу содержимое C:\, вы снова увидите, что у меня есть папка с именем shareddata.

Если я перечислю содержимое этой папки, она в данный момент пуста, потому что мы создали пустой том. Теперь давайте запустим Ctrl-P-Q, что выведет нас из запущенного контейнера, но оставит его запущенным в фоновом режиме.
С хоста контейнера выполните docker volume ls
. Это покажет текущие тома на этом хосте контейнера. У меня есть том с именем hostdata, который был создан, когда я указал его в команде docker run
.

Если я выполню docker ps
, мы увидим наш запущенный контейнер.

Остановите этот контейнер с помощью docker stop
. Теперь у нас нет запущенных контейнеров.

Удалите остановленные контейнеры, выполнив docker rm
. Если я снова перечислю тома, вы увидите, что том hostdata все еще доступен и может быть подключен к новым контейнерам.

Создание томов Docker
Другой способ создать том – использовать команду docker volume create
. Если вы не указываете имя, Docker даст ему имя, которое представляет собой длинный список случайных символов. В противном случае, вы можете указать имя здесь. Я назову этот том logdata. Теперь мы видим его в списке, когда мы снова перечисляем тома.

Теперь вы подключите его к новому контейнеру. Используйте docker run
снова, и для тома укажите только что созданный том и подключите его к c:\logdata.
Изнутри контейнера перейдите в папку logdata и создайте пару файлов. В данный момент в этом каталоге нет файлов, поэтому продолжайте и создайте их.
Теперь у меня есть два файла журналов в этом каталоге.

Снова запустите Ctrl-P-Q, чтобы выйти из этого контейнера, пока он еще работает. Пока этот контейнер работает, запустите новый контейнер с тем же объемом, смонтированным.
Если мы запустим список файлов в папке logdata в новом контейнере, мы увидим, что два файла журналов общие.

Теперь выйдите из этого контейнера. У вас все еще должен быть один работающий контейнер и два остановленных контейнера.

Теперь остановите все работающие контейнеры, а затем выполните docker rm
, чтобы удалить все остановленные контейнеры.

Снова перечислите тома. Том logdata все еще доступен для монтирования в будущие контейнеры.

Если вы запустите docker volume
, вы получите некоторую справку о использовании для этой команды.

Инспекция томов Docker
Мы уже рассмотрели create
, поэтому перейдем к inspect
. Если я запущу docker volume inspect
против тома logdata, он вернет свойства этого тома, включая точку монтирования, которая является физическим путем к тому на хосте контейнера.

Давайте откроем эту папку с помощью Invoke-Item
и посмотрим. В папке logdata есть папка с именем data. Если мы откроем ее, мы увидим файлы, которые были созданы из контейнера ранее.

Удаление томов Docker
Для удаления тома мы можем выполнить docker volume rm
, за которым следует имя тома, который вы хотите удалить.
Теперь, если я перечислю тома, logdata уже не будет там.

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

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

Резюме
В этом блоге вы должны были получить хороший обзор управления томами Docker в Windows. Docker – отличная платформа для контейнеров. С его поддержкой Windows и ваших новых навыков управления томами Docker вы будете непобедимы!