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:

ContainerImageCommandRouted
web.1my-app:latestpuma -C config/puma.rbvia nginx → 443
worker.1, worker.2my-app:latestsidekiq
inventory_updates.1my-app:latestsidekiq -q inventory_updates -c 4
order_processing.1, .2, .3my-app:latestsidekiq -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