More control over the infrastructure

In the flexible environment, each service is packaged as a Docker image. App Engine runs services as containers based on these images, each running in a dedicated Compute Engine VM. This provides developers with three levels of infrastructure to manage applications—the application layer, the container layer, and the underlying virtual machine.

At the application layer, services can be managed through the traditional App Engine API, similar to the standard environment. This layer provides simple methods for managing scaling, stopping and starting services, and managing traffic allocation. For applications running in the standard environment, this is largely where control ends.

Below the application layer, developers have access to control flexible environment services at the container layer. Because Docker containers package an entire runtime environment, this level of control grants developers the freedom to define how that environment behaves. This is traditionally achieved through the use of custom runtimes, where developers define the runtime in a Dockerfile. Custom runtimes make it possible to package applications with system tools and libraries.

Because each service in the flexible environment runs on top of a Compute Engine VM, and each of these VMs are resources in the same project, developers are able to directly access these VMs as needed. Though not usually necessary, Google provides means for SSH access into these VMs. A common use case for this is to execute commands on running containers for diagnostic purposes. Additionally, the use of Compute Engine VMs makes it possible to leverage other Google Cloud services and integrations, such as VPN peering and filesystem access.