Prerequisites
- Docker (with BuildKit support)
- Bash 4+
make(optional, for build shortcuts)
Project Structure
Development Commands
Testing Locally
You can test builds locally without pushing to a remote registry:When
OUTPUT_IMAGE does not contain a registry prefix (e.g., my-app:local vs registry.io/my-app:latest), the builder uses the local Docker daemon and the image is not pushed.Debugging Tips
- Check the generated Dockerfile in the build output (
Dockerfile.runtime) - Inspect the built image:
docker run --rm my-app:local ls -la /app/ - Check environment:
docker run --rm my-app:local env
Example Apps
Working examples for all supported languages are inexamples/:
| Directory | Language |
|---|---|
nodejs-example | Node.js |
deno-example | Deno |
bun-example | Bun |
python-example | Python |
ruby-example | Ruby |
go-hello-world | Go |
rust-example | Rust |
php-hello-world | PHP |
java-hello-world | Java |
kotlin-example | Kotlin |
scala-example | Scala |
dotnet-hello-world | .NET |
elixir-example | Elixir |
dockerfile-example | Custom Dockerfile |
compose-example | Docker Compose |
Adding a New Language
To add support for a new language:- Add a detection function in
bin/detect - Add a version detection function in
bin/detect-version - Create a
lib/{language}.shwith{language}_get_images(),{language}_generate_builder(), and{language}_generate_runtime()functions - Wire the new language into
bin/build - Add an example app in
examples/ - Add tests in
test/