<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных]]></title><description><![CDATA[<p dir="auto">Docker со временем накапливает значительное количество данных - образы, контейнеры, тома и кэш сборки могут разрастаться до десятков гигабайт, замедляя работу системы. В этом подробном руководстве вы узнаете, как эффективно и безопасно управлять дисковым пространством Docker.</p>
<h2>Понимание архитектуры Docker-данных</h2>
<p dir="auto">Основные компоненты, занимающие дисковое пространство</p>
<p dir="auto"><strong>Images (Образы)</strong> - представляют собой многослойные шаблоны для создания контейнеров. Они включают базовую операционную систему, приложения и зависимости. Каждый образ может занимать от сотен мегабайт до нескольких гигабайт. Docker использует систему слоев, где общие компоненты переиспользуются между образами для экономии места.​</p>
<p dir="auto"><strong>Containers (Контейнеры)</strong> - это работающие экземпляры образов. Даже остановленные контейнеры продолжают занимать место, сохраняя изменения файловой системы, логи и временные данные. Размер контейнера может варьироваться от мегабайт до гигабайт в зависимости от активности приложения.​</p>
<p dir="auto"><strong>Volumes (Тома)</strong> - обеспечивают постоянное хранение данных. Они сохраняются даже после удаления контейнера и могут содержать критически важную информацию приложений. Тома могут разрастаться от мегабайт до терабайт.​</p>
<p dir="auto"><strong>Networks (Сети)</strong> - создают конфигурации сетевых подключений между контейнерами. Хотя они занимают минимальное дисковое пространство, создают записи в системе и могут накапливаться со временем.​</p>
<p dir="auto"><strong>Build Cache (Кэш сборки)</strong> - содержит промежуточные слои, созданные во время сборки образов. Ускоряет повторную сборку, но может занимать гигабайты дискового пространства.​</p>
<h2>Диагностика использования дискового пространства</h2>
<p dir="auto">Первым шагом всегда должна быть комплексная диагностика текущего состояния системы:​</p>
<pre><code class="language-sh"># Общий обзор использования места Docker
docker system df

# Детальная информация с разбивкой по ресурсам
docker system df -v
</code></pre>
<p dir="auto">Команда <code>docker system df</code> показывает сводную информацию по всем типам ресурсов Docker и указывает объем места, который можно освободить. Флаг -v предоставляет детализированный отчет по каждому компоненту.​</p>
<h3>Анализ логов контейнеров</h3>
<p dir="auto">Docker логи могут стать неожиданным потребителем дискового пространства. Логи по умолчанию хранятся без ограничений и могут разрастись до гигабайт:</p>
<pre><code class="language-sh"># Найти путь к логам конкретного контейнера
docker inspect --format='{{.LogPath}}' &lt;container_name&gt;

# Проверить размер всех логов
sudo du -sh /var/lib/docker/containers/*/*-json.log

# Найти самые большие лог-файлы
sudo find /var/lib/docker/containers/ -name "*-json.log" -exec du -sh {} + | sort -hr | head -10
</code></pre>
<p dir="auto">Детальный анализ компонентов</p>
<pre><code class="language-sh"># Список образов с размерами и временем создания
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"

# Контейнеры с информацией о размере
docker ps -s -a

# Информация о томах
docker volume ls
docker system df -v | grep "Local Volumes" -A 20

# Анализ кэша сборки
docker builder du
</code></pre>
<h2>Команды очистки по уровням безопасности</h2>
<p dir="auto"><strong>Уровень 1:</strong> Безопасная очистка<br />
Эти команды можно выполнять без опасений потери важных данных:</p>
<p dir="auto">Что удаляется при docker system prune:​</p>
<ul>
<li>Все остановленные контейнеры</li>
<li>Все сети, не используемые минимум одним контейнером</li>
<li>Все dangling образы</li>
<li>Весь кэш сборки</li>
</ul>
<p dir="auto"><strong>Уровень 2:</strong> Средний риск<br />
Эти команды более агрессивны, но относительно безопасны:</p>
<pre><code class="language-sh"># Удаление ВСЕХ неиспользуемых образов (не только dangling)
docker image prune -a

# Системная очистка с удалением всех неиспользуемых образов
docker system prune -a

# Принудительное выполнение без подтверждения
docker system prune -f

</code></pre>
<p dir="auto"><strong>Уровень 3:</strong> Высокий риск<br />
<img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/26a0.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--warning" style="height:23px;width:auto;vertical-align:middle" title="⚠" alt="⚠" />️ ВНИМАНИЕ: Эти команды могут привести к потере данных:</p>
<pre><code class="language-sh"># Удаление неиспользуемых томов (МОЖЕТ УДАЛИТЬ ДАННЫЕ!)
docker volume prune

# Системная очистка с удалением томов
docker system prune --volumes

# Максимально агрессивная очистка
docker system prune -a --volumes
</code></pre>
<h3>Продвинутые техники фильтрации</h3>
<h4>Фильтрация по времени</h4>
<p dir="auto">Docker поддерживает фильтрацию ресурсов по времени создания:</p>
<pre><code class="language-sh"># Удалить образы старше 24 часов
docker image prune --filter "until=24h"

# Удалить контейнеры старше недели
docker container prune --filter "until=168h"

# Системная очистка ресурсов старше 72 часов
docker system prune --filter "until=72h"

# Различные форматы времени
docker system prune --filter "until=2024-01-01T00:00:00"
docker system prune --filter "until=1h30m"

</code></pre>
<h4>Фильтрация по меткам</h4>
<p dir="auto">Использование меток для селективной очистки:</p>
<pre><code class="language-sh"># Удалить ресурсы с определенной меткой
docker system prune --filter "label=environment=testing"

# Удалить ресурсы БЕЗ определенной метки
docker system prune --filter "label!=environment=production"

# Комбинирование фильтров
docker image prune --filter "until=24h" --filter "label=temporary=true"

</code></pre>
<h3>Управление логами контейнеров</h3>
<h4>Безопасная очистка логов</h4>
<p dir="auto">Логи контейнеров могут занимать значительное пространство:</p>
<pre><code class="language-sh"># Безопасное обнуление логов без остановки контейнеров
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log

# Очистка логов конкретного контейнера
sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' &lt;container_name&gt;)

# Проверка размера логов перед очисткой
sudo du -ch /var/lib/docker/containers/*/*-json.log | grep total

</code></pre>
<h4>Автоматическое ограничение размера логов</h4>
<p dir="auto">Настройка глобальных ограничений в <code>/etc/docker/daemon.json:</code></p>
<pre><code class="language-json">{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
</code></pre>
<p dir="auto">Настройка для отдельных контейнеров</p>
<pre><code class="language-sh"># При запуске контейнера с ограничениями логов
docker run --log-opt max-size=50m --log-opt max-file=5 &lt;image_name&gt;
</code></pre>
<pre><code class="language-yml"># В docker-compose.yml
version: '3'
services:
  app:
    image: myapp
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
</code></pre>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="text-align:left">Тип ресурса</th>
<th style="text-align:left">Команда очистки</th>
<th style="text-align:left">Уровень риска</th>
<th style="text-align:left">Потенциальная экономия</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Остановленные контейнеры</td>
<td style="text-align:left"><code>docker container prune</code></td>
<td style="text-align:left">Низкий</td>
<td style="text-align:left">100MB - 10GB</td>
</tr>
<tr>
<td style="text-align:left">Dangling образы</td>
<td style="text-align:left"><code>docker image prune</code></td>
<td style="text-align:left">Низкий</td>
<td style="text-align:left">500MB - 50GB</td>
</tr>
<tr>
<td style="text-align:left">Все неиспользуемые образы</td>
<td style="text-align:left"><code>docker image prune -a</code></td>
<td style="text-align:left">Средний</td>
<td style="text-align:left">1GB - 100GB</td>
</tr>
<tr>
<td style="text-align:left">Неиспользуемые тома</td>
<td style="text-align:left"><code>docker volume prune</code></td>
<td style="text-align:left"><strong>Высокий</strong></td>
<td style="text-align:left">100MB - 1TB</td>
</tr>
<tr>
<td style="text-align:left">Кэш сборки</td>
<td style="text-align:left"><code>docker builder prune</code></td>
<td style="text-align:left">Низкий</td>
<td style="text-align:left">500MB - 20GB</td>
</tr>
<tr>
<td style="text-align:left">Сети</td>
<td style="text-align:left"><code>docker network prune</code></td>
<td style="text-align:left">Низкий</td>
<td style="text-align:left">&lt;1MB</td>
</tr>
</tbody>
</table>
]]></description><link>https://forum.exlends.ru/topic/272/ischerpyvayushij-gajd-ochistka-diskovogo-prostranstva-ot-nenuzhnyh-docker-dannyh</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 08:18:25 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/272.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Oct 2025 16:26:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных on Mon, 13 Oct 2025 18:08:38 GMT]]></title><description><![CDATA[<p dir="auto">такое писать опасно, а то не возьмут в бигтех)</p>
]]></description><link>https://forum.exlends.ru/post/865</link><guid isPermaLink="true">https://forum.exlends.ru/post/865</guid><dc:creator><![CDATA[Aladdin]]></dc:creator><pubDate>Mon, 13 Oct 2025 18:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных on Mon, 13 Oct 2025 17:47:37 GMT]]></title><description><![CDATA[<p dir="auto">@Jspi благодарю, полезная информация!<br />
Но признаться честно, я очень редко пользуюсь докером <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f600.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--grinning" style="height:23px;width:auto;vertical-align:middle" title=":grinning:" alt="😀" /></p>
]]></description><link>https://forum.exlends.ru/post/864</link><guid isPermaLink="true">https://forum.exlends.ru/post/864</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Mon, 13 Oct 2025 17:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных on Mon, 13 Oct 2025 16:28:03 GMT]]></title><description><![CDATA[<h2>Безопасность и лучшие практики</h2>
<h3>Чек-лист перед очисткой</h3>
<ol>
<li><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Создать резервные копии</strong> критически важных данных из томов</li>
<li><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Проверить активные контейнеры</strong> - <code>docker ps</code></li>
<li><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Убедиться в отсутствии важных образов</strong> без тегов</li>
<li><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Проверить зависимости</strong> между образами</li>
<li><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Уведомить команду</strong> о плановой очистке в production</li>
</ol>
<h3>Безопасный порядок очистки</h3>
<pre><code class="language-bash">#!/bin/bash
# safe-cleanup-procedure.sh

echo "🔍 Фаза 1: Анализ текущего состояния"
docker system df
docker ps -a
docker images

echo -e "\n⏸️ Фаза 2: Остановка неиспользуемых контейнеров"
read -p "Остановить все контейнеры? (y/N): " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
    docker stop $(docker ps -q)
fi

echo -e "\n🧹 Фаза 3: Базовая очистка"
read -p "Выполнить базовую очистку? (y/N): " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
    docker container prune -f
    docker network prune -f
    docker image prune -f
fi

echo -e "\n🔥 Фаза 4: Агрессивная очистка образов"
read -p "Удалить ВСЕ неиспользуемые образы? (y/N): " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
    docker image prune -a -f
fi

echo -e "\n⚠️ Фаза 5: Очистка томов (ОПАСНО!)"
read -p "Удалить неиспользуемые тома? (y/N): " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
    echo "Список томов для удаления:"
    docker volume ls --filter dangling=true
    read -p "Подтвердите удаление томов (введите 'DELETE'): " confirm
    if [ "$confirm" = "DELETE" ]; then
        docker volume prune -f
    fi
fi

echo -e "\n✅ Очистка завершена. Итоговая статистика:"
docker system df
</code></pre>
<h2>Troubleshooting и восстановление</h2>
<h3>Восстановление после ошибок очистки</h3>
<pre><code class="language-bash"># Если Docker не запускается после очистки
sudo systemctl status docker
sudo journalctl -u docker --no-pager -l

# Пересоздание Docker daemon конфигурации
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/tmp/*
sudo systemctl start docker

# Проверка целостности
docker system info
docker version
</code></pre>
<h3>Восстановление удаленных образов</h3>
<pre><code class="language-bash"># Быстрое восстановление часто используемых образов
docker pull alpine:latest
docker pull ubuntu:20.04
docker pull nginx:latest
docker pull postgres:14

# Пересборка локальных образов из Dockerfile
docker build -t myapp:latest .

# Импорт из резервной копии
docker load &lt; backup-images.tar
</code></pre>
]]></description><link>https://forum.exlends.ru/post/862</link><guid isPermaLink="true">https://forum.exlends.ru/post/862</guid><dc:creator><![CDATA[Aladdin]]></dc:creator><pubDate>Mon, 13 Oct 2025 16:28:03 GMT</pubDate></item><item><title><![CDATA[Reply to Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных on Mon, 13 Oct 2025 16:27:40 GMT]]></title><description><![CDATA[<h2>Специфические проблемы и решения</h2>
<h3>Проблемы с WSL2 и Docker Desktop</h3>
<p dir="auto">В Windows с WSL2 Docker может не освобождать место сразу после очистки:[^19]</p>
<pre><code class="language-powershell"># В PowerShell (от имени администратора)
# Остановить WSL2
wsl --shutdown

# Компактировать VHDX файл
Optimize-VHD -Path "C:\Users\%USERNAME%\AppData\Local\Docker\wsl\data\ext4.vhdx" -Mode Full

# Альтернативный способ через diskpart
# diskpart
# select vdisk file="C:\Users\%USERNAME%\AppData\Local\Docker\wsl\data\ext4.vhdx"
# attach vdisk readonly
# compact vdisk
# detach vdisk
</code></pre>
<h3>Очистка overlay2 директории</h3>
<p dir="auto">Если папка <code>/var/lib/docker/overlay2</code> занимает критично много места:[^20]</p>
<pre><code class="language-bash"># Проверка размера overlay2
sudo du -sh /var/lib/docker/overlay2

# Поиск самых больших директорий
sudo du -sh /var/lib/docker/overlay2/* | sort -hr | head -20

# Безопасная очистка только через Docker команды
docker system prune -a --volumes

# ⚠️ КРАЙНЯЯ МЕРА: полная переустановка Docker
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker
</code></pre>
<h3>Проблемы с зависшими процессами</h3>
<pre><code class="language-bash"># Поиск и завершение зависших Docker процессов
sudo pkill -f docker
sudo systemctl restart docker

# Очистка после аварийного завершения
docker system prune --volumes
docker network prune

# Проверка целостности Docker
docker system info
</code></pre>
<h2>Оптимизация образов для экономии места</h2>
<h3>Лучшие практики в Dockerfile</h3>
<pre><code class="language-dockerfile"># ❌ Плохо: множество слоев
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get install -y python3
RUN apt-get install -y python3-pip
RUN pip3 install flask
RUN rm -rf /var/lib/apt/lists/*

# ✅ Хорошо: минимальное количество слоев с очисткой
FROM ubuntu:20.04
RUN apt-get update &amp;&amp; \
    apt-get install -y python3 python3-pip &amp;&amp; \
    pip3 install flask &amp;&amp; \
    rm -rf /var/lib/apt/lists/* &amp;&amp; \
    apt-get clean
</code></pre>
<h3>Использование многоэтапной сборки</h3>
<pre><code class="language-dockerfile"># Этап сборки
FROM golang:1.19 AS builder
WORKDIR /app
COPY . .
RUN go build -o main

# Финальный образ
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
</code></pre>
<h3>Выбор оптимальных базовых образов</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="text-align:left">Базовый образ</th>
<th style="text-align:left">Размер</th>
<th style="text-align:left">Рекомендация</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>ubuntu:20.04</code></td>
<td style="text-align:left">~72MB</td>
<td style="text-align:left">Для разработки</td>
</tr>
<tr>
<td style="text-align:left"><code>alpine:latest</code></td>
<td style="text-align:left">~5MB</td>
<td style="text-align:left">Для production</td>
</tr>
<tr>
<td style="text-align:left"><code>scratch</code></td>
<td style="text-align:left">0MB</td>
<td style="text-align:left">Для статических бинарников</td>
</tr>
<tr>
<td style="text-align:left"><code>distroless</code></td>
<td style="text-align:left">~20MB</td>
<td style="text-align:left">Для безопасности</td>
</tr>
</tbody>
</table>
]]></description><link>https://forum.exlends.ru/post/861</link><guid isPermaLink="true">https://forum.exlends.ru/post/861</guid><dc:creator><![CDATA[Aladdin]]></dc:creator><pubDate>Mon, 13 Oct 2025 16:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных on Mon, 13 Oct 2025 16:27:15 GMT]]></title><description><![CDATA[<h2>Автоматизация и мониторинг</h2>
<h3>Создание скриптов автоматической очистки</h3>
<pre><code class="language-bash">#!/bin/bash
# docker-maintenance.sh - Скрипт регулярного обслуживания

LOG_FILE="/var/log/docker-cleanup.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] Начало очистки Docker" &gt;&gt; $LOG_FILE

# Получение статистики до очистки
BEFORE=$(docker system df --format "{{.Size}}" | head -1)

# Остановка неиспользуемых контейнеров старше 24 часов
docker container prune --filter "until=24h" -f

# Удаление образов старше недели
docker image prune --filter "until=168h" -f

# Очистка кэша сборки
docker builder prune -f

# Очистка сетей
docker network prune -f

# Логирование результатов
AFTER=$(docker system df --format "{{.Size}}" | head -1)
echo "[$DATE] Завершение очистки. До: $BEFORE, После: $AFTER" &gt;&gt; $LOG_FILE
</code></pre>
<h3>Настройка cron для регулярной очистки</h3>
<pre><code class="language-bash"># Редактирование crontab
crontab -e

# Ежедневная базовая очистка в 02:00
0 2 * * * /usr/local/bin/docker system prune -f &gt;/dev/null 2&gt;&amp;1

# Еженедельная агрессивная очистка по воскресеньям в 03:00
0 3 * * 0 /usr/local/bin/docker system prune -a -f &gt;/dev/null 2&gt;&amp;1

# Очистка логов каждые 6 часов
0 */6 * * * /usr/bin/truncate -s 0 /var/lib/docker/containers/*/*-json.log 2&gt;/dev/null
</code></pre>
<h3>Мониторинг дискового пространства</h3>
<pre><code class="language-bash">#!/bin/bash
# docker-space-monitor.sh - Мониторинг и алерты

THRESHOLD=85
DOCKER_ROOT="/var/lib/docker"
USAGE=$(df $DOCKER_ROOT | tail -1 | awk '{print $5}' | sed 's/%//')

if [ $USAGE -gt $THRESHOLD ]; then
    echo "⚠️ ВНИМАНИЕ: Docker использует ${USAGE}% дискового пространства!"
    echo "📊 Детальная статистика:"
    docker system df
    echo ""
    echo "🧹 Рекомендуемые действия:"
    echo "1. docker system prune -f"
    echo "2. docker image prune -a -f" 
    echo "3. Проверить логи: sudo du -sh /var/lib/docker/containers/*/*-json.log"
    
    # Отправка уведомления (настроить под вашу систему)
    # curl -X POST -H 'Content-type: application/json' \
    #   --data '{"text":"Docker disk usage: '${USAGE}'%"}' \
    #   YOUR_WEBHOOK_URL
fi
</code></pre>
]]></description><link>https://forum.exlends.ru/post/860</link><guid isPermaLink="true">https://forum.exlends.ru/post/860</guid><dc:creator><![CDATA[Aladdin]]></dc:creator><pubDate>Mon, 13 Oct 2025 16:27:15 GMT</pubDate></item></channel></rss>