Buildpacks vs. Dockerfiles
During the last 3 years I've had the pleasure of using Bazel's rules_docker to generate all my container images (<a href="https://github.com/bazelbuild/rules_docker" rel="nofollow">https://github.com/bazelbuild/rules_docker</a>).<p>In a nutshell, rules_docker is a set of build rules for the Bazel build system (<a href="https://bazel.build" rel="nofollow">https://bazel.build</a>). What's pretty nice about these rules is that they don't rely on a Docker daemon. They are rules that directly construct image tarballs that you can either load into your local Docker daemon or push to a registry.<p>What's nice about this approach is that image generation works on any operating system. For example, even on a Mac or Windows system that doesn't have Docker installed, you're able to build Linux containers. They are also fully reproducible, meaning that you often don't need to upload layers when pushing (either because they haven't changed, or because some colleague/CI job already pushed those layers).<p>I guess rules_docker works fine for a variety of programming languages. I've mainly used it with Go, though.