Введение
В этом лабораторном занятии вы научитесь управлять томами Docker с помощью команды docker volume rm. Вы начнете с создания тома, а затем потренируетесь в его удалении.
Кроме того, вы рассмотрите сценарии, когда том используется контейнером, и попытаетесь удалить его, поняв поведение по умолчанию и способ принудительного удаления тома, который в данный момент подключен к запущенному контейнеру.
Создать том
На этом этапе вы научитесь создавать тома Docker. Тома представляют собой предпочтительный способ сохранения данных, которые создаются и используются контейнерами Docker. В то время как привязанные тома (bind mounts) зависят от структуры каталогов хост-машины, тома полностью управляются Docker.
Для создания тома используйте команду docker volume create, за которой следует имя, которое вы хотите дать тому. Создадим том с именем myvolume.
docker volume create myvolume
Если создание прошло успешно, вы должны увидеть имя тома, выведенное в консоль.
Теперь убедимся, что том был создан, перечислив все доступные тома с помощью команды docker volume ls.
docker volume ls
В выводе вы должны увидеть myvolume в списке.
Попытаться удалить том
На этом этапе вы попытаетесь удалить том, который вы создали на предыдущем этапе. Чтобы удалить том Docker, используйте команду docker volume rm, за которой следует имя тома.
Попробуем удалить том myvolume.
docker volume rm myvolume
Если удаление прошло успешно, вы должны увидеть имя тома, выведенное в консоль.
Теперь убедимся, что том был удален, еще раз перечислив все доступные тома.
docker volume ls
В выводе вы больше не должны видеть myvolume.
Удалить том
На предыдущем этапе вы попытались удалить том. Теперь убедимся, что он был удален. Используйте ту же команду docker volume rm, за которой следует имя тома.
docker volume rm myvolume
Если том был успешно удален на предыдущем этапе, вы, возможно, увидите ошибку, указывающую, что том не найден. Это ожидаемое поведение и подтверждает, что том был удален. Если том не был удален на предыдущем этапе, эта команда удалит его сейчас.
Чтобы убедиться, что том был удален, перечислите тома еще раз.
docker volume ls
myvolume не должен появиться в списке.
Создать том и контейнер, использующий его
На этом этапе вы создадите новый том, а затем создадите контейнер Docker, который будет использовать этот том для хранения данных.
Сначала создадим новый том с именем mydata.
docker volume create mydata
Далее запустим простой контейнер ubuntu и смонтируем том mydata в каталог /app внутри контейнера. Также запустим команду, которая запишет некоторый текст в файл в смонтированном томе.
Перед запуском контейнера загрузим образ ubuntu, чтобы убедиться, что он доступен локально.
docker pull ubuntu
Теперь запустим контейнер и запишем данные в том:
docker run -d --name mycontainer -v mydata:/app ubuntu bash -c "echo 'Hello from the volume!' > /app/greeting.txt && tail -f /dev/null"
Разберем эту команду по частям:
docker run: Команда для запуска нового контейнера.-d: Запускает контейнер в отсоединенном режиме (в фоновом режиме).--name mycontainer: Назначает контейнеру имяmycontainer.-v mydata:/app: Это монтирование тома. Он монтирует том Docker с именемmydataв каталог/appвнутри контейнера.ubuntu: Используемый образ Docker.bash -c "echo 'Hello from the volume!' > /app/greeting.txt && tail -f /dev/null": Команда, которая будет запущена внутри контейнера. Она записывает "Hello from the volume!" в файл с именемgreeting.txtв каталоге/app(который является смонтированным томом), а затем запускаетtail -f /dev/null, чтобы контейнер продолжал работать.
Чтобы убедиться, что контейнер запущен и том подключен, можно проверить информацию о контейнере.
docker inspect mycontainer
Найдите раздел "Mounts" в выводе. Вы должны увидеть запись о томе mydata, смонтированном в /app.
Попытаться удалить используемый том
На этом этапе вы попытаетесь удалить том mydata, пока он все еще используется контейнером mycontainer. Это продемонстрирует, что происходит, когда вы пытаетесь удалить том, который активно смонтирован в работающем контейнере.
Используйте команду docker volume rm, чтобы попытаться удалить том mydata.
docker volume rm mydata
Вы должны увидеть сообщение об ошибке, указывающее, что том используется и не может быть удален. Это ожидаемое поведение. Docker не позволяет удалять том, который в данный момент подключен к работающему контейнеру, чтобы избежать потери данных или непредвиденного поведения.
Чтобы убедиться, что том не был удален, перечислите тома еще раз.
docker volume ls
В выводе вы по-прежнему должны увидеть mydata.
Принудительно удалить используемый том
На предыдущем этапе вы узнали, что нельзя удалить том, который в данный момент используется работающим контейнером. Однако могут быть ситуации, когда вам нужно удалить том, даже если он используется. Docker позволяет принудительно удалить том с помощью флага -f или --force в команде docker volume rm.
Примечание: Принудительное удаление используемого тома может привести к потере данных и непредвиденному поведению контейнера, который его использует. Используйте эту опцию с осторожностью.
Попробуем принудительно удалить том mydata, пока контейнер mycontainer все еще запущен.
docker volume rm -f mydata
Вы должны увидеть имя тома, напечатанное в консоли, что означает, что он был удален.
Теперь убедимся, что том был удален, перечислив все тома.
docker volume ls
Тома mydata больше не должно быть в списке.
Вы также можете проверить статус контейнера mycontainer.
docker ps
Контейнер mycontainer может по-прежнему отображаться в списке работающих контейнеров, но он может быть в неработоспособном состоянии или остановиться неожиданно, так как его том был удален.
Наконец, остановим и удалим контейнер, чтобы очистить систему.
docker stop mycontainer
docker rm mycontainer
Резюме
В этом практическом занятии (лабораторной работе) вы узнали, как управлять томами Docker с помощью команды docker volume. Вы начали с создания тома с именем myvolume с использованием команды docker volume create и проверили его существование с помощью docker volume ls. Затем вы практиковали удаление тома с использованием docker volume rm и подтвердили его удаление, перечислив тома еще раз.
Вы также исследовали поведение команды docker volume rm, когда том используется контейнером. Вы создали том и контейнер, который его использовал, и обнаружили, что попытка прямого удаления тома завершилась неудачей. Наконец, вы узнали, как принудительно удалить используемый том, добавив флаг -f в команду docker volume rm.



