Docker itself is mostly targeted as a tool for developers: you, the developer, dockerize your application, resulting in a container-image. Sure, that container-image then has to get deployed by someone (who isn't necessarily you), but the reason it's getting deployed at all is that a developer, at some point, made a decision to use Docker as part of the development process. Everyone else has to just deal with that.
Docker Swarm, meanwhile, is infrastructure, pure and simple. Developers don't touch it; ops people do. And ops people have very different opinions on what makes for a good piece of software than developers do. "Good UX" comes second to things like "stable" and "low overhead" and "predictable failure modes" and "configurable from a central source of truth."
Startups begin as small companies and small companies have a single team that decide how to develop and deploy. Usually developers deploy and take care of production too. What's convenient for development often trumps what's convenient for production, at least for the first months or years.
It uses Consul under the hood and has so far been bulletproof. (They all have their drawbacks / idiosyncrasies).
It seems from the mailing list that at least Nomad will have that at some point, but I have not seen much talk about it from Kubernetes or Docker Swarm.
GCEPersistentDisk AWSElasticBlockStore AzureFile FC (Fibre Channel) NFS iSCSI RBD (Ceph Block Device) CephFS Cinder (OpenStack block storage) Glusterfs VsphereVolume HostPath (single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)
The best I've been able to do is use AWS EFS on my container hosts so that my ECS tasks with volume mounts find the same stuff everywhere.
I wouldn't run a database off it but it's been great for simple file synchronization across containers and container restarts.
I wonder if the open questions about instance management are solved by the "Docker for AWS" beta.
We are entering the commodity phase for orchestration software.
Blogs and HN comments are full of success stories on Swarm, Kubernetes, Mesos, Nomad and ECS.
There are also a few warnings, like the routing issue in this review, but it's simply a matter of time before those get sorted.
What's really going on here is that we are all learning how to handle complexities of distributed systems in the cloud. These new foundations means we can run more sophisticated apps easier and more reliably.
The new integrated swarm is a real game-changer in that it is much simpler to use compared to other solutions. With swarm, it's simply:
docker swarm init
docker swarm join --token <blah> <blah:2377>
That being said, I found that Kubernetes offers more granularity in the level of control over the cluster. That's not something that __I__ need necessarily, though obviously YMMV.I have no doubt that docker will eventually catch up though.
kubeadm init master
kubeadm join node --token=73R2SIPM739TNZOA <master-ip>
https://github.com/kubernetes/kubernetes/pull/30360We could containerize, but we dont need that right now.
FROM openjdk:8u92-jdk-alpine
COPY file.jar file.jar
CMD java -Duser.timezone=UTC -cp file.jar com.foo
and to stay on-topic, you can run java apps in mesos without a docker wrapper :)Using a container orchestrator for deployment is pretty much better than using a CM tool in every way... and it's certainly better than trying to half-ass one with bash scripts.
If you are all of the above yourself - tings are much easier
BOSH[0] does rolling deploys, with canaries, out of the box.
At Pivotal we completely upgrade Pivotal Web Services to the latest Cloud Foundry within about a day of it releasing. PWS is our dogfooding the hard way: with a flagship platform that some of our customers have sue-you-to-dust-if-it-fails support contracts for.
Thousands of apps, tens of thousands of containers, thousands of VMS.
None of whom know that we restarted the entire infrastructure beneath them.
Disclosure: I guess that to the degree that Docker Inc realises that platforms are where the money is, my employers at Pivotal are competitors. But BOSH is still a fit for what you want.
[0] http://bosh.io/
When running on AWS you want CloudFormation controlling an AutoScaling Group for this.
As a footnote, BOSH works on AWS, OpenStack, vSphere, Azure, GCP and there are experimental CPIs for RackHD and Photon.
Or did I misunderstand that section?