Docker зробив революцію в розробці, пакуванні та розгортанні застосунків завдяки використанню можливостей контейнеризації. Під час роботи з Docker з часом неминуче накопичується велика кількість образів. Ці образи можуть займати значний дисковий простір і ускладнювати управління середовищем розробки. У цьому докладному посібнику ми розглянемо різні методи ефективного видалення образів Docker, які допоможуть вам зберегти організованість системи та звільнити цінний простір для зберігання даних.
Розуміння образів Docker
Перш ніж ми зануримося в процес видалення образів Docker, давайте трохи розберемося, що це таке і як вони працюють. Образи Docker – це шаблони, доступні тільки для читання, які містять необхідні файли, бібліотеки та конфігурації для запуску програми. Вони створюються за допомогою низки шарів, кожен з яких являє собою певний набір змін або доповнень до попереднього шару. Кілька образів можуть використовувати одні й ті самі базові шари, що дає змогу оптимізувати зберігання і скоротити дублювання.
Образи Docker зберігаються на диску і займають місце, пропорційне їхньому розміру. У міру вилучення нових образів, створення контейнерів і створення власних образів кількість образів у системі може швидко зростати. Тому для підтримання чистоти та ефективності середовища Docker необхідно періодично видаляти невикористані та застарілі образи.
Визначення образів для видалення
Перший крок у видаленні образів Docker – визначити, які образи більше не потрібні. Docker надає команду docker images, щоб перерахувати всі образи, доступні на даний момент у вашій системі. При виконанні цієї команди ви побачите результат, схожий на наступний:
Кожен рядок являє собою зображення, а стовпці містять важливу інформацію:
- REPOSITORY: ім’я сховища зображень.
- TAG: тег, пов’язаний із зображенням, що вказує на його версію або варіант.
- IMAGE ID: Унікальний ідентифікатор зображення.
- CREATED (СТВОРЕНО): Тимчасова мітка, коли було створено зображення.
- SIZE: розмір образу на диску.
Щоб визначити образи, які можна безпечно видалити, враховуйте такі чинники:
- Висячі образи: Висячі образи – це немарковані образи, на які не посилається жоден контейнер. Зазвичай вони виникають унаслідок створення нових образів без їх маркування або коли новий образ створюють із тією самою міткою, що й наявний образ. Невикористовувані образи позначаються <none> у стовпцях REPOSITORY і TAG.
- Невикористовувані зображення: Невикористовувані образи – це ті, які наразі не використовуються жодним контейнером. Можливо, вони використовувалися в минулому, але більше не потрібні. Ви можете визначити невикористовувані образи, порівнявши список образів зі списком запущених і зупинених контейнерів.
- Застарілі образи: Згодом у вас може з’явитися кілька версій одного і того ж образу, позначених різними тегами. Доброю практикою є видалення застарілих версій, які більше не потрібні, залишаючи тільки останні або специфічні версії, від яких залежать ваші програми.
Щоб відфільтрувати образи за певними критеріями, можна використовувати прапор –filter у команді docker images. Наприклад, щоб перерахувати тільки висячі образи, можна виконати команду:
docker images --filter "dangling=true"
Аналогічним чином можна відфільтрувати зображення за ім’ям сховища, ім’ям тега або датою створення за допомогою відповідних виразів фільтрації.
Видалення окремих образів
Після того як ви визначили образи, які хочете видалити, ви можете використовувати команду docker rmi для їх видалення. Основний синтаксис для видалення образу виглядає наступним чином:
docker rmi [IMAGE ID or REPOSITORY:TAG]
Ви можете вказати унікальний ідентифікатор IMAGE ID або комбінацію REPOSITORY:TAG для ідентифікації зображення, яке ви хочете видалити.
Наприклад, щоб видалити зображення з ідентифікатором abc123def456, виконайте команду:
docker rmi abc123def456
Якщо ви хочете видалити зображення за його репозиторієм і тегом, скористайтеся такою командою:
docker rmi myapp:latest
Важливо зазначити, що ви не можете видалити образ, якщо він наразі використовується одним або кількома контейнерами. Якщо ви спробуєте видалити такий образ, Docker видасть повідомлення про помилку, яке вказує на те, що образ використовується. Щоб видалити образ, що використовується, спочатку потрібно зупинити і видалити пов’язані з ним контейнери.
Якщо ви хочете примусово видалити образ разом з усіма пов’язаними з ним контейнерами, ви можете використовувати прапор -f або –force в команді docker rmi. Будьте обережні під час використання цього прапора, оскільки він видалить контейнери, не давши вам можливості витончено зупинити їх.
docker rmi -f abc123def456
Видалення кількох образів
У деяких випадках ви можете захотіти видалити відразу кілька образів. Docker дозволяє вказати кілька ідентифікаторів образів або комбінацій репозиторій:тег як аргументи команди docker rmi.
Наприклад, щоб видалити три образи з ідентифікаторами abc123def456, 789012ghi345 і 567890jkl123, ви можете виконати команду:
docker rmi abc123def456 789012ghi345 567890jkl123
Якщо вам потрібно видалити велику кількість образів за певним шаблоном, ви можете використовувати інструменти командного рядка, як-от grep і awk, у поєднанні з docker rmi. Наприклад, щоб видалити всі образи, ім’я сховища яких починається з “myapp”, можна використовувати таку команду:
docker images | grep "^myapp" | awk '{print $3}' | xargs docker rmi
Ця команда передає виведення docker images у grep, який фільтрує рядки, що починаються з “myapp”. Команда awk витягує з відфільтрованого виводу третій стовпчик (ідентифікатор образу), а xargs передає ідентифікатори образів як аргументи docker rmi.
Обрізка образів
Docker надає зручний спосіб масового видалення висячих і невикористовуваних образів за допомогою команди docker image prune. Під час виконання цієї команди Docker визначає і видаляє з системи всі “висячі” образи.
docker image prune
Щоб видалити не тільки висячі зображення, а й усі невикористовувані зображення (зображення, на які не посилається жоден контейнер), ви можете використовувати прапор -a або –all:
docker image prune -a
За замовчуванням docker image prune видаляє образи, які не використовуються жодним контейнером, незалежно від їхнього віку. Однак ви можете використовувати прапор –filter, щоб вказати додаткові критерії для обрізки образів. Наприклад, щоб видалити невикористовувані образи старше 24 годин, ви можете виконати команду:
docker image prune --filter "until=24h"
Крім docker image prune, Docker також надає команду docker system prune, яка видаляє всі невикористовувані образи, контейнери, мережі та кеш збірок. Ця команда корисна, коли необхідно провести комплексне очищення середовища Docker.
docker system prune
Будьте обережні під час використання docker system prune, оскільки він видалить усі невикористовувані ресурси, включно із зупиненими контейнерами та невикористаними мережами.
Видалення образів, що використовуються контейнерами
Як уже зазначалося, ви не можете безпосередньо видалити образ, який наразі використовується одним або кількома контейнерами. Щоб видалити такий образ, необхідно спочатку зупинити і видалити залежні контейнери.
Ось покроковий процес видалення образу, використовуваного контейнерами:
Виведіть список усіх запущених контейнерів за допомогою команди docker ps:
docker ps
Зупиніть контейнери, що використовують образ, який ви хочете видалити. Зупинити контейнер можна за допомогою команди docker stop, за якою йде ідентифікатор або ім’я контейнера:
docker stop [CONTAINER ID or NAME]
Після зупинки контейнерів видаліть їх за допомогою команди docker rm:
docker rm [CONTAINER ID or NAME]
Після видалення залежних контейнерів ви можете видалити образ за допомогою команди docker rmi, як було описано раніше.
Важливо зазначити, що зупинка і видалення контейнерів призведе до втрати всіх даних, що зберігаються в цих контейнерах, якщо тільки ви не зберегли їх належним чином за допомогою томів або зв’язуючого монтування.
Висновок
Керування образами Docker дуже важливе для підтримання чистоти та ефективності середовища розробки. Регулярно видаляючи невикористовувані, застарілі образи та образи, що “бовтаються”, ви зможете вивільнити цінний дисковий простір і зберегти організованість системи Docker. У цьому докладному посібнику розглянуто різні методи видалення образів Docker, включно з видаленням окремих образів, видаленням кількох образів, обрізанням образів і обробленням образів, використовуваних контейнерами.
Не забувайте дотримуватися найкращих практик, як-от маркування образів за змістом, використання тегів конкретних версій та інтеграція обрізки образів у конвеєри CI/CD. Крім того, розгляньте можливість використання інструментів автоматичного очищення, щоб спростити процес управління образами Docker.
Застосовуючи ці методи та найкращі практики, ви зможете ефективно керувати образами Docker, оптимізувати використання сховища та забезпечити чисте й ефективне середовище Docker для ваших потреб розробки та розгортання.