The Twelve-Factor App is a methodology for building modern applications that can be scaled across a distributed system.
We consider it an invaluable synthesis of much experience with software-as-a-service apps in the wild, especially on the Heroku platform.
Deis is designed to run applications that adhere to Twelve-Factor App methodology and best practices.
Docker is an open source project to pack, ship and run any application as a lightweight, portable, self-sufficient container.
Deis curates your applications as Docker images, which are then distributed across your cluster as Docker containers.
(Deis itself is also a set of coordinated Docker containers.)
CoreOS is a new, minimal Linux distribution, rearchitected for running modern, containerized infrastructure stacks.
Deis runs on CoreOS machines that can be hosted anywhere – public cloud, private cloud, bare metal or even your workstation.
CoreOS allows Deis to host applications and services at scale with high resilience, in a way that is simple to operate.
Developers use applications to push code, change configuration, scale processes, view logs, run admin commands and much more.
The Builder processes incoming
git push requests and builds applications
inside ephemeral Docker containers, resulting in a new Docker image.
During the release stage, a Build is combined with Config to create a new numbered Release. This release is then pushed to a Docker registry for later execution. The release stage is triggered any time a new build is created or config is changed, making it easy to rollback code and configuration changes.
The run stage dispatches containers to a scheduler and updates the router accordingly. The scheduler is in control of placing containers on hosts and balancing them evenly across the cluster. Containers are published to the router once they are healthy. Old containers are only collected after the new containers are live and serving traffic – providing zero-downtime deploys.
Deis treats databases, caches, storage, messaging systems, and other backing services as attached resources, in keeping with Twelve-Factor best practices.
Applications are attached to backing services using environment variables. Because applications are decoupled from backing services, apps are free to scale up independently, to swap services provided by other apps, or to switch to external or third-party vendor services.