Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Системное Администрирование
  4. Docker
  5. Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных

Исчерпывающий гайд: Очистка дискового пространства от ненужных Docker данных

Запланировано Прикреплена Закрыта Перенесена Docker
6 Сообщения 2 Постеры 152 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • AladdinA Не в сети
    AladdinA Не в сети
    Aladdin
    js
    написал в отредактировано
    #1

    Docker со временем накапливает значительное количество данных - образы, контейнеры, тома и кэш сборки могут разрастаться до десятков гигабайт, замедляя работу системы. В этом подробном руководстве вы узнаете, как эффективно и безопасно управлять дисковым пространством Docker.

    Понимание архитектуры Docker-данных

    Основные компоненты, занимающие дисковое пространство

    Images (Образы) - представляют собой многослойные шаблоны для создания контейнеров. Они включают базовую операционную систему, приложения и зависимости. Каждый образ может занимать от сотен мегабайт до нескольких гигабайт. Docker использует систему слоев, где общие компоненты переиспользуются между образами для экономии места.​

    Containers (Контейнеры) - это работающие экземпляры образов. Даже остановленные контейнеры продолжают занимать место, сохраняя изменения файловой системы, логи и временные данные. Размер контейнера может варьироваться от мегабайт до гигабайт в зависимости от активности приложения.​

    Volumes (Тома) - обеспечивают постоянное хранение данных. Они сохраняются даже после удаления контейнера и могут содержать критически важную информацию приложений. Тома могут разрастаться от мегабайт до терабайт.​

    Networks (Сети) - создают конфигурации сетевых подключений между контейнерами. Хотя они занимают минимальное дисковое пространство, создают записи в системе и могут накапливаться со временем.​

    Build Cache (Кэш сборки) - содержит промежуточные слои, созданные во время сборки образов. Ускоряет повторную сборку, но может занимать гигабайты дискового пространства.​

    Диагностика использования дискового пространства

    Первым шагом всегда должна быть комплексная диагностика текущего состояния системы:​

    # Общий обзор использования места Docker
    docker system df
    
    # Детальная информация с разбивкой по ресурсам
    docker system df -v
    

    Команда docker system df показывает сводную информацию по всем типам ресурсов Docker и указывает объем места, который можно освободить. Флаг -v предоставляет детализированный отчет по каждому компоненту.​

    Анализ логов контейнеров

    Docker логи могут стать неожиданным потребителем дискового пространства. Логи по умолчанию хранятся без ограничений и могут разрастись до гигабайт:

    # Найти путь к логам конкретного контейнера
    docker inspect --format='{{.LogPath}}' <container_name>
    
    # Проверить размер всех логов
    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
    

    Детальный анализ компонентов

    # Список образов с размерами и временем создания
    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
    

    Команды очистки по уровням безопасности

    Уровень 1: Безопасная очистка
    Эти команды можно выполнять без опасений потери важных данных:

    Что удаляется при docker system prune:​

    • Все остановленные контейнеры
    • Все сети, не используемые минимум одним контейнером
    • Все dangling образы
    • Весь кэш сборки

    Уровень 2: Средний риск
    Эти команды более агрессивны, но относительно безопасны:

    # Удаление ВСЕХ неиспользуемых образов (не только dangling)
    docker image prune -a
    
    # Системная очистка с удалением всех неиспользуемых образов
    docker system prune -a
    
    # Принудительное выполнение без подтверждения
    docker system prune -f
    
    

    Уровень 3: Высокий риск
    ⚠️ ВНИМАНИЕ: Эти команды могут привести к потере данных:

    # Удаление неиспользуемых томов (МОЖЕТ УДАЛИТЬ ДАННЫЕ!)
    docker volume prune
    
    # Системная очистка с удалением томов
    docker system prune --volumes
    
    # Максимально агрессивная очистка
    docker system prune -a --volumes
    

    Продвинутые техники фильтрации

    Фильтрация по времени

    Docker поддерживает фильтрацию ресурсов по времени создания:

    # Удалить образы старше 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"
    
    

    Фильтрация по меткам

    Использование меток для селективной очистки:

    # Удалить ресурсы с определенной меткой
    docker system prune --filter "label=environment=testing"
    
    # Удалить ресурсы БЕЗ определенной метки
    docker system prune --filter "label!=environment=production"
    
    # Комбинирование фильтров
    docker image prune --filter "until=24h" --filter "label=temporary=true"
    
    

    Управление логами контейнеров

    Безопасная очистка логов

    Логи контейнеров могут занимать значительное пространство:

    # Безопасное обнуление логов без остановки контейнеров
    sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
    
    # Очистка логов конкретного контейнера
    sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name>)
    
    # Проверка размера логов перед очисткой
    sudo du -ch /var/lib/docker/containers/*/*-json.log | grep total
    
    

    Автоматическое ограничение размера логов

    Настройка глобальных ограничений в /etc/docker/daemon.json:

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }
    

    Настройка для отдельных контейнеров

    # При запуске контейнера с ограничениями логов
    docker run --log-opt max-size=50m --log-opt max-file=5 <image_name>
    
    # В docker-compose.yml
    version: '3'
    services:
      app:
        image: myapp
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
    
    Тип ресурса Команда очистки Уровень риска Потенциальная экономия
    Остановленные контейнеры docker container prune Низкий 100MB - 10GB
    Dangling образы docker image prune Низкий 500MB - 50GB
    Все неиспользуемые образы docker image prune -a Средний 1GB - 100GB
    Неиспользуемые тома docker volume prune Высокий 100MB - 1TB
    Кэш сборки docker builder prune Низкий 500MB - 20GB
    Сети docker network prune Низкий <1MB
    1 ответ Последний ответ
    1
    • AladdinA Не в сети
      AladdinA Не в сети
      Aladdin
      js
      написал в отредактировано
      #2

      Автоматизация и мониторинг

      Создание скриптов автоматической очистки

      #!/bin/bash
      # docker-maintenance.sh - Скрипт регулярного обслуживания
      
      LOG_FILE="/var/log/docker-cleanup.log"
      DATE=$(date '+%Y-%m-%d %H:%M:%S')
      
      echo "[$DATE] Начало очистки Docker" >> $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" >> $LOG_FILE
      

      Настройка cron для регулярной очистки

      # Редактирование crontab
      crontab -e
      
      # Ежедневная базовая очистка в 02:00
      0 2 * * * /usr/local/bin/docker system prune -f >/dev/null 2>&1
      
      # Еженедельная агрессивная очистка по воскресеньям в 03:00
      0 3 * * 0 /usr/local/bin/docker system prune -a -f >/dev/null 2>&1
      
      # Очистка логов каждые 6 часов
      0 */6 * * * /usr/bin/truncate -s 0 /var/lib/docker/containers/*/*-json.log 2>/dev/null
      

      Мониторинг дискового пространства

      #!/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
      
      1 ответ Последний ответ
      0
      • AladdinA Не в сети
        AladdinA Не в сети
        Aladdin
        js
        написал в отредактировано
        #3

        Специфические проблемы и решения

        Проблемы с WSL2 и Docker Desktop

        В Windows с WSL2 Docker может не освобождать место сразу после очистки:[^19]

        # В 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
        

        Очистка overlay2 директории

        Если папка /var/lib/docker/overlay2 занимает критично много места:[^20]

        # Проверка размера 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
        

        Проблемы с зависшими процессами

        # Поиск и завершение зависших Docker процессов
        sudo pkill -f docker
        sudo systemctl restart docker
        
        # Очистка после аварийного завершения
        docker system prune --volumes
        docker network prune
        
        # Проверка целостности Docker
        docker system info
        

        Оптимизация образов для экономии места

        Лучшие практики в 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 && \
            apt-get install -y python3 python3-pip && \
            pip3 install flask && \
            rm -rf /var/lib/apt/lists/* && \
            apt-get clean
        

        Использование многоэтапной сборки

        # Этап сборки
        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"]
        

        Выбор оптимальных базовых образов

        Базовый образ Размер Рекомендация
        ubuntu:20.04 ~72MB Для разработки
        alpine:latest ~5MB Для production
        scratch 0MB Для статических бинарников
        distroless ~20MB Для безопасности
        1 ответ Последний ответ
        0
        • AladdinA Не в сети
          AladdinA Не в сети
          Aladdin
          js
          написал в отредактировано
          #4

          Безопасность и лучшие практики

          Чек-лист перед очисткой

          1. ✅ Создать резервные копии критически важных данных из томов
          2. ✅ Проверить активные контейнеры - docker ps
          3. ✅ Убедиться в отсутствии важных образов без тегов
          4. ✅ Проверить зависимости между образами
          5. ✅ Уведомить команду о плановой очистке в production

          Безопасный порядок очистки

          #!/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
          

          Troubleshooting и восстановление

          Восстановление после ошибок очистки

          # Если 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
          

          Восстановление удаленных образов

          # Быстрое восстановление часто используемых образов
          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 < backup-images.tar
          
          AladdinA 1 ответ Последний ответ
          0
          • kirilljsxK Не в сети
            kirilljsxK Не в сети
            kirilljsx
            js
            написал в отредактировано
            #5

            @Jspi благодарю, полезная информация!
            Но признаться честно, я очень редко пользуюсь докером 😀

            1 ответ Последний ответ
            0
            • AladdinA Aladdin

              Безопасность и лучшие практики

              Чек-лист перед очисткой

              1. ✅ Создать резервные копии критически важных данных из томов
              2. ✅ Проверить активные контейнеры - docker ps
              3. ✅ Убедиться в отсутствии важных образов без тегов
              4. ✅ Проверить зависимости между образами
              5. ✅ Уведомить команду о плановой очистке в production

              Безопасный порядок очистки

              #!/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
              

              Troubleshooting и восстановление

              Восстановление после ошибок очистки

              # Если 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
              

              Восстановление удаленных образов

              # Быстрое восстановление часто используемых образов
              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 < backup-images.tar
              
              AladdinA Не в сети
              AladdinA Не в сети
              Aladdin
              js
              написал в отредактировано
              #6

              такое писать опасно, а то не возьмут в бигтех)

              1 ответ Последний ответ
              0

              Категории

              • Главная
              • Новости
              • Фронтенд
              • Бекенд
              • Языки программирования

              Контакты

              • Сотрудничество
              • info@exlends.com
              • Наш чат
              • Наш ТГ канал

              © 2024 - 2025 ExLends, Inc. Все права защищены.

              Политика конфиденциальности
              • Войти

              • Нет учётной записи? Зарегистрироваться

              • Войдите или зарегистрируйтесь для поиска.
              • Первое сообщение
                Последнее сообщение
              0
              • Лента
              • Категории
              • Последние
              • Метки
              • Популярные
              • Пользователи
              • Группы