Ресурси Compose (контейнери, мережі, томи) належать проєкту. Назва проєкту - префікс усіх ресурсів: myapp-app-1, myapp_default, myapp_pgdata. За замовчуванням назва - ім'я каталогу з compose.yaml; явно задається полем name: у файлі, змінною COMPOSE_PROJECT_NAME чи прапорцем -p.
Рівні «скидання» - від м'якого до радикального:
docker compose restart app # перезапустити процес, контейнер той самий
docker compose up -d --force-recreate # перестворити контейнери (записуваний шар скинуто)
docker compose up -d --build # перезібрати образи й перестворити
docker compose down # видалити контейнери й мережі проєкту, ТОМИ ЛИШАЮТЬСЯ
docker compose down -v # + іменовані томи проєкту: дані бази ЗНИКНУТЬ
docker compose down --rmi local # + образи, зібрані для проєкту
Головне - розуміти, що де живе:
- записуваний шар контейнера зникає при перестворенні;
- іменовані томи (
pgdata) переживаютьdown, але неdown -v; - bind mount - це файли хоста, їх Docker не видаляє ніколи;
- анонімні томи накопичуються, якщо не видаляти їх разом з контейнерами (
down -vчиdocker compose rm -v).
Небезпечні звички:
docker system prune -a --volumes- чистить усе невикористовуване на машині: томи, образи, мережі всіх проєктів, включно з базами сусідніх проєктів, які зараз просто не запущені. Для чистки одного проєкту - командиdocker composeз його назвою;- однакова назва проєкту для двох різних каталогів (обидва
app/) - вони ділять мережі й томи, іdown -vв одному зносить дані іншого. Явнеname:уcompose.yamlзнімає проблему; down -v«за звичкою» при кожному перезапуску - щоразу порожня база й повторні міграції з сидерами.
Безпечне скидання бази розробки:
docker compose exec app php artisan migrate:fresh --seed # схема й тестові дані
# або точково видалити один том
docker compose down
docker volume rm myapp_pgdata
docker compose up -d
Перед видаленням томів із цінними даними - бекап: docker compose exec -T postgres pg_dump -U postgres app > backup.sql.
Перелік ресурсів проєкту: docker compose ps -a, docker volume ls --filter label=com.docker.compose.project=myapp.