What’s all the fuss about Docker?
Al Tobey of Datastax speaks to JAXenter about the pros of Docker.
Al Tobey is an evangelist for Apache Cassandra at Datastax and his official job title is Open Source Mechanic. His job entails making Apache Cassandra the number one online database and ensuring that Apache Spark is the top distributed computation system.
Al spoke to JAXenter about the benefits of Docker and the appeal of it’s open-source approach.
JAXenter: Can you tell us some of the reasons for developers and sysadmins to use Docker?
Al Tobey: The answer is slightly different for each role. For developers, Docker provides a way to quickly and, more importantly, consistently set up an application’s environment for developing new code and delivering it to production. From a sysadmin’s point of view, Docker provides a usable way to isolate application runtimes and resources on Linux. Everybody benefits from Docker’s ability to do differential copying of applications.
What kind of gaps does JVM leave that Docker can fill?
I think Docker and JVM can work together as a hand-in-glove, where the JVM provides excellent performance and code-level sandboxing, while Docker provides packaging of everything up to and including the JVM itself along with fine-grained resource control and another level of isolation that is complementary. Consider how Android uses the same Linux features – cgroups, namespaces, and capabilities – to isolate Java applications from each other. Docker is using the same APIs but in a way that is tuned for servers. A single server can run many containers. The container prevents applications from maliciously or, more commonly, mistakenly causing issues with other containers.
Are there any particular use cases you can think of?
Absolutely. I’m working on a number of them right now. One I’ve already demoed is setting up Cassandra development environments. Previously, developers would have to check their JVM version, verify things like JNA being installed, and a few other odds & ends that often end up causing issues for new users. When using the Docker images, all of these things are already set up and ready to go, including the JVM so there’s no “if you’re on Redhat do this…” / “if you’re on Ubuntu do this …” instructions. Everybody does ‘docker pull’ and ‘docker run’ and off they go.
I’ve also run into a number of customers who are looking to take advantage of bare metal hardware or using large instances in the cloud to get an economic advantage. For example, I might deploy my whole stack to each machine I provision in production. That single machine could be running 5-10 different components that would normally each go into their own OS instance. In a Docker setup, they would each have their own environment including a base operating system, language runtime, and any necessary assets but all on the same underlying kernel. Because each environment is isolated there’s no need to certify every component on the host OS. They run in whatever environment they were tested with.
Are there any drawbacks?
The main drawback I run into regularly is networking across hosts. Many distributed systems such as Cassandra use network topology information to make decisions about things like system health and replication. Docker doesn’t really support this behavior out of the box. There are a number of projects aiming to fill this gap, but it’s largely an open field with no clear leader yet.
Why is it that JBoss has taken such a liking to Docker?
I’m not that familiar with the JBoss ecosystem. My guess is that it provides a way to distribute a large, complex system in a consistent way. While JBoss has had good packaging for a long time, it still ends up getting tangled with the operating system in ways that make things like large upgrades difficult. Having the whole stack in a container makes it much easier to do things like deploy the latest JBoss, then push your business’s code into that and test without having to have operations set up whole environments. It sounds subtle, but it really is a big change in the way things are done in many enterprises.
How big a role do you think Docker’s open-source approach has played in its success?
In my opinion, we would not be having this discussion if it was not open source. The Docker folks organized as an open source project right away and have been doing a great job of stewarding the project. All of the components, and even entire containerization systems such as Solaris Zones, existed well before Docker. Docker is successful because it’s being built in the open by passionate users.