Поиск по сайту:

Где на хосте хранятся образы и контейнеры Docker?


Docker использует два вида форматов для представления запущенных процессов — образы и контейнеры, и оба хранят данные на диске вашего компьютера. Мы поговорим о командах, которые Docker предоставляет для обработки данных, и о том, как вы можете использовать их для доступа к файлам образов и контейнеров.

Разница между изображениями и контейнерами

Изображения — это то, что вы создаете при запуске docker build; они хранятся в реестре контейнеров, таком как Docker Hub, и содержат все файлы и код для запуска приложения. Вы можете думать о них как о файлах ISO для операционной системы виртуальной машины.

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

Работа с хранилищем образов Docker

Образы хранят все содержимое образа на вашем диске. Всякий раз, когда вы извлекаете изображение из Интернета, оно загружается и сохраняется, как правило, навсегда. Изображения могут быть очень большими, поэтому со временем они могут накапливаться, особенно для ноутбуков с ограниченным объемом памяти.

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

  • Linux: /var/lib/docker/
  • Windows: C:ProgramDataDockerDesktop
  • macOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

Однако касаться этих данных, скорее всего, плохая идея. Хранилище Docker сложное и на самом деле сильно различается в зависимости от того, какой драйвер хранилища он использует. Linux теперь по умолчанию использует overlay2 в большинстве дистрибутивов, что даже недоступно для большинства конечных пользователей. Возня с этим может привести к потере данных.

Вместо этого Docker предоставляет управляемые команды для обработки изображений. Вы можете просмотреть все версии загруженных изображений с помощью простой команды:

docker image ls

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

Однако, если вы используете много разных изображений, у вас может быть много сохраненных изображений, которые даже больше не используются. Чтобы очистить их, Docker предоставляет встроенную команду для запуска сборки мусора. Это удалит все изображения, на которые нет ссылок, то есть не помеченные или на которые не ссылается какой-либо контейнер.

docker image prune

Чтобы удалить все старые изображения, не используемые существующими контейнерами, запустите его с флагом -a :

docker image prune -a

Это охватывает основной вариант использования, но есть еще несколько полезных команд:

  • проверить: отображает информацию о версии контейнера.
  • сохранить и загрузить: сохраняет и загружает изображения в архив tar.
  • rm: удаляет изображение напрямую.
  • pull/push: обновления из удаленного реестра.
  • история: содержит журнал изменений.

Работа с контейнерным хранилищем Docker

Вы можете просмотреть всю информацию о контейнере с помощью docker inspect, который показывает драйверы и данные файловой системы, а также все существующие подключения и тома.

docker inspect containerID

Контейнеры хранят данные двумя способами. Во-первых, это базовая файловая система, которая копируется из образа и уникальна для каждого контейнера. Docker использует «нижний каталог» и «верхний каталог», которые представляют собой отдельные слои, которые объединяются в одну гибридную файловую систему. В нижнем каталоге хранятся данные базового образа, а в верхнем каталоге хранится все, что было изменено во время выполнения, например файлы журналов. В любом случае их хранение зависит от драйвера файловой системы, на использование которого настроен Docker.

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

Доступ к томам

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

Если вы хотите изменить данные, хранящиеся в томах, вы тоже можете это сделать. Они хранятся в стандартном формате, доступном из Linux:

/var/lib/docker/volumes/volumeID/_data

Вы можете получить идентификатор тома и информацию с помощью docker volume inspect.

Как и изображения, тома также могут устаревать. Вы можете легко удалить их, но их резервное копирование и перенос — более сложный процесс.

docker volume prune

docker volume rm volumeID

Изменение файловой системы контейнера Docker

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

Однако, если вы хотите внести некоторые быстрые изменения, не останавливая контейнер, лучше всего просто открыть оболочку bash внутри контейнера и изменить ее через Docker. Сделать это очень просто — запустите docker exec в контейнере и передайте «bash» в качестве команды:

docker exec -it container bash

Отсюда вы можете использовать обычные команды Linux. Если вы хотите сделать это удаленно, вы можете установить SSH-сервер в свой контейнер и привязать порт 22 к другому порту на хосте.