Удаление контейнера с анонимными томами
На этом шаге вы узнаете, как удалить контейнер вместе с ассоциированными анонимными томами. При создании контейнера Docker может создавать тома для хранения данных. Анонимные тома — это тома, которые не имеют явного имени при создании. Они обычно создаются при наличии инструкции VOLUME
в Dockerfile образа.
Запустим контейнер, который создаст анонимный том. Снова используем образ ubuntu
и укажем точку монтирования тома с помощью флага -v
без указания имени перед двоеточием.
docker run -d -v /data ubuntu sleep infinity
Эта команда создаст контейнер и анонимный том, смонтированный по пути /data
внутри контейнера. Вы увидите ID контейнера.
<container_id>
Теперь проверим контейнер, чтобы увидеть созданный том. Замените <container_id>
на фактический ID вашего контейнера.
docker inspect <container_id>
Вывод docker inspect
представляет собой большой JSON-объект. Найдите раздел "Mounts"
. Вы увидите запись о томе, смонтированном по пути /data
, где поле "Name"
будет содержать длинную случайно сгенерированную строку — это признак анонимного тома.
...
"Mounts": [
{
"Type": "volume",
"Source": "<volume_name>",
"Target": "/data",
"Consistency": "consistent",
"BindOptions": null,
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
...
Также можно вывести список всех томов командой docker volume ls
. Вы увидите анонимный том в списке.
docker volume ls
Вывод будет содержать анонимный том со случайно сгенерированным именем.
DRIVER VOLUME NAME
local <volume_name>
По умолчанию при удалении контейнера его анонимные тома не удаляются. Сначала остановим контейнер. Замените <container_id>
на фактический ID.
docker stop <container_id>
Вы увидите ID контейнера.
<container_id>
Теперь удалим остановленный контейнер без удаления томов. Замените <container_id>
на фактический ID.
docker rm <container_id>
Вы увидите ID контейнера.
<container_id>
Проверим тома снова командой docker volume ls
. Анонимный том должен остаться.
docker volume ls
Вывод по-прежнему будет содержать анонимный том.
Теперь создадим другой контейнер с анонимным томом и удалим его вместе с томом.
docker run -d -v /data ubuntu sleep infinity
Получим ID нового контейнера.
<new_container_id>
Остановим новый контейнер. Замените <new_container_id>
на фактический ID.
docker stop <new_container_id>
Вы увидите ID контейнера.
<new_container_id>
Теперь удалим остановленный контейнер и его анонимные тома с помощью флага -v
в команде docker rm
. Замените <new_container_id>
на фактический ID.
docker rm -v <new_container_id>
Вы увидите ID контейнера.
<new_container_id>
Проверим тома снова командой docker volume ls
. Анонимный том, связанный с только что удалённым контейнером, должен исчезнуть. Первый созданный анонимный том должен остаться.
docker volume ls
В выводе должен остаться только первый созданный анонимный том.