Вопрос или проблема
Я новичок в Linux и установил armbian на SD-карту, и все работает отлично.
SD-карта имеет объем 64 ГБ.
Затем я установил docker.io
, docker-compose
и portainer
, больше ничего.
Когда я проверяю диск с помощью lsblk:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 59.5G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot
└─mmcblk0p2 179:2 0 58.4G 0 part /
mmcblk1 179:32 0 14.6G 0 disk
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
zram0 254:0 0 50M 0 disk /var/log
zram1 254:1 0 929.4M 0 disk [SWAP]
Затем с df
:
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 796M 0 796M 0% /dev
tmpfs 186M 8.0M 178M 5% /run
/dev/mmcblk0p2 58G 2.2G 55G 4% /
tmpfs 930M 0 930M 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 930M 0 930M 0% /tmp
/dev/mmcblk0p1 511M 59M 453M 12% /boot
/dev/zram0 49M 7.0M 38M 16% /var/log
overlay 58G 2.2G 55G 4% /var/lib/docker/overlay2/b28da5a318945ac7ae1d17d26a635edb9a662c6116dea37fb4f6c13e1c76d7d2/merged
tmpfs 186M 0 186M 0% /run/user/0
Почему остаются два объема по 55 ГБ (/dev/mmcblk0p2
и overlay filesystem
)?
Это значит, что я могу использовать только 55 ГБ на папке /var/lib/docker/overlay2/.../merged
?
/dev/mmcblk0p2
— это корневая файловая система, где установлена ваша дистрибутив Linux.
Где 2.2 ГБ
используется, а 55 ГБ
доступно.
Директория /var/lib/docker/overlay2
— это место, где Docker хранит свои образы и контейнеры.
Docker использует файловую систему copy-on-write для хранения, которая создает новый слой поверх существующей файловой системы.
Это файловая система overlay Docker, и расположение вы видите с помощью df -h
overlay 58G 2.2G 55G 4% /var/lib/docker/overlay2/b28da5a318945ac7ae1d17d26a635edb9a662c6116dea37fb4f6c13e1c76d7d2/merged
У вас есть 55 ГБ
доступного места на ваше SD-карте для хранения файлов, установки пакетов и использования Docker и т.д.
Вы можете изменить этот путь на другую директорию, хранилище или диск, если захотите.
Используйте драйвер хранения OverlayFS
Устаревший драйвер overlay использовался для ядер, которые не поддерживали функцию “multiple-lowerdir”, необходимую для overlay2. Все поддерживаемые в настоящее время дистрибутивы Linux теперь предоставляют поддержку этого, поэтому он устарел.
Overlay в Docker
Docker использует файловую систему overlay для создания образов, а также для размещения слоя контейнера поверх слоев образа. Когда образ загружается, его слои находятся внутри папки /var/lib/docker/overlay2.
Объединенные папки являются файловыми системами overlay, сами они не занимают дисковое пространство, вместо этого df сообщает об использовании диска подлежащей файловой системой, в вашем случае это /
/var/lib/docker/overlay2/*/merged занимаем слишком много места
Ответ или решение
Вопрос о свободном месте на диске в файловой системе поверхностного накрытия (overlay filesystem) в Docker привлекает внимание многих, кто только начинает работать с этой платформой на операционных системах на базе Linux. Ваш случай с Armbian на SD-карте размером 64 ГБ и установкой Docker, docker-compose и Portainer является отличным примером для разъяснения данной темы.
Теория: Файловая система overlay в Docker
Docker использует концепцию "копирования при записи" (copy-on-write) для управления слоями образов и контейнеров. Это позволяет создавать новые слои поверх существующих файловых систем, минимизируя затраты ресурсов и времени на развертывание приложений. Основной путь хранения этих слоев и данных Docker – /var/lib/docker/overlay2
.
Файловая система overlay или overlay2 – это не просто директория, а многоуровневая система, которая может содержать множество слоев. Каждый слой – это измененная версия предыдущего, так что если контейнер выполняет изменения, они сохраняются в новом слое, не затрагивая предыдущие.
Пример: Ваш текущий случай
Ваши данные показывают, что /dev/mmcblk0p2
занимает 4% из 58G, оставляя 55G свободными. Эти 55 ГБ доступны для использования системой в целом, включая Docker.
Строка из df -h
:
overlay 58G 2.2G 55G 4% /var/lib/docker/overlay2/b28da5a318945ac7ae1d17d26a635edb9a662c6116dea37fb4f6c13e1c76d7d2/merged
указывает, что overlay-файловая система и корневая файловая система на самом деле потребляют одно и то же дисковое пространство. Это связано с тем, что файловая система overlay монтируется поверх корневой файловой системы, используя ее объем.
Применение: Что это означает для вас
-
Общее дисковое пространство: Это означает, что 55 ГБ доступны для всей операционной системы, а не только для Docker. Ваша корневая файловая система и overlay filesystem Docker используют общее дисковое пространство
/dev/mmcblk0p2
. -
Изменение места хранения Docker: Если необходимо, вы можете изменить стандартное местоположение хранения Docker. Это особенно полезно, если требуется разграничить данные контейнеров и систему, используя другой диск или раздел. Это можно сделать, изменив конфигурацию Docker в файле
daemon.json
. -
Оптимальное использование места: Поскольку Docker использует метод "копирования при записи", экономичное управление образами и контейнерами позволяет оптимизировать использование дискового пространства. Например, удаление ненужных изображений и контейнеров освободит пространство.
-
Мониторинг и управление ресурсами: Понимание того, как Docker управляет и расходует дисковое пространство, позволяет более эффективно следить за ресурсами и производительностью вашей системы. Команды такие как
docker system prune
могут помочь освободить дисковое пространство, удаляя неиспользуемые объекты.
Надеюсь, это объяснение помогло прояснить, как распределяется использование дискового пространства в вашей системе с Docker. Работая с контейнерами, важно понимать, как они взаимодействуют с файловыми системами, чтобы максимально эффективно использовать ресурсы.