How does it differ from portainer?
Dokku supports a number of methods to deploy apps:
- Docker images [1]: via `git:from-image`
- Tarballs [2] (extracting into a heroku-like env): via `git:from-archive`
- Dockerfile [3]: autodetected using our builder-dockerfile plugin (or selectable via builder:set)
- Heroku Buildpacks [4]: autodetected using our builder-herokuish plugin (or selectable via builder:set)
- Cloud Native Buildpacks [5]: autodetected using our builder-nix plugin (or selectable via builder:set)
Someone in the community hated these options and wrote one for nix[6]. Others are free to do so as well (or even customize our built-in ones through settings or forks).Finally, I've also got two builders in the works:
- lambda: builds a lambda-compatible docker image (and an optional zipball of the code in case you want to deploy that on their official runtimes)
- compose: builds using docker-compose (for usage with a compose scheduler)
Dokku has been built with extensibility in mind, so if it doesn't do what you think it should do out of the box, overriding that functionality is fairly straightforward (plugins can be in any language, so feel free to drop golang/shell and use something else if that floats your boat). - [1] Build from a docker image: https://dokku.com/docs/deployment/methods/git/#initializing-an-app-repository-from-a-docker-image
- [2] Build from a tarball or zipball: https://dokku.com/docs/deployment/methods/git/#initializing-an-app-repository-from-an-archive-file
- [3] Dockerfile support: https://dokku.com/docs/deployment/builders/dockerfiles/
- [4] Heroku buildpack support: https://dokku.com/docs/deployment/builders/herokuish-buildpacks/
- [5] Cloud Native Buildpacks support: https://dokku.com/docs/deployment/builders/cloud-native-buildpacks/
- [6] Build via nix-build: https://github.com/jameysharp/dokku-builder-nix- configuration management as env vars
- reverse proxy routing traffic for a given hostname to the correct container, swapping to the new container upon deploy
- plugin for tls cert generation using letsencrypt
- zero downtime deploys - it starts and smoke tests a new container before taking down the old one on deploy
- plugins for running databases and connecting your apps to them