Designing Docker-based Solutions :: Best Practices

I’m looking for any kind of information about “best practices” for Docker-izing software solutions. I understand how Docker works fundamentally, but when scaling out applications, and the supporting application services. Should containers be totally stateless? Are there certain types of containers (eg. databases) that should be stateful containers? How does this scale? Should someone use Docker containers, as a best practice, for relational or NOSQL databases?

Any links, blogs, YouTube videos, etc. would be valuable.

Cheers,
Trevor Sullivan
Microsoft MVP: PowerShell
https://trevorsullivan.net
https://twitter.com/pcgeek86