Docker is <i>awesome</i> and I've totally redesigned my development workflow around it. Instead of running a monolithic dev server with dependencies for every project I start (mongodb, mysql, ruby, a giant mess of gems, node, memcached, jvm, etc etc--at a certain point these things start stepping on each others toes), I have a docker image for each dependency and configure a cluster for each project. Source version control is handled independently by simply mounting a project's root folder on each container and passing around config files. File system layering means the container branches for each project only take up as much disk space as whatever gems or node packages they don't have in common. For me, the moment I "got" docker felt like the first time I really understood the git workflow. Starting a new project is now a matter of minutes instead of hours, and the reduced friction allows for tons of experimentation that I would have avoided before. It's also fun to be able to spin up a 12 server mongo cluster on a single VM and watch how the sharding and replication works with different key schemes. I really can't say enough good things about the project, with the caveat that I've only used it for local development so far. I'm super excited to see where it goes once it hits 1.0.
Docker is awesome, but specifically NOT ready for production.<p>From Docker's website "we make a point of saying that we’re not production ready".<a href="http://blog.docker.io/2013/08/getting-to-docker-1-0/" rel="nofollow">http://blog.docker.io/2013/08/getting-to-docker-1-0/</a><p>While I love your enthusiasm, I worry that you'll mislead others into thinking that its a good idea to replicate your setup and run something important.
I've been checking out all of this new stuff recently, like <a href="http://www.packer.io" rel="nofollow">http://www.packer.io</a> and <a href="http://www.coreos.com" rel="nofollow">http://www.coreos.com</a>. It all seems cool, but I can't help but think it's too little too late.<p>I want to deploy at the application level, not the OS image level. The abstraction that I want is:<p>Servers: Something that runs applications. Could be a physical server, an instance on EC2, or a local process, etc.<p>Applications: My code. Black boxes.<p>I want to be able to boot up a new server and throw some applications on it, like a new MongoDB shard or whatever. Then tear some applications down, or tear whole servers down.<p>And I want it all to be managed by a RESTful API over HTTP so that I can write a script to automate deployment, and even automate the scaling of my service.<p>I think you can do it with just Docker, a bare Linux distro, and a few scripts.<p>Does this exist yet?
I've been playing with docker, mongodb, hipache and meteor app a month ago, and I'd like to say that it was great experience. Here is my collection of scripts of Dockerfiles which allow you to run multiple instances of Meteor app behind hipache reverse proxy. MongoDB data is persisted using docker volumes too. <a href="https://github.com/vlebedev/docker-test" rel="nofollow">https://github.com/vlebedev/docker-test</a>
Great summary - especially spinning up another container to use as the client - I was wondering how to do that : )<p>Docker is seriously another planet of cool!