Process types
A process type is a named command in your Procfile. Dokku runs each type as one or more containers from the same built image, with the type name passed as the command. The most common types are web (HTTP-serving) and worker (background jobs), but you can declare as many as you want.
How types become containers
For each line in your Procfile, dokku creates a container per scaled instance, all running off the same image. The web type is special: $PORT is bound and nginx routes traffic to it.
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq
release: bundle exec rails db:migrate
inventory_updates: bundle exec sidekiq -q inventory_updates -c 4
order_processing: bundle exec sidekiq -q order_processing -c 8
This Procfile would, after scaling, produce something like:
| Container | Image | Command | Routed |
|---|---|---|---|
| web.1 | my-app:latest | puma -C config/puma.rb | via nginx → 443 |
| worker.1, worker.2 | my-app:latest | sidekiq | — |
| inventory_updates.1 | my-app:latest | sidekiq -q inventory_updates -c 4 | — |
| order_processing.1, .2, .3 | my-app:latest | sidekiq -q order_processing -c 8 | — |
The release type is not a container
Despite living in the Procfile, release is a one-shot task run during deployment, not a long-running container. Dokku spins up a release container, runs the command, captures exit status, then discards the container.
Default scale
By default dokku starts one web container and zero of every other type. You explicitly scale workers with ps:scale.
$ ssh dokku@<stack-ip> ps:report <app>
Status web 1: running
Status worker 1: running
Status worker 2: running
Status order_processing 1: running
Inspecting
$ ssh dokku@<stack-ip> ps:report <app>
$ ownstack remote logs --app=<app> --ps=worker --tail 100
Read next
- Scaling — change instance counts.
- Healthchecks — how dokku decides a deploy is good.
- Procfile