Должен ли я быть обеспокоен избыточными, неработоспособными контейнерами Docker?

Каждая команда docker run или каждая команда RUN внутри файла Dockerfile создает контейнер. Если контейнер больше не работает, его все еще можно увидеть с помощью docker ps -a.

Должен ли я быть заинтересован в наличии огромного списка неиспользуемых контейнеров? Должен ли я выпускать docker rm в неиспользуемых контейнерах?

Я не уверен в производительности и памяти или штрафах за хранение этих нерабочих контейнеров.

Ответ 1

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

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

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

Ответ 2

Документация docker run описывает, как автоматически очищать контейнер и удалять файловую систему при выходе из контейнера:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Вышеприведенное показывает, что контейнеры по умолчанию не удаляются, но добавление --rm=true или просто короткая --rm будет работать следующим образом:

sudo docker run -i -t --rm ubuntu /bin/bash

Когда вы выйдете из контейнера, он будет автоматически удален.

Вы можете проверить это, указав контейнеры докеров в одном окне терминала:

watch -n1 'sudo ls -c /var/lib/docker/containers'

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

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

Ответ 3

Если вы запускаете контейнер с томом и не используете docker rm -v, чтобы удалить его, то этот том не будет удален после удаления контейнера. Также есть issue с драйвером хранилища vfs. Если вы забыли очистить, то объемы съедят ваше дисковое пространство.