If you'd like to use an alternative implementation of Java, Python, Node.js, or Go, or write code in any other language, custom runtimes are for you. Custom runtimes allow you to define new runtime environments, which might include additional components like language interpreters or application servers.
To create a custom runtime, you supply a Dockerfile with a base image of your choice, and add other docker commands as needed to build the desired runtime environment. Remember that you are responsible to ensure that the components you've included in your Dockerfile are compatible and are configured to deliver the desired performance.
When you use a custom runtime, you must write the application code to handle certain flexible environment life-cycle and health checking requests. Read about Building a Custom Runtime before you start developing.
Applications using custom runtimes can take advantage of many Cloud Platform services using the public REST APIs, or client libraries, when they are available.
The following table compares the two kinds of runtimes.
|Feature||Flexible runtime||Custom runtime|
|Dockerfile||Default file supplied automatically by the SDK||Hand-written by the developer|
|Dockerfile modifications permitted||Yes||Yes|
|Languages||Python, Java, Node.js, and Go||Any software that can service HTTP requests|
|Start/Stop request||Requests are handled automatically by default. Optionally, you can write your own handlers.||Your app will receive these requests but does not need to respond to them. Optionally, you can write your own handlers.|
|Health checking||Requests are handled automatically by default. Optionally, you can write your own handlers.||You must write your own handlers or disable health checks.|
|App Engine standard environment APIs||Some API support is available by default. Read the Python, Java, or Go page for each runtime.||You must use the publicly available REST APIs for cloud services or Google API Client Libraries.|