Перейти к содержимому

4. Образы (Images)

Docker-образ — это неизменяемый шаблон, содержащий всё необходимое для запуска контейнера: код приложения, рантайм, библиотеки и конфигурацию. Образы состоят из слоёв (layers), которые позволяют эффективно кешировать и переиспользовать данные.

Окно терминала
# Список локальных образов
docker images
# Или полная форма
docker image ls
# Скачать образ из реестра
docker pull nginx
docker pull nginx:1.25-alpine
docker pull ubuntu:22.04
# Удалить образ
docker rmi nginx
docker image rm nginx:latest
# Удалить все неиспользуемые образы
docker image prune
docker image prune -a # включая образы без тегов
# Подробная информация об образе
docker inspect nginx
# История слоёв образа
docker history nginx
# Поиск образов на Docker Hub
docker search nginx

Тег — это метка, указывающая на конкретную версию образа. Формат: repository:tag.

Окно терминала
# Формат полного имени образа
[registry/][namespace/]name[:tag]
# Примеры:
nginx:latest # официальный, последняя версия
nginx:1.25-alpine # конкретная версия на Alpine Linux
node:20-alpine # Node.js 20 на Alpine
postgres:15.3 # PostgreSQL 15.3
myapp: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.0
docker tag myapp:latest registry.example.com/myapp:prod
# Войти в реестр
docker login
docker login registry.example.com
# Отправить образ в реестр
docker push myapp:latest
docker push registry.example.com/myapp:prod
# Скачать конкретный дайджест (SHA256)
docker pull nginx@sha256:abc123...

Выбор базового образа критически влияет на итоговый размер:

Базовый образРазмер
ubuntu:22.0477 MB
debian:slim75 MB
alpine:3.197 MB
scratch0 MB
distroless20 MB
Окно терминала
# Сравнение образов Node.js
docker pull node:20 # ~1.1 GB
docker pull node:20-slim # ~240 MB
docker pull node:20-alpine # ~130 MB