Должен ли я беспокоиться о лишних, не работающих Docker-контейнерах?

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

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

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

4 ответа

Решение

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

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

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

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

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

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

Чтобы оценить, сколько хранилищ неиспользуемые контейнеры Docker используют, вы можете запустить:

docker ps --size --filter "status=exited"

Эквивалентно, вы можете запустить: docker container ls --filter "status=exited"

Вы также можете использовать команду docker system df (введено в Docker 1.13.0), чтобы увидеть использование диска Docker, например:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B

Образ - это моментальный снимок файловой системы и зависимостей или определенный набор каталогов определенного приложения / программного обеспечения. Под моментальным снимком я подразумеваю копию только тех файлов, которые необходимы для запуска этого программного обеспечения (например, mysql, redis и т. Д.) С базовыми конфигурациями в среде контейнера.

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

Следовательно, контейнеры занимают только дисковое пространство. Если есть неиспользуемые контейнеры, вы должны удалить их, но не изображение, поскольку они всегда могут использоваться повторно.

Другие вопросы по тегам