Основы Docker
1Что такое Docker и зачем он нужен2Образы Docker: теги, слои, реестры← вы здесь3Контейнеры: запуск, управление, отладка
Урок 2~12 минут

Образы Docker: теги, слои, реестры

Docker образ — это слоёная файловая система. Понимание слоёв объясняет, почему Docker такой быстрый.

Слои образа

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

Попробуй в симуляции

┌─────────────────────────────┐  ← CMD ["node", "app.js"]
├─────────────────────────────┤  ← COPY . .
├─────────────────────────────┤  ← RUN npm install
├─────────────────────────────┤  ← RUN apt-get install nodejs
└─────────────────────────────┘  ← FROM ubuntu:22.04

Слои неизменяемы и переиспользуются. Если два образа начинаются с FROM ubuntu:22.04, они используют один и тот же базовый слой на диске.

Теги

Тег — версия образа. Формат: имя:тег.

bash
docker pull nginx             # = nginx:latest
docker pull nginx:1.25        # конкретная версия
docker pull nginx:1.25-alpine # slim вариант на Alpine Linux
docker pull postgres:16-alpine

latest — не обязательно последняя стабильная. В продакшне всегда пиши конкретную версию.

Docker Hub и реестры

По умолчанию образы берутся с Docker Hub (docker.io). Есть другие реестры:

bash
# Docker Hub (по умолчанию)
docker pull nginx
 
# Другой реестр
docker pull ghcr.io/owner/repo:tag    # GitHub Container Registry
docker pull registry.gitlab.com/...   # GitLab Registry
docker pull gcr.io/project/image:tag  # Google Container Registry

Официальные образы (nginx, postgres) публикуются без prefix. Сторонние — с namespace: bitnami/postgresql.

Работа с образами

bash
docker images                 # список скачанных образов
docker images -a              # включая промежуточные слои
docker image ls               # то же что docker images
 
docker pull nginx:1.25        # скачать
docker rmi nginx:1.25         # удалить образ
docker rmi $(docker images -q) # удалить все
 
docker inspect nginx          # детали: слои, env, cmd
docker history nginx          # история слоёв

Размер образов

bash
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

Alpine-варианты в 5-10 раз меньше. Для продакшна предпочтительны:

  • node:20-alpine — ~50MB vs node:20 — ~1GB
  • nginx:alpine — ~20MB vs nginx — ~190MB

Кэш слоёв

Когда Docker строит образ (следующий урок — Dockerfile), он кэширует каждый слой. Если слой не изменился — он не пересобирается. Это делает повторные сборки быстрыми.

bash
docker build .  # первый раз — все слои
docker build .  # второй раз — Using cache для неизменённых

В следующем уроке — жизненный цикл контейнеров.

Образ состоит из слоёв. Каждый слой кэшируется — это делает сборку быстрой.
📦
Слои Docker образа
CMD ["node", "server.js"]
Точка входа
0 BREBUILD
COPY . .
Исходный код приложения
840 KBREBUILD
RUN npm ci
Установка зависимостей
124 MBCACHED
COPY package*.json ./
Только манифест зависимостей
1.2 KBCACHED
WORKDIR /app
Рабочая директория
0 BCACHED
FROM node:20-alpine
Базовый образ Node.js Alpine
51 MBCACHED
4
слоёв кэшировано
2
слоёв пересобрать
✅ Зависимости копируются отдельно — npm ci кэшируется пока package.json не изменится
🎯
Миссия 1 из 4
Что такое тег образа?