hostprofi.ru
Подобрать хостинг
Термин·буква С

Слой образа

краткое определение

Слой образа Docker (image layer) — неизменяемый промежуточный слой в Docker-образе. Каждая инструкция Dockerfile (RUN, COPY, ADD) создаёт новый слой. Слои кешируются и переиспользуются между образами, сокращая время сборки и место на диске.

Docker-образ — стек неизменяемых (read-only) слоёв. Каждая инструкция Dockerfile, изменяющая файловую систему, создаёт новый слой поверх предыдущего. При запуске контейнера Docker добавляет поверх read-only слоёв один записываемый слой (container layer). Все изменения в контейнере попадают только в этот слой и теряются при удалении контейнера.

Как работают слои

FROM ubuntu:22.04         # Слой 1: базовый образ
RUN apt update && apt install nginx   # Слой 2: nginx
COPY ./site /var/www/html  # Слой 3: файлы сайта
RUN chmod -R 755 /var/www  # Слой 4: права
EXPOSE 80

Слои 1–4 создаются при сборке (docker build). При изменении инструкции Dockerfile слои ниже неё кешированы, слои выше — пересобираются.

Оптимизация слоёв

Число слоёв влияет на размер образа и скорость сборки. Лучшие практики:

  • Объединять RUN-команды через && в один слой.
  • Очищать кеш пакетного менеджера в том же слое: RUN apt install nginx && rm -rf /var/lib/apt/lists/*
  • COPY файлы, меняющиеся редко, в начало; меняющиеся часто — в конец.
  • Multi-stage builds для уменьшения финального образа.

История

Концепция слоёв образов пришла от AUFS (Another Union File System), впервые использованной в Docker 0.1 (2013). AUFS заменён на overlay2 (2015) в Linux 3.18+. В 2017 году OCI (Open Container Initiative) стандартизировал формат образов. Overlay2 — стандартный storage driver Docker в 2024 году.

Связь с хостингом

Понимание слоёв важно при работе с Docker-реестрами (Docker Hub, GitLab Registry): при push/pull передаются только отсутствующие слои, что экономит трафик. На VDS с ограниченным диском команда docker image prune удаляет висячие слои. Оптимизация Dockerfile напрямую влияет на скорость CI/CD-пайплайна.

История слоёв в Docker

Слоистая файловая система в Docker основана на UnionFS, впервые применённой в 2005 году. Docker 0.1 (2013) использовал AUFS (Advanced Union File System). Overlay2 стал рекомендуемым драйвером с Docker 18.09 (2018) и встроен в ядро Linux 3.18+. Каждый слой — неизменяемый tar-архив с дельтой изменений ФС. Идентифицируется по SHA256-хешу. Слои кешируются и переиспользуются между образами.

Как работают слои на практике

При сборке Dockerfile каждая инструкция (RUN, COPY, ADD) создаёт новый слой. Инструкции ENV, EXPOSE, CMD — метаданные, слои не создают. Изменение инструкции инвалидирует кеш всех последующих слоёв — поэтому COPY package.json . ставят перед RUN npm install.

docker history nginx:latest   # показать слои образа
docker inspect nginx:latest   # подробная информация о слоях

Оптимизация слоёв на хостинге

Минимизация количества слоёв ускоряет деплой на VPS: объединяйте RUN apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/* в один слой. Multi-stage builds позволяют не включать компилятор в финальный образ. Слои хранятся в /var/lib/docker/overlay2/ и могут занимать значительное место — чистите командой docker system prune.

Типичные ошибки

  • Хранение секретов в промежуточных слоях образа: даже удалённые в RUN файлы видны в истории слоёв.
  • Использование :latest тега в продакшне: неконтролируемые обновления.
  • Слишком большой базовый образ (ubuntu вместо alpine): образ 200 MB против 5 MB.

Слои в образах минимизируют время деплоя на VPS: только изменённые слои передаются при обновлении образа. Базовые образы (alpine: 5 MB, debian:slim: 80 MB, ubuntu: 78 MB) определяют стартовый набор слоёв. Инструмент Buildah позволяет собирать OCI-образы слой за слоем без Docker daemon, а Nginx официальный образ состоит из 3-4 слоёв.

Другие термины