4. Образы (Images)
Docker-образ — это неизменяемый шаблон, содержащий всё необходимое для запуска контейнера: код приложения, рантайм, библиотеки и конфигурацию. Образы состоят из слоёв (layers), которые позволяют эффективно кешировать и переиспользовать данные.
Основные команды для работы с образами
Заголовок раздела «Основные команды для работы с образами»# Список локальных образовdocker images# Или полная формаdocker image ls
# Скачать образ из реестраdocker pull nginxdocker pull nginx:1.25-alpinedocker pull ubuntu:22.04
# Удалить образdocker rmi nginxdocker image rm nginx:latest
# Удалить все неиспользуемые образыdocker image prunedocker image prune -a # включая образы без тегов
# Подробная информация об образеdocker inspect nginx
# История слоёв образаdocker history nginx
# Поиск образов на Docker Hubdocker search nginxТеги образов
Заголовок раздела «Теги образов»Тег — это метка, указывающая на конкретную версию образа. Формат: repository:tag.
# Формат полного имени образа[registry/][namespace/]name[:tag]
# Примеры:nginx:latest # официальный, последняя версияnginx:1.25-alpine # конкретная версия на Alpine Linuxnode:20-alpine # Node.js 20 на Alpinepostgres:15.3 # PostgreSQL 15.3myapp:v1.0.0 # собственный образ с версиейgcr.io/myproject/api:prod # образ в Google Container RegistryВажные теги:
- latest — последняя стабильная версия (не всегда самая новая!)
- alpine — минимальный образ на базе Alpine Linux (~5 MB)
- slim — уменьшенная версия Debian-образов
- bookworm/jammy — кодовые имена версий Debian/Ubuntu
Архитектура слоёв образа
Заголовок раздела «Архитектура слоёв образа»Каждая инструкция Dockerfile создаёт новый слой. Слои иммутабельны и кешируются:
nginx:latest├── Layer 1: debian:bookworm-slim (base OS) ~80 MB├── Layer 2: Install nginx packages ~50 MB├── Layer 3: Configure nginx ~1 MB└── Layer 4: Copy default config ~100 KBБлагодаря слоям несколько образов могут делиться общими слоями, экономя место:
node:20-alpine node:18-alpine├── alpine:3.19 ◄───────┤ alpine:3.19 (shared!)├── Node.js 20 ├── Node.js 18└── npm 10 └── npm 9Теги и работа с реестром
Заголовок раздела «Теги и работа с реестром»# Создать тег для образаdocker tag myapp:latest myapp:v1.0.0docker tag myapp:latest registry.example.com/myapp:prod
# Войти в реестрdocker logindocker login registry.example.com
# Отправить образ в реестрdocker push myapp:latestdocker push registry.example.com/myapp:prod
# Скачать конкретный дайджест (SHA256)docker pull nginx@sha256:abc123...Оптимизация размера образов
Заголовок раздела «Оптимизация размера образов»Выбор базового образа критически влияет на итоговый размер:
| Базовый образ | Размер |
|---|---|
| ubuntu:22.04 | 77 MB |
| debian:slim | 75 MB |
| alpine:3.19 | 7 MB |
| scratch | 0 MB |
| distroless | 20 MB |
# Сравнение образов Node.jsdocker pull node:20 # ~1.1 GBdocker pull node:20-slim # ~240 MBdocker pull node:20-alpine # ~130 MB