For several months now I have been hearing all the hype on the blogs for Docker. I mostly have been ignoring the stuff, skim a post here and there but I haven’t been that interested in it. One of my coworkers has taken a big interest on the other hand and has started to work on putting out different services we run into containers.
When we started out with our new architecture we were requiring people to install different services to get their development environment up and running. At first this wasn’t that big of a deal, you need to install rabbitMQ in additional to JBoss and setting up a SQLServer database. Then we added memcached into the mix. At this point environment setup was getting pretty complex for anyone new we hired and our architect came up with a solution to make it easier. Use a virtual box image to host rabbitMQ and memcached as well as the newly added Solr and Zookeeper. This was a great solution for a while it allowed us to get people up and running much faster and add new things as we needed them (like Cassandra). Their are a couple of problems with this solution. If we roll out a new version of say Cassandra like we are doing you are going to lose all of your data. The other issue is our architect was promoted and this solution is no longer being maintained.
Enter docker! My coworker who was very interested in this technology started doing the research and work to set up all of our services inside of docker to make it easier to maintain and setup our environments than our current solution of virtual box and it has the potential to be used all the way from the development environment through the testing and staging environments into production. One of the big problem of the one big VM with all the services is you can’t just update 1 service at a time, you load it all which means your Cassandra data gets wiped out and you have to reimport that data even if Cassandra doesn’t need to be updated. When you have just one solution it means one person has to maintain the entire image, with Docker each service can be maintained by a different user. For example I am working on an upgrade to get us up to JBoss EAP 6.4 I could put the container with our customizations into Docker and everyone else could just pull down the latest without having to do most of the configuration.
We have a mixture of Linux and Windows on the client side at the office, and deploy to Linux. So since Docker is a native Linux solution we need to use boot2docker on Windows. We also have a couple of developers that use Macs they brought from home so they too would need something like the boot2docker approach. The Linux configuration of Docker is nearly complete and almost ready for people to start moving to. The Windows solution is having an issue connecting to Cassandra inside of the Docker container. Once we get that issue ironed out I expect that we will move forward in this direction as it seems like an amazing platform. In the end though I thought Docker was a lot of hype when I saw it splashed everyone in the blogs after beginning to use it I see why people are excited. It does have a bit of a learning curve but I look forward to messing around with it some more.