Где на хосте хранятся образы и контейнеры Docker? — CloudSavvy ИТ
Docker использует два типа форматов для представления запущенных процессов — образы и контейнеры, и оба хранят данные на диске вашего компьютера. Мы поговорим о командах, которые Docker предоставляет для обработки данных, и о том, как вы можете использовать их для доступа к файлам изображений и контейнеров.
Разница между изображениями и контейнерами
Образы — это то, что вы создаете, когда запускаете docker build; они хранятся в реестре контейнеров, таком как Docker Hub, и содержат все файлы и код для запуска приложения. Вы можете думать о них как о файлах ISO для операционной системы виртуальной машины.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Контейнеры создаются из образов, и они похожи на настоящую виртуальную машину, на которой выполняется приложение. У вас может быть несколько контейнеров, работающих параллельно с одним и тем же образом. Каждый контейнер будет иметь свою собственную файловую систему, необязательно созданную с помощью «монтирования томов», которые привязывают данные от хоста к контейнеру.
Работа с хранилищем образов Docker
Изображения хранят все содержимое изображения на вашем диске. Всякий раз, когда вы берете изображение из Интернета, оно загружается и сохраняется, обычно навсегда. Изображения могут быть очень большими, поэтому со временем они могут накапливаться, особенно для ноутбуков с ограниченным объемом памяти.
Если вы хотите получить прямой доступ к данным изображения, они обычно хранятся в следующих местах:
- Linux: / var / lib / docker /
- Windows: C: ProgramData DockerDesktop
- macOS: ~ / Библиотека / Контейнеры / com.docker.docker / Data / vms / 0 /
Однако трогать эти данные — плохая идея. Хранилище Docker сложное и на самом деле сильно различается в зависимости от какой драйвер памяти он использует. Linux теперь по умолчанию использует overlay2 в большинстве дистрибутивов, что даже недоступно для большинства конечных пользователей. Игнорирование этого может привести к потере данных.
Вместо этого Docker предоставляет управляемые команды для обработки изображений. Вы можете просмотреть все версии загруженных изображений с помощью простой команды:
К счастью, это не так плохо, как кажется, поскольку в образах Docker версии хранятся постепенно. Это означает, что всякий раз, когда вы загружаете новую версию, она заменяет только те части, которые были изменены. Если вы часто используете один и тот же образ снова и снова, вы, вероятно, не будете слишком дорого стоить для хранения.
Однако, если вы используете много разных изображений, у вас может быть сохранено много изображений, которые даже больше не используются. Чтобы очистить их, Docker предоставляет встроенную команду для запуска сборки мусора. Это приведет к удалению всех изображений, на которые нет ссылок, т. Е. Не отмеченных тегами или не упоминаемых каким-либо контейнером.
Чтобы удалить все старые образы, не используемые существующими контейнерами, запустите его с флагом -a:
Это охватывает основной вариант использования, но есть еще несколько полезных команд:
- inspect: отображает информацию о версии контейнера.
- save & load: сохраняет и загружает изображения в tar-архив.
- rm: удаляет изображение напрямую.
- pull / push: обновления из удаленного реестра.
- история: предоставляет журнал изменений.
Работа с хранилищем контейнеров Docker
Вы можете просмотреть всю информацию о контейнере с помощью docker inspect, который показывает драйверы и данные файловой системы, а также все существующие монтирования и тома.
докер проверяет идентификатор контейнера
Контейнеры хранят данные двумя способами. Во-первых, это базовая файловая система, которая копируется из образа и уникальна для каждого контейнера. Docker использует «нижний каталог» и «верхний каталог», которые представляют собой отдельные уровни, которые объединяются в одну гибридную файловую систему. Нижний каталог хранит данные базового образа, а верхний каталог хранит все, что было изменено во время выполнения, например файлы журнала. В любом случае их хранение зависит от того, какой драйвер файловой системы Docker настроен на использование.
Тогда есть горы, которые привязывают каталоги с хоста к контейнеру, обычно управляются автоматически с помощью функции Docker, называемой тома. Они обычно хранятся и доступны для конечных пользователей. Если вы выполняете какую-либо работу, требующую изменения данных в запущенных контейнерах, вам, вероятно, следует изменить том или привязать монтирование.
Доступ к томам
Доступ к монтированию привязки можно получить напрямую, и это отличный выбор, если вы хотите сохранить конфигурацию, которая используется для многих контейнеров, или хранить доступные данные, которые сохраняются при перезапуске контейнера.
Если вы хотите изменить данные, хранящиеся в томах, вы тоже можете это сделать. Они хранятся в стандартном формате, доступном из Linux:
/ вар / библиотека / докер / тома / volumeID / _data
Вы можете получить идентификатор тома и информацию с помощью docker volume inspect.
Как и изображения, тома могут устареть. Вы можете легко их удалить, но их резервное копирование и перенос — более сложный процесс.
объем докера удалить объем докера rm volumeID
Изменение файловой системы контейнера Docker
Если вы хотите изменить файловую систему контейнера, как и изображения, это плохая идея. В большинстве случаев вам следует создать новую версию контейнера с обновленными изменениями и развернуть обновление.
Однако, если вы хотите внести некоторые быстрые изменения, не останавливая контейнер, лучший способ — просто открыть оболочку bash внутри контейнера и изменить ее с помощью Docker. Сделать это очень просто — запустите docker exec в контейнере и передайте «bash» в качестве команды:
docker exec -it контейнер bash
Отсюда вы можете использовать обычные команды Linux. Если вы хотите сделать это удаленно, вы можете установить SSH-сервер в свой контейнер и привязать порт 22 к другому порту на хосте.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Как узнать где лежат Docker контейнеры и их логи (Linux)?
Собрал два конйтнера, но их нет в
/var/lib/docker/containers
При этом в списке docker images они есть и в docker logs я вижу логи.
Сборка происходит через композ (версия 3 и 3.9).
Через find по id или имя контейнера ничего не нашел.
Вопрос — куда Докер собирает и размещает мои собранные контейнеры, а также их логи (Linux)?
Средний 6 комментариев
sudo ls /var/lib/docker/overlay2
sudo ls /var/lib/docker/containers
— это containers
но вероятно удален после завершения
docker container ls -a
если помогло — я положу в ответы вы отметите решением
сергей кузьмин, Поправки: overlay2/ — слои образов и контейнеров, containers/ — конфиги, файловые логи и точки монтирования каждого контейнера. docker images берёт данные из image/
А ещё docker info, где есть информация по storage driver. И вообще, /var/lib/docker легко переопределить через конфиг (многие перекидывают на отдельный диск, чтобы не забивать место в разделе с системой).
sudo ls /var/lib/docker/containers
2dbfbdd6094e345c1f5e04cca13cd2a1f282aee2a1987e6eb45b65f02a6b36aa a1fbf3cf03733eaa25d087d1df13586e77ca3b263920e241b20f10011d49eb59 ce9d1a0078fa19b1bac9c65f84ebb3b1b34eb91a46f283298284b025c67160c9 7352fe7d6685f173cf276155ecbaee5d59911ec3eba249fd58c1b6c4f09a620d cc4dce4bf6c81646b8d5628c885acfb701b1b216d29da2eb4213bcf6f3814cfb
Но в списке docker container их нет:
CONTAINER ID STATUS 8ef719b7616d Exited (1) 4 hours ago 5926dcc2c8db Up 5 hours c71b890073e7 Up 5 hours (healthy) d61d4fe9ec4f Up 5 hours dfbb84ade456 Up 5 hours 691dd11b54b6 Exited (130) 2 days ago 87dc514e4794 Exited (0) 2 days ago 1899f1df359c Exited (0) 2 days ago 857d9987e7f8 Exited (0) 2 days ago
Все нужные контейнеры запущены.