Введение / Зачем это нужно
Управление Docker-образами — важная часть поддержания чистой и производительной системы. Накопление устаревших или больших образов занимает дисковое пространство, замедляет работу деплоя и может создавать путаницу при выборе нужного образа. После выполнения этого руководства вы сможете быстро просматривать, удалять и оптимизировать Docker-образы, что поможет вам поддерживать порядок в окружении Docker и избежать проблем с нехваткой места.
Требования / Подготовка
- Установленный Docker (>=20.10) на Linux-системе.
- Пользователь, имеющий права выполнения команд Docker (обычно добавлен в группу
docker). - Достаточно свободного места для операций очистки.
- Базовые знания работы с терминалом Linux.
Управление Docker-образами
Шаг 1: Просмотр списка Docker-образов
Сначала посмотрите, какие образы у вас есть.
docker images --format "table {{.Repository}}:{{.Tag}} {{.Size}}"
Этот формат вывода показывает репозиторий, тег и размер каждого образа в удобочитаемом виде.
Шаг 2: Удаление конкретного образа
Если вам нужен определенный образ, удалите его с помощью docker rmi.
docker rmi <image_name>[:tag]
Замените <image_name> на фактическое имя образа (например, nginx или myapp:latest). После удаления образ исчезнет из списка docker images.
Шаг 3: Очистка неиспользуемых образов
Для удаления всех образов, которые больше не используются никакими контейнерами, выполните команду:
docker image prune -a
Флаг -a также включает одноразовые образы (без тега). Подтвердите удаление, когда система попросит.
Шаг 4: Полная очистка кэша Docker
Более радикальная очистка — это docker system prune. Она удаляет неиспользуемые контейнеры, сети, кэши образов и даже ненужные объемы.
docker system prune -a --volumes
Используйте --volumes, если вам также нужно очистить данные томов, которые больше не привязаны к контейнерам.
Шаг 5: Оптимизация размера образа
Чтобы сделать образы меньше и быстрее, следуйте этим советам при сборке:
- Добавьте
.dockerignore— исключите ненужные файлы (логи, временные файлы,.gitи т.д.). - Используйте многослойную сборку — каждая инструкция в Dockerfile создает новый слой; объединяйте похожие операции (например, установка пакетов) в один слой.
- Удалите ненужные пакеты — если вы используете дистрибутив Linux внутри образа, удалите кэши apt после установки (
rm -rf /var/lib/apt/lists/*). - Кэшируйте только необходимые слои — используйте
--cache-fromи--cache-to, чтобы повторно использовать уже собранные слои.
Пример Dockerfile с несколькими этапами сборки:
FROM ubuntu:22.04 AS builder
RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-pip
WORKDIR /app
COPY requirements.txt .
RUN pip3 install -r requirements.txt
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y --no-install-recommends python3 && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/lib/python3.10/site-packages/ /usr/local/lib/python3.10/site-packages/
COPY --from=builder /app/ /app/
CMD ["python3", "-m", "app"]
Проверка результата
После выполнения шагов проверьте, что операции прошли успешно:
docker images --format "table {{.Repository}}:{{.Tag}} {{.Size}}"
Если ненужные образы исчезли, вы увидите только оставшиеся образы. Также вы можете проверить освобождение места с помощью df -h.
Возможные проблемы
Error: No such image– возможно, вы ввели неверное имя или тег. Проверьте список с помощьюdocker images.Error response from daemon: conflict: unable to delete...– образ используется запущенным контейнером. Остановите контейнер (docker stop <container>) или выполнитеdocker container prune.Error: conflict: unable to delete <image>... used by <container>– удалите или остановите все контейнеры, которые ссылаются на образ, перед удалением.- Дисковое пространство все еще низкое – убедитесь, что вы также удалили объемы (
docker volume prune) и проверьте содержимое/var/lib/dockerна наличие больших ненужных файлов.
⚠️ Важно: всегда проверяйте дважды команды удаления, особенно
docker rmiиdocker system prune, чтобы не удалить образ, который вам еще нужен.
💡 Совет: добавьте алиасы в ваш
.bashrcили.zshrc, напримерdimages="docker images --format 'table {{.Repository}}:{{.Tag}} {{.Size}}'", чтобы быстро вызывать часто используемые команды Docker.