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


144

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

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

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


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

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 и т. Д.) С базовыми конфигурациями в среде контейнера.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.