I always root for the local guys, and so I was excited to see CenturyLink Labs launch Panamax this week from its headquarters here in Portland. Panamax is yet another Docker management tool, standing along tools like Kubernetes (from Google) and Mesos and open source tools like Shipyard and Docker-UI. Unlike many of the other tools, Panamax appears to work well (though there are bugs), and has a well thought out and beautiful UI component to boot.
Panamax is intimately tied to Docker, unlike tools like Mesos, which are generic container managers. It abstracts the complexity that a user has historically had to manage when building a sophisticated app using multiple containers across a distributed cluster. CoreOS, a new OS that runs Docker systems, is built into Panamax. Along with CoreOS, Panamax leverages Fleet, a scheduling and orchestration system.
The Panamax technology represents a new way of thinking about app development, pushing the concept of microservices that has become such a hot topic. CEO Lucas Carlson explained to us that easily pulling together loosely coupled pieces of an app can make the process of app development less complex. The problem stems from installing new technologoes into the overall app development process. To remove the different pieces is just as complex. Containers serve as a way to connect different services that reconstitute in the app itself without the hassle and time it takes to build and deconstruct as needed.
In this respect, Paanamax is not a PaaS. Instead, it is more of an installer for building cloud services. Containers are the mechanism for the new process.
Historically, building applications that leveraged a network of clustered containers would require a variety of new technologies, each with it’s own learning curve. As CEO Lucas Carlson writes, these could include fig, etcd, systemd, fleet, kubernetes, mesos, ambassadors, discoverd, consul, consulate, serf, registrator, skydns, libswarm and an ever growing list of other services.
This is a tool which shows incredible promise, especially for new users to Docker because it almost provides the simplicity of a PaaS on your local machine. While it has a lot of potential, some bugs will frustrate new Docker users. But in all, I believe the CenturyLink team has built something valuable for users that will only mature over time.
A Beautiful UI for Docker and a Standard for Container Communication
If you have used Docker from the command line, you will instantly recognize the steps Panamax guides you through as you create applications (multiprocess containers). And, I believe Panamax will be intuitive for users new to Docker and containerization in general. As a start, Panamax allows you to quickly search the Docker repository and the Panamax template repository.
If you find an application (Rails, for example), you can then start both processes with a single click, and view the log files for each container from within the Panamax UI by clicking on the “Run template” button. You’ll notice that Panamax indicates the template contains two images: the Rails application image and the Postgresql container to which Rails connects.
Panamax templates are stored as GitHub repositories in what CenturyLink calls an open-source app libary. These templates (multiprocess container specification files) are used to build and provision applications (defined as interconnected services). For example, WordPress is an application which requires the PHP front end (web tier) and a MySQL database behind it. Panamax Templates specify both of these processes and how the containers should be configured when running so that the two processes can talk to each other. For example, with WordPress, the Panamax template specifies exactly how the web tier talks to the database: on which ports WordPress expects the database and which credentials to use when connecting to the database. If you change a running template, you can save it as another template for creating your own.
A Separate Docker Install
Panamax installs a new Docker host for you. This means you will be managing two sets of Docker images on your development system. You can still use your normal command line tools from within the Panamax system with commands like this:
$ panamax ssh
<b>core@panamax-vm</b><span class="s1"><b> ~ $</b></span> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f0f3de719edc centurylink/panamax-ui:latest /bin/sh -c 'bundle e 6 minutes ago Up 6 minutes 0.0.0.0:3000->3000/tcp PMX_UI
561e00e46d64 google/cadvisor:0.1.0 /usr/bin/cadvisor 6 minutes ago Up 6 minutes 0.0.0.0:49153->8080/tcp PMX_CADVISOR,PMX_UI/CADVISOR
29cccb9f8851 centurylink/panamax-api:latest /bin/sh -c 'bundle e 6 minutes ago Up 6 minutes 0.0.0.0:3001->3000/tcp PMX_API,PMX_UI/PMX_API
I was able to determine the proper host switch internally when running on CoreOS (“docker -H unix:///var/run/docker.sock ps”) but sadly this is not available outside of the host which means you are not currently able to run the same commands externally from a local terminal. For example, you must be inside the CoreOS host to use command line tools for this second Docker instance. If you have a workflow built on top of Docker command line tools, you’ll be unable to migrate those easily to your Panamax managed images.
Underlying Issues with Docker Still Impact Panamax
One issue I’ve seen with Docker is that it can get confused when a command like “pull” (to retrieve a base image from the central repository), which can take a long time, is run multiple times before the first command has completed. Docker gets confused, reports an error and can get stuck completing the command. Sometimes this can even require a Docker host restart; in my case “boot2docker restart” does the trick, but then requires me to restart all running containers as well. This is an acknowledged issue but it is something the Panamax system does not resolve for you, and adds another layer of complexity on top of an already complex system.
I expect that a large majority of the stress of using Panamax right now will come from interactions with the base Docker system underneath. The pace of change in Docker right now is very fast (though perhaps the recent shipping of Docker 1.0 will finally mitigate these issues). Will Panamax react to broken parts of Docker by building components into Panamax to fix or hide these issues (thereby cluttering panamax itself)? Or, will parts of Panamax appear broken because of bugs actually inside of Docker?
Job State ‘loaded’ Could Not Be Achieved
The first application I created was the sample Rails application. This template includes two services, a Rails app and a Postgres database. Panamax automatically links the two applications. This is actually a thorny task, as I described in another post. Panamax makes the process seamless, allowing you to link containers. Though it did not work as advertised, when the Panamax team works out the bugs, I expect many people will gravitate to Panamax because the method proposed is an easy way to link processes without burdening you with jargon and complicated steps. I suspect that application frameworks (like Rails apps) will provide instructions on how to enable your apps to run inside Panamax for the same reasons.
After waiting on the Rails application I noticed that the Rails component never got past the spinner (“loading”?) stage. The database container seemed to start fairly well, but Rails never got past the “pulling container” stage. I attempted to delete the application, and then restart it, but was never able to get a Rails application started. I then tried to start a WordPress application, and this appeared to start properly, but when I tried to inspect them, Panamax had died completely and I was unable to see anything on localhost:8888. A quick “panamax up” from the command line restarted the host completely, but I was never able to understand why the entire system crashed. Happily, rebooting Panamax rebooted the set of containers I had been running before.
Kudos to the Panamax team for shipping, especially something as functional and beautiful as Panamax is right now. But, I would love for them to add links from application errors either to places to research and troubleshoot. The true power of a web based UI tool is that an error could be a launching place for exploration and troubleshooting in a way that command line tools rarely are. If this error message had a link or subtext which suggested where to search for more information it would have really helped. There is an opportunity for CenturyLink to control this conversation if they wanted people to jump into the GitHub issues or a public Panamax forum as well.
While it is nice that there is a Rails Panamax template available, I was unsure how to mount my own applications inside the container. The Panamax Rails template did not specify how to do this, and I was unsure whether Panamax has guidelines on the proper way it should be done. There does not appear to be a general consensus on this issue and may lead to confusion and more than one way to do it within the Docker and Panamax communities. Beyond saying “be flexible” it would be great to see Panamax step up and say: “when mounting your application inside Panamax, put them in volumes named XYX and use environment variables like ABC.” Ruby on Rails made waves by being opinionated about convention over configuration, and I think the Docker community needs to be courageous and start saying “this is how to do it!”
Local port routing isn’t automatic
Panamax does not automatically map ports from the CoreOS host system to your localhost setup. This means that you cannot access applications running inside Docker without some extra manual configuration. I imagine this is at the top of the todo list for the Panamax team. It is a simple process to configure port routing, however, and worked like a charm according to the documentation provided by CenturyLink. For example, after rebooting Panamax, it automatically restarted the WordPress application. I then reviewed the ports bindings for the web tier.
Then, I simply ran the VBoxManage command to map the ports locally like this:
$ VboxManage controlvm panamax-vm natpf1 rule1,tcp,,8997,,8080
And, with that, I could see WordPress running within Docker via Panamax as an isolated container backed by its own database on http://localhost:8997.
This is awesome and powerful and you can’t get much simpler than that for installation of WordPress.
Solving the Deployment Issue
Panamax allows you to quickly start and manage multi process container. However, it does not have opinionated advice or processes around migrating these images onto production docker hosts. As this tool comes from CenturyLink and they offer such a hosting environment, I imagine there will be ways to do this coming soon.
Panamax, a Strong Docker UI
Though there are bugs, Panamax is highly usable and a joy to play with. Docker has previously been accessible to only a very technical crowd but Panamax brings Docker to a new class of users by permitting exploration of Docker images and containers. Just as imporant, Panamax makes it fun for the user. By abstracting the complexity, CenturyLink has opened a new world of possibilities for Docker users. Give it a try yourself.
Feature image via Flickr Creative Commons.