Dokku vs Capistrano

Dokku and Capistrano are both open source deployment tools to run web applications on Docker. They both offer a simple way of building your web applications. Here's what they have in common and where they differ.

What's Dokku

Dokku is a long standing project that sells itself as an open source PAAS alternative to Heroku. It's built with Heroku buildpacks compatibility in mind and runs the application using Docker containers. It offers lots of plugins out-of-the-box to deploy what you need on a single server. Dokku doesn't provision servers but can bootstrap itself with a single script.

What's Capistrano

Capistrano is a simple deployment tool from before Linux containers became really popular. At it's core Capistrano is a Ruby library and DSL that let's you provision servers and deploy web applications on them. It doesn't use Docker, but runs pre-defined SSH commands. Everything is basically an SSH command run as a Ruby's Rake task.

Similarities

Both tools handle most common lifecycle operations around deploying web applications on a single servers. They just achieve it differently. Both tools are often used together with a server provisioning tool.

Dokku vs Kamal

So what are the differences in terms of th overall design, features, and basic workflows?

Design

The main design differences are that Capistrano is designed for a multi-server deployment while Dokku for a single server. Kamal doesn't concern itself with single-server requirements such as SSL renewal; servers managed by Kamal are expected to be run behind a load balancers. Another difference is that Kamal will always run just one container of the application on a given server while Dokku can scale to more containers for higher concurrency.

Features

Dokku focuses on a fast and painless single-server setup so it supports SSL configuration, one-off tasks, CRON, DNS, and more. It also supports many proxies like Caddy, HAProxy, NGINX or Traefik. Capistrano on the other hand stays away from doing more than the very basics -- offering a Ruby DSL for running pre-defined SSH commands.

Dokku also supports scaling containers within one host while Capistrano doesn't, but deploys the application and its databases across an entire fleet of servers.

Workflow

Dokku can be set up on the server with a single Bash command and then managed with dokku executable. By default Dokku supports git-push style of deployments where the container is built directly on the server. That might need some additional resources.

The standard Capistrano workflow is to prepare a server by installing your application runtime, web server and configuring user roles. Once the servers are provisioned, Capistrano lets you run your predefined recipes for deploying and redeploying your application.

Which one to choose?

Capistrano is now the old-school dog of deployment, and you should choose it only if you want to have a better system of organizing your usual Bash commands. Dokku continues to be popular Docker-powered option for running single server deployments.