Docker на SSD. Борьба за место

· автор BaRoN · На чтение уйдёт 3 минуты · (428 слов)

Не далее чем вчера я писал про то, как можно почистить немного места, если ваш Maven разросся как следует. А сегодня продолжим про другие утилиты. Возьмём, к примеру, Docker. Очень полезная штука в ряде случаев, как-нибудь позднее напишу, как я его использовал. А пока расскажу, как я ликвидировал то, что от него осталось.

Docker - очень крутая штука, когда речь заходит про работу с томами (volume). Некоторые писатели докерфайлов очень любят создавать тома. Очень-очень любят создавать тома. А потом эти тома начинают скапливаться на винчестере, ведь не каждый пользователь догадывается про то, что они там занимают место. Итак, воспользуемся одной из двух команд:

docker volume ls -f dangling=true
docker volume ls danglng=true

Список не пуст? Поздравляю, у вас на диске лежит мусор, оставшийся от предыдущих контейнеров. Можно скопировать названия этих контейнеров и сделать docker volume rm первый второй третий, например, воспользовавшись автодополнением. А можно поступить одним из способов (какой запомните, мне ближе первый):

docker volume rm `docker volume ls -f dangling=true | awk '{print $2}'`
docker volume rm `docker volume ls -q -f dangling=true`

Или даже так, втупую:

docker volume rm `docker volume ls -q`

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

А ещё бывает так, что вы когда-то запуллили себе образ и никогда его не использовали. Ну, у вас-то наверняка такого не бывает, это у меня бывает! Посмотреть список имаджей и сколько они занимают, можно так:

docker images

Тогда можно сделать

docker rmi `docker images | awk '{print $3}'`

Или даже втупую

docker rmi `docker images -q`

Ну, вы догадались уже, какой из способов выбираю я?

А чтобы не пришлось искать dangling тома, которые потерялись и не принадлежат никакому из контейнеров, существующие контейнеры можно убивать вот так:

docker rm -v mariadb 

Где mariadb - имя ненужного контейнера. Кстати, после убийства контейнера можно убить и образы, которые использовались при его создании.

Ах да, а про то, что образы лучше брать на основе Alpine Linux, вы, наверное, и так уже знаете. Да ведь? Например, я недавно писал небольшую приблуду, которая подключается к удалённому Redis. И вот какие были варианты:

[msi] ❯ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
redis                      alpine              2aabafe89cbf        13 days ago         29.01 MB
redis                      latest              4465e4bcad80        2 weeks ago         185.7 MB

Нетрудно догадаться, какой из вариантов я выбрал? А вот и не угадали, правильный ответ: оба. Надо было оба проверить.

А вот немножко живого видео:

Полезное