The service locator anti-pattern
One aspect of using a container that I must caution you against is using it directly as a service locator. What I mean by this is that your code should almost exclusively have no idea or requirement to be loaded via the DI container. You should not be using the DI container directly in your code.
Your classes should simply define dependencies and then use those dependencies. There are very, very few circumstances where anything other than your front controller or outermost layer should know about the container.
Remember the rules of Fight Club? Well, it's the same here. Your objects don't know about the container, and no one talks about the container. We pretend that you spent hours carefully hand wiring and instantiating all the objects required for your app to serve a particular request.
If you do write code that uses the container directly to retrieve services, then you have built a huge amount of coupling into your container and...