Declarative containers
Declarative containers could be considered as a technology in between a normal container and a container running on FaaS. Let's look at the following imaginary Dockerfile:
FROM openjdk:8 COPY app.jar /app/app.jar CMD ["/opt/jdk/bin/java", "-Xmx2G", "-jar", "/app/app.jar"]
What do we see here? At the first time of reading, it would look like a normal Dockerfile. Yes, it is. But it's not a declarative way to define an application container. Why?
We already know that this is a Java application doing some work for us. But it has hardcoded some important and brittle configurations, for example, when openjdk:8
pinned the app to use only that implementation, while -Xmx2G
limits the memory usage of the app.
All FaaS platforms these days use containers in the same way. They tie some specific configurations into function containers but actually people need a very neutral and portable way of deploying functions.
So what does a declarative container look like?
It looks something like...