Start here. This is the direct spoken answer to practice first.
Overview
A container is useful when it proves a real dependency contract, not merely because Docker is available.
I use Testcontainers when the behavior depends on a real database, broker, cache, or other service implementation. A static container can be shared across tests in a class or stable context, and Spring Boot's @ServiceConnection can provide connection details to auto-configuration. The application runs its normal migrations against the container, then each test creates deterministic data and asserts through the real adapter.