Подробное введение в драйвер для хранения Docker
Недавно я работал над проектом и не знал, как использовать драйвер для хранения Docker в течение этого периода, поэтому я искал информацию в Интернете и решил ее. Я запишу его здесь.
Цель
Docker - это контейнерный двигатель с открытым исходным кодом, который в основном использует пространство имен ядра Linux для достижения изоляции песочницы и использует CGROUP для достижения ограничения ресурсов. Docker - это легкий контейнер Linux, используемый для унифицированной разработки и развертывания, пытаясь решить проблему «зависимости ада», объединяя зависимые сервисы и компоненты, аналогичные контейнерам, используемым судами, и достигая быстрой установки и развертывания.
1. Основная архитектура Docker - клиент и демон
Давайте сначала поймем основную архитектуру и процесс запуска Docker. На самом деле, Docker принимает архитектуру C/S, включая клиент и сервер. Docker Daemon принимает запросы от клиентов в качестве сервера и обрабатывает эти запросы (создать, запустить, отправлять контейнеры). Клиент и сервер общаются на той же машине через API RESTful. В конкретном процессе использования, после выполнения запуска Docker Service, процесс Docker Deamon Daemon генерируется на хосте, запускается в фоновом режиме и ожидайте получения сообщений от клиента (т.е. входные команды Docker, такие как Docker Pull XXX, Docker Run…, Docker Commit xxx) для взаимодействия с Docker Deamon. После запуска службы Docker вы можете увидеть процесс Docker.
По умолчанию
[root@localhost ~]# ps -aux | Grep DockerRoot 11701 0,0 0,4 359208 16624? Ssl 21:05 0:00/usr/bin/docker -d -h fd: // -selinux -inabled -insecure -registry 186.100.8.216:5000ROT 11861 0.0 0.0 113004 2256 PTS/0 S+ 23:01 0:00 -колокол = AUTO DOCKER.
Это происходит главным образом потому, что при указании файловой системы вам необходимо настроить конкретный драйвер хранения в/etc/sysconfig/docker (это напишет специальный блог), а затем запустить Docker Daemon и не может работать через параметры команды Run. Вы также можете установить его непосредственно из командной строки хоста через Docker D.
2. Метод хранения Docker - драйвер хранения
Основной частью модели Docker является эффективное использование иерархического зеркального механизма. Зеркало может быть унаследовано через иерархию. На основе основного изображения (без родительского изображения) можно сделать различные конкретные изображения приложений. Различные контейнеры Docker могут поделиться некоторыми основными слоями файловой системы и в то же время, в сочетании с их собственными уникальными слоями изменений, значительно повышая эффективность хранения. Основным механизмом является иерархическая модель и установить различные каталоги к одной и той же виртуальной файловой системе (объединить несколько каталогов в одну виртуальную файловую систему, из этой статьи). Несколько различных драйверов хранения используются для Docker для хранения зеркала, в том числе: AUFS, DeviceMapper, BTRFS и Overlay (с официального веб -сайта). Ниже приводится краткое введение в различные драйверы хранения.
Aufs
Aufs (oreightUnionfs) - это совместная файловая система. AUFS поддерживает установку разрешений READONLY, READWRITE и BHITEOUT, которые можно найти для каждого каталога участников (аналогично GIT). В то же время, в AUFS есть аналогичная концепция, где ветви с разрешениями только для чтения могут быть изменены логически постепенно (не влияя на часть только для чтения). Единственный драйвер хранилища AUFS может реализовать совместное использование исполняемых и общих библиотек времени выполнения между контейнерами, поэтому, когда вы запускаете сотни времени выполнения с тем же программным кодом или библиотеками времени выполнения, AUFS является очень хорошим выбором.
Mapper Device
Mapper Device - это структура отображения от логических устройств до физических устройств, предоставленных в ядре Linux 2.6. В соответствии с этим механизмом пользователи могут легко сформулировать стратегии управления для реализации ресурсов хранения в соответствии с их потребностями (см. Подробности). Драйвер карты устройства создаст простой файл 100G, содержащий ваши изображения и контейнеры, каждый контейнер ограничен объемом размера 10 г (примечание: это разреженный файл, автоматически созданный с использованием Loopback, в частности, данных и метаданных при/var/lib/docker/devicemapper/devicemapper, которые могут быть расширены динамически). Вы можете настроить размер контейнера Docker, для конкретного эталона). Вы можете использовать параметр -s, чтобы указать драйвер при запуске демона Docker, то есть вы можете установить драйвер хранилища Docker Docker -d -S DeviceMapper. Сначала закройте службу Docker и выполните команду:
По умолчанию
[root@localhost ~]# docker -d -s devicemapperinfo [0000] +job serveapi (unix: //var/run/docker.sock) info [0000] прослушивание http on unix (/var/run/docker.sock) info) infor informer (0000] +initizer ОК (0) Информация [0000] Загрузка контейнеров: запуск. .... Информация [0000] Загрузка контейнеров: сделано. Информация [0000] Docker Daemon: 1.4.0 4595D4F/1.4.0; Execdriver: Native-0.2; GraphDriver: DeviceMapper Info [0000] +job acceptConnections () info [0000] -job acceptConnections () = OK (0)
Кроме того, Docker может указать параметр hore-opt при запуске контейнера, но теперь только DeviceMapper может принимать параметры параметров. Позже будут целевые дисплеи блога.
Btrfs
Драйвер BTRFS может быть очень эффективным в сборке Docker. Однако, как и DeviceMapper, он не поддерживает общее хранилище между устройствами (участвуйте в официальном веб -сайте). BTRFS поддерживает снимки и клоны, а также может легко управлять несколькими физическими устройствами. (Для получения подробной информации, пожалуйста, обратитесь к введению IBM в BTRFS)
наложение
Наложение очень похоже на AUF, но его производительность лучше, чем AUF, и имеет хорошее использование памяти. Теперь он был объединен в ядро Linux 3.18. Конкретная команда использования: наложение Docker DS
Примечание на официальном веб -сайте: в настоящее время он не поддерживается на BTRFS или любой копии в файловой системе записи и должен использоваться только в разделах EXT4.
3 структура каталогов Docker
Двумя наиболее важными понятиями Docker являются зеркала и контейнеры. Так где же изображение мы сбиваем? После того, как контейнер для запуска зеркала запускается, где модифицируется содержание нашей операции? Поскольку конкретные драйверы различны, окончательный эффект реализации отличается. Давайте проанализируем структуру хранения Docker, используя драйвер для хранения устройств Mapper в качестве примера.
1. Введите каталог/var/lib/docker и перечислите содержимое:
По умолчанию
[root@localhost ~]# cd/var/lib/docker/[root@localhost docker]# lscontainers devicemapper execdriver график
Согласно содержанию каталога, очевидно, что драйвер DeviceMapper используется.
ПРИМЕЧАНИЕ. Папки, показанные ниже, все находятся под/var/lib/docker.
2. Какую папку существует файл изображения вытянуть? (См.)
Информация об изображении притяжения сохраняется в папке графика, а содержимое изображения существует при DeviceMapper/ DeviceMapper/ Data.
3. Где запускается контейнер?
Информация о конфигурации контейнера запускается в контейнерах, а Execdriver/ Native/ также просматривается.
Содержимое операции в контейнере сохраняется в DeviceMapper/DeviceMapper/Data.
4. Роль графика
В архитектуре Docker он играет хранителя загруженного изображения контейнера и регистратора отношений между загруженным изображением контейнера. В локальном каталоге графика конкретная информация, хранящаяся для каждого изображения контейнера: метаданные (JSON) изображения контейнера, информация размер слоя (Slayersize) изображения контейнера и конкретные rootf, представленные изображением контейнера.
5. Экспериментальный тест:
- Первоначально контейнер не включен:
По умолчанию
[root@localhost docker]# ll контейнеры/всего 0
- Запустите контейнер:
По умолчанию
[root@localhost docker]# docker run -i -t - -rm centos: 7 /bin /bash [root@187a8f9d2865 /]#
Uuid из запущенного контейнера = 187a8f9d2865
- Перед запуском контейнера проверьте фактический размер файла под/var/lib/docker/devicemapper/devicemapper/
По умолчанию
[root@bhdocker216 docker]# du -h DeviceMapper/deviceMapper/*2.1g DeviceMapper/deviceMapper/data3.5m deviceMapper/deviceMapper/metadata
- Посмотреть на хосте
По умолчанию
[root@bhdocker216 Docker]# LS Containers/187a8f9d2865c2ac *** 91B981
Проверьте содержимое запускаемого контейнера под папкой UUID:
По умолчанию
[root@bhdocker216 контейнеры]# ll 187a8f9d2865c2ac *** 91b981total 24-rw -----. 1 Root Root 273 марта 5 23:59 187a8f9d2865 ***-json.log-rw-r--. 1 root root 1683 март 5 23:58 config.json-rw-r--. 1 root root 334 марта 5 23:58 hostconfig.json-rw-r--. 1 Root Root 13 марта 5 23:58 HOSTNAME-RW-R--. 1 корень корня 174 марта 5 23:58 Хост-RW-R--. 1 Root Root 69 марта 5 23:58 Resolv.conf- Добавить файл в контейнер запуска и просмотреть его.
Сначала создайте файл в запущенном контейнере:
По умолчанию
[root@8a1e3ad05d9e/]# dd if =/dev/Zero = floppy.img bs = 512 count = 57605760+0 записи в 5760+0 записи 2949120 байт (2,9 МБ).
Затем просмотрите файл под/var/lib/docker/devicemapper/devicemapper/:
По умолчанию
[root@bhdocker216 docker]# du -h DeviceMapper/deviceMapper/*5.5g DeviceMapper/deviceMapper/data4.6m DeviceMapper/deviceMapper/metadata
Размер этого места немного отличается, потому что я впервые выполнил #DD if =/dev/Zero = test.txt bs = 1m Count = 8000 для создания файла размером 8G. Я прекратил его, потому что это было слишком медленно, но я ясно вижу, что обе папки изменились (добавлены) при работе в работающем контейнере.
- Проверьте график. Когда вытягивается только одно изображение (Ubuntu14.10), появляются 7 длинных именованных каталогов. Как это произошло?
Используйте дерево изображений Docker, чтобы перечислить структуру зеркального дерева, и мы можем увидеть иерархическую структуру хранения зеркала. Последний Ubuntu (слой 7) основан на изменениях уровня 6, то есть N-Th-слой в этом логическом дереве основан на изменениях N-1, а N-слой зависит от изображения N-1. 0 -й слой, размер 0, называется базовым изображением.
- Каков контент в каталоге графика/UUID?
По умолчанию
[root@localhost Graph]# ll 01bf15a18638145eb *** -Htotal 8.0k-rw -----. 1 корень корня 1.6k март 5 18:02 json-rw -----. 1 корень корня 9 марта 5 18:02 Расширение слоя
Просмотреть содержание Layersize: размер уровня цифрового представления (блок: b). Josn: Сохраните метаданные этого изображения (например: размер, архитектура, конфигурация, контейнер, ** родительский uuid ** и т. Д.).
- Просмотреть папку DeviceMapper/DeviceMapper
Есть две папки, данные и метаданные. Фактически, драйвер карт устройства сохраняет как зеркало, так и файлы контейнеров в файле ** Data **. Вы можете просмотреть размер данных и метаданных через информацию Docker. Кроме того, вы можете использовать DU H (используется выше) для просмотра фактических размеров этих двух редких файлов.
- execdriver
По умолчанию
[root@bhdocker216 Docker]# ls execdriver/native/8a1e3ad05d9e66a455e683a2c *** 2437bdccccdfdfa // Посмотреть содержимое внутри: [root@bhdocker216 8a1e3ad05d9e66a4555e ***]# lscon.json.json.json.json.json.json.json.
- объемы
Объем без параметра -v пусты. После тестирования, если контейнер запускается, добавьте параметр -v, в папке объемов будет отображаться UUID. Глобальный поиск будет выполнен на хосте и найден только под томами. Это не имеет ничего общего с изображением и UUID контейнера.
По умолчанию
[root@bhdocker216 docker]# find/-name 86eb77f9f5e25676f100 *** d5a/var/lib/docker/volumes/86eb77f9f5e25676f100 *** d5a // Просмотр содержимо 86eb77f9f5e25676f100 *** d5aconfig.json [root@bhdocker216 тома]# cat 86eb77f9f5e25676f100 *** d5a /config.json {"ID": "86EB77F9F5E25676F100A89BA727BC15185303236AAE0DCF4C17223E37651D5A", "PATH": "/HOME/DATA", "ISBINDMOUNT": TRUE, "Запись": TRUE} Описание таблицы функции папки
Сделайте резюме, организуйте таблицу и объясните функции разных папок в/var/lib/docker:
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!