# Образы
Образ - контейнер только для чтения, содержащий все для запуска (минимальная ОС, приложение, зависимости, метаданные)
Образ состоит из слоев, существующие слои общие для использования и могут быть в разных образах.
Образ - manifest файл, в котором список слоев и метаданных.
Слой - целостный объект.
Каждая команда в dockerfile, модифицирующая файловую систему контейнера, создает новый слой.
Нельзя удалить образ, пока последний контейнер не будет удален.
Образы обычно хранятся в /var/lib/docker/<storage-driver>
!Нужно достаточно места в /var!
У образа есть hash (digest), у каждого из слоев есть digest
Параметр distribution hash - hash сжатого образа или образа для размещения в hub
Для поддержки разных архитектур и платформ для одного названия (напр. golang:latest) используются manifest list и manifests
Для каждого контейнера создается новый слой чтения/записи
**Команды работы с образами**
Базовая командаДоп. парам.Описание
**docker images** Список установленных образов
-qтолько отображение ID контейнеров
--digestsдобавляет столбец с хэшем образа
dangling: true/falseОбразы без тега. Происходит если при создании нового образа сохраняется тег старого. У старого обнуляется тэг, у нового остается.
label: <label>Фильтрует на основе наличия метки или ярлыка и значения. Команда docker images не отображает метки в своих выходных данных.
**docker search**<слово>поиск в dockerhub по слову <слово>
--filter ""Доп. фильтр ```bash docker search alpine --filter "is-official=true" ```
--limit числокол-во выдачи, максимум 100
**docker image pull** Синоним: **docker pull** <repository>:<tag>Загрузка образа из репозитория repository: - В случае официального образа на docker hub: одно слово - В случае неофициального образа на docker hub: слово/слово ```bash docker pull nigelpoulton/tu-demo:v2 ``` - В случае внешнего хранилища: адрес хранилища без http(s) ```bash docker pull gcr.io/google-containers/git-sync:v3.1.5 ```
<digest>Хэш образа
**docker image push** Синоним: **docker push** <repository>:<tag>|<digest>Загрузка образа на репозиторий, доп. параметры аналогичны pull
**docker image prune**<repository>:<tag>удаление образа из локального хранилища
-aудаление всех неиспользуемых контейнерами образов
**docker image build** **docker build** -t тег образа. обычно имя:версия <путь к dockerfile> - обязательный Создание образа из dockerfile ``` docker build -t myapp:1.0 . docker build -t ${PROJECT_NAME}_db:${VERSION} ./database ```
**docker image tag** **docker tag** Создать тэг TARGET\_IMAGE связанный с SOURCE\_IMAGE Это нужно только для публикации образа в dockerhub ``` docker tag ddd-book:ch8.1 nigelpoulton/ddd-book:ch8.1 ```
**docker rmi** Удаляет заданный образ или несколько образов. Удаление всех образов: ```bash docker rmi $(docker images -q) -f ``` Эта команда удаляет старые теги без удаления образа, если есть еще образы, ссылающиеся на этот образ.
**docker inspect <имя или ID образа>** информация по образу
**docker info | grep Storage** При использовании docker pull или docker-compose up -d образы размещаются в /var/lib/docker/overlay2