For me containers are convenient for the task of specifying the repeatable build environments. It is also useful for caching those build environments and distributing the cached artefacts in a versioned way.
To be honest, if you are working with only 1 or 2 build environments, I don't actually find it particularly more convenient that setting up something without containers. Often I find it even wasteful because you usually select fairly large base images (hundreds of megs) even when you only need a few things. You can build a really streamlined image, but it's a fair amount of work.
However, if I have to coordinate many "microservices" that are talking together via TCP/IP and implemented in several different versions of several different technologies, it's a life saver. Normally I try to avoid this circumstance for reasons I wish were obvious to others. But of course we know that it is not obvious to others and so I appreciate being able to use containers ;-)