Следует ли мне беспокоиться о лишних, неработающих контейнерах Docker?

144

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

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

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

velo9
источник
1
Некоторое docker execвремя назад была добавлена ​​команда, см. Docs.docker.com/reference/commandline/cli/#exec - она ​​выполнит команду вне работающего контейнера.
schmunk
К вашему сведению, если вы хотите узнать, как удалить старые контейнеры, см. Этот вопрос: stackoverflow.com/questions/17236796/…
Райан Уоллс
1
@schmunk Ссылка переехала. docs.docker.com/engine/reference/commandline/exec
akauppi

Ответы:

73

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

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

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

Кен Кокрейн
источник
1
Документация для RUNкоманды теперь перемещена по адресу
aculich
63

В 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
Aculich
источник
4
Не прямой ответ на вопрос , но интересный ответ, который даст пользователям некоторое представление о механизмах, стоящих за докером. Благодарность!
thaJeztah 05
3
-rmустарела и когда-нибудь будет удалена, используйте --rmвместо нее.
bain
5

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

зергуд
источник
2

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

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

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

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

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

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
Франк Дернонкур
источник
2

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

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

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

Арианвир
источник