Как проверить размер базового устройства контейнера докеров

Я знаю, что Docker использует пул хранения для выделения памяти каждому контейнеру. При использовании хранилища devicemapper по умолчанию размер пула хранения составляет 100 ГБ, а ограничение по умолчанию для каждого контейнера - 10 ГБ. Эти данные показаны вBase Device Size а также Data Space Total поле в docker info.

Однако в моем сценарии docker info не отображать эти поля данных, вероятно, потому что мой драйвер хранилища overlay2 Как я могу извлечь эту информацию, есть ли другие способы?

Выход docker info

Containers: 9
  Running: 4
  Paused: 0
  Stopped: 5
Images: 28
Server version: 28
Storage driver: overlay2
  Backing filesystem: extfs
  Supports d_type: true
  Native Overlay diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
...

Выход docker version

Docker version 18.09.3, build 774a1fa

2 ответа

Решение

Я знаю, что Docker использует пул хранения для выделения памяти каждому контейнеру.

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

Вы можете глубже изучить наложенные файловые системы, чтобы понять, как они объединяют каталоги из родительской файловой системы в новую файловую систему, которую вы используете внутри контейнера. У меня есть пример работы с файловой системой наложения в моей вводной презентации:

https://sudo-bmitch.github.io/presentations/docker-intro/presentation.html

Фактические команды, используемые для запуска этой демонстрации оверлея, перечислены в этом файле уценки.

Следовательно, все ограничения, которые у вас есть для контейнеров, использующих что-то вроде файловой системы overlay2, наследуются от родительской файловой системы. Поскольку docker делает все в /var/lib/docker, ваше доступное дисковое пространство в этой файловой системе такое же, как и ограничения, которые вы увидите внутри контейнера. В моей лаборатории это символическая ссылка на каталог в / home, поэтому вы увидите следующее на хосте и внутри контейнера:

$ ls -l /var/lib/docker
lrwxrwxrwx 1 root root 12 Nov 11  2019 /var/lib/docker -> /home/docker

$ df -h /var/lib/docker/.
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/bmitch--t490--vg-home  857G  355G  459G  44% /home

$ docker run -it --rm busybox df -h /
Filesystem                Size      Used Available Use% Mounted on
overlay                 856.5G    354.6G    458.3G  44% /

"Пул хранения" и другие упомянутые вами метрики относятся к драйверу хранилища devicemapper. Драйвер оверлейного хранилища использует обычные файлы и некоторую магию ядра; для Docker нет какого-либо конкретного выделения пространства, и он может использовать все пространство на разделе, смонтированном на/var/lib/docker.

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