Ответ
Слои (layers) в Docker — это неизменяемые файловые снимки, из которых собирается Docker-образ. Каждая инструкция в Dockerfile создает новый слой поверх предыдущих.
Как это работает:
- Базовый слой: Обычно минимальная ОС (например,
alpine:latest). - Слои команд: Каждая команда (
RUN,COPY,ADD) создает новый слой с изменениями файловой системы. - Контейнерный слой: При запуске контейнера поверх образа добавляется тонкий слой для записи (copy-on-write).
Пример Dockerfile и его слои:
# Слой 1: Базовый образ
FROM ubuntu:22.04
# Слой 2: Результат выполнения apt-get update && apt-get install
RUN apt-get update && apt-get install -y g++
# Слой 3: Добавление исходного кода
COPY ./src /app/src
# Слой 4: Компиляция
RUN g++ /app/src/main.cpp -o /app/hello
# Слой 5: Команда по умолчанию
CMD ["/app/hello"]
Преимущества слоев:
- Кэширование: Docker кэширует слои. Если
Dockerfileи команды не менялись, сборка использует кэш, что значительно ускоряет процесс. - Экономия диска: Разные образы могут совместно использовать одни и те же базовые слои (например,
ubuntu:22.04). - Неизменяемость: Образ, собранный однажды, гарантированно воспроизводим, так как состоит из фиксированных слоев.
Практический совет: Объединяйте команды RUN в одну цепочку через &&, чтобы уменьшить количество слоев и избежать накопления промежуточных данных в кэше.