From several years ago, Docker has given us the very strong ecosystem that makes your code work on pretty much everywhere with the essential components in one minimized unit just like a physical "container".
As for Kubernetes, it gave a very congregative platform not just for the operating environment integrated with the containerized system based on what Docker created, but also with logging, monitoring and so on.
Moreover, the concept of DevOps and SRE have become very important to understand how to operate your system in the modern Internet world to reflect your business demand and updates continuously.
But here's a question. Do you really need Docker and its ecosystem, or Kubernetes in your system environment?
Yes, I am asking you, not anybody else. When you decide what technology to use in your system, you have to understand why it matters and how.
Here are some thoughts of mine for what you should do with containers and what you shouldn't. Please give me your opinions in the comment section if you have :)
First of all, Docker is a great platform in many ways. But it triggers a lot of pains especially with Networking, Monitoring and Logging.
It is simply because Docker was created in order to deal with the App execution environment as mentioned above as dotCloud was a PaaS like Heroku.
It is very easy to handle a single container as one service but you don't really use it as a whole platform. You will need a Web server(or more than that), a Database server, an Application server, and maybe Memcached/RabbitMQ etc...
Combining those with Docker itself is not that hard, but you can't do clustering, self-healing, replicating because they are not natively provided Docker which is required on system platform in most cases.
So, I mentioned that Docker is too less for a production platform in the previous section. Kubernetes and Docker Swarm solves a lot of those problems.
They both have, in common, clustering, scaling and networking. Kubernetes has more features and it looks good. Yes it does. But it's actually too much for just a single web application. The more you use Kubernetes features, the more complicated it becomes. I have seen lots of people saying this "I just wanted to orchestrate container system smartly. But now I am maintaining the Kubernetes clusters, master node, and etcd everyday." It's a well architected for complicated systems and to keep it available. But do you really need the complexity? I'd say no.(though it really depends!)
There are lots of products that's on the Kubernetes such as Rancher/OpenShift but none of them would decrease the operation costs for the "features" of Kubernetes to me.(No offence. They are very good tools as well!)
OK, tell me I'm wrong. I haven't used Swarm much, honestly.
Anyway, meanwhile Kubernetes is too much, Docker Swarm is lighter and it looks the best to deal with smaller applications. The performance is actually much faster than Kubernetes as well!
The thing that made me stop to think is that I want to use container orchestration tools for less operations in the beginning. While Kubernetes is supported by lots of cloud benders, Docker Swarm is not. Technically they have tried but not anymore.
It is not very convenient because I, personally, don't really want to use EC2 or any physical machine to manage clusters and stuff. Only if I could make clusters Swarm easily on AWS.... that'd be legendary!
Oh and as another thing for me, I'm Japanese and lots of people want Japanese language support for Enterprise solution and Swarm doesn't have it as long as I know.
The TL;DR is super boring. Know what you are using. New things are cool but it's not perfect and you always have to try comparing what's good and what's not for you :)