# Docker — Images (Управление образами)

Эта страница объясняет, что такое Docker-образы (Images), как они создаются, хранятся и управляются. Здесь разобраны основные команды для просмотра, загрузки, удаления и очистки образов. Материал рассчитан на начинающих и помогает понять, **как работают Docker-образы и как управлять ими на сервере**.

---

# Что такое Docker Image

Docker Image — это **шаблон контейнера**, из которого создаются запущенные контейнеры.

Проще говоря:

```text
Docker Image → контейнер
```

Пример:

```text
nginx:1.25  → контейнер nginx
mysql:8     → контейнер mysql
node:18     → контейнер node
```

Image содержит:

* операционную систему
* зависимости
* приложение
* конфигурацию запуска

Контейнер создаётся на основе образа и запускается как отдельный процесс.

---

# Как работают Docker Images

Docker Images состоят из **слоёв (layers)**.

Пример:

```text
Base OS
↓
System packages
↓
Application dependencies
↓
Application code
```

Каждый слой кэшируется.
Это позволяет Docker **ускорять сборку образов**.

---

# Просмотр образов

## Показать список образов

```bash
docker images
```

Пример вывода:

```text
REPOSITORY   TAG      IMAGE ID       SIZE
nginx        1.25     a1b2c3d4e5     142MB
mysql        8        f6g7h8i9j0     520MB
node         18       k1l2m3n4o5     1.2GB
```

### Что означает каждая колонка

| Поле       | Описание      |
| ---------- | ------------- |
| REPOSITORY | имя образа    |
| TAG        | версия образа |
| IMAGE ID   | уникальный ID |
| SIZE       | размер образа |

---

# Загрузка образа из registry

Docker может скачивать готовые образы из Docker Hub или другого registry.

```bash
docker pull <image>
```

Пример:

```bash
docker pull nginx:1.25
```

После этого образ появится в списке `docker images`.

---

# Теги образов

Docker использует **теги** для обозначения версии образа.

Пример:

```text
nginx:latest
nginx:1.25
node:18
```

### Почему не стоит использовать `latest`

Тег `latest` может измениться в любой момент.

Лучше использовать фиксированную версию:

```text
nginx:1.25
```

Это делает окружение более предсказуемым.

---

# Удаление Docker Images

## Удалить образ

```bash
docker rmi <image>
```

Пример:

```bash
docker rmi nginx:1.25
```

---

## Удалить образ по ID

```bash
docker rmi <image_id>
```

Пример:

```bash
docker rmi a1b2c3d4e5
```

---

## Удалить неиспользуемые образы

```bash
docker image prune -f
```

Удаляются **dangling images** — образы, которые больше не используются.

---

# Полная очистка старых образов

Если на сервере накопилось много старых образов:

```bash
docker system prune -a
```

Эта команда удалит:

* остановленные контейнеры
* неиспользуемые образы
* сети
* build cache

> **Важно:**
> Использовать эту команду нужно осторожно, особенно на production.

---

# Сборка образа

Образы можно создавать самостоятельно через `Dockerfile`.

Пример сборки:

```bash
docker build -t my_app .
```

Где:

| Параметр | Значение           |
| -------- | ------------------ |
| -t       | тег образа         |
| my_app   | имя образа         |
| .        | текущая директория |

---

# Проверка истории образа

Можно посмотреть, из каких слоёв состоит образ:

```bash
docker history <image>
```

Пример:

```bash
docker history nginx
```

Это помогает понять:

* какие команды выполнялись при сборке
* размер каждого слоя

---

# Использование образа для запуска контейнера

Контейнер можно запустить напрямую:

```bash
docker run nginx
```

Но чаще используется Docker Compose.

Пример:

```yaml
services:
  nginx:
    image: nginx:1.25
```

---

# Поиск образов

Можно искать образы на Docker Hub:

```bash
docker search nginx
```

Пример результата:

```text
NAME              DESCRIPTION
nginx             Official build of Nginx
nginx-unit        Nginx Unit runtime
```

Лучше использовать **официальные образы**.

---

# Типичные проблемы с образами

## Слишком много образов на сервере

Проверить:

```bash
docker images
```

Удалить старые:

```bash
docker image prune -f
```

---

## Образ не обновляется

Если используется:

```text
nginx:latest
```

Docker может использовать старую версию.

Решение:

```bash
docker pull nginx
```

---

## Слишком большой размер образа

Некоторые образы могут занимать несколько гигабайт.

Проверить:

```bash
docker images
```

При необходимости удалить неиспользуемые.

---

# Краткая памятка

```bash
docker images                     # список образов
docker pull <image>               # скачать образ
docker search <image>             # поиск образа

docker rmi <image>                # удалить образ
docker image prune -f             # удалить неиспользуемые образы

docker build -t <name> .          # собрать образ
docker history <image>            # история слоев образа
```