Должен ли я быть обеспокоен избыточными, неработоспособными контейнерами 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. Если вы забыли очистить, то объемы съедят ваше дисковое пространство.