A quickly thrown together, opinionated draft.
Ask the question: "What do we gain by adopting this strategy? What do we lose if we uphold the status quo?"
Microsoft's has their own implementation of docker containers, which comes in essentially two flavors worth discussing in this context: Server Core and Nano Server.
Nano Server not a "full" or "complete" edition of Windows. It is optimized specifically* for .NET Core applications (cannot run full .NET framework). Many perceived benefits of running on Windows do not apply.
Despite its smaller size, Nano Server's system requirements are not very competitive and software must be designed/rewritten (by Microsoft) to run on it.
Contrast this against Alpine Linux for Node.js:
Nano Server
Alpine Linux + Node.js + Yarn + NPM
*These are Microsoft's recommendations/test results, I have not verified them
Why not Server Core?
Docker brings us lightweight abstractions so spinning up and deploying n services and breaking up monoliths isn't painful and makes running the entire infrastructure on one developer machine possible.
Server Core heads the opposite direction, bringing a full-fledged Windows operating system requiring 10GB of disk space just to start, with no features installed.
Our team has experience with C# and JavaScript
If we explore outside of our comfort zone, there are many other compelling options with 1st class support on Docker.
Second production project I've worked on where we tried and abandoned .NET Core.
Mono is a 3rd party re-implementation of the full .NET framework. It is missing some pieces (ie: some WCF, Windows Identity), but is mostly full-featured.
Past experience with Mono suggests it may have slight differences in the implementation which could lead to surprising/unpredictable issues in production (ie: GC implementation, encryption, ODBC/ADO.NET, XML Serializer).
Nonetheless, our impression is that Mono has wider and longer lasting adoption than .NET Core.
Now that Microsoft is committed to bringing .NET Core to open source, it may be time for adopters of Mono to reevaluate.
Node comes from Joyent (and OSS contributors) and has existed for 8+ years (since May 2009).
Node.js builds on the V8 JS engine developed by Google.
Node allows the use of the de facto language of the web (JS) and leverages the largest package repository (npm).
//TODO: citations
The downside is that JS' dynamic, free-form nature is also a weakness. To improve code quality we leverage strategies and additional tooling, sometimes working against the grain:
Most any general-purpose programming language can be compiled to JS, including C#. When selecting a language, we'd like some combination of these qualities...
Some of the FP friendly or prominent languages that compile to JS include:
I've omitted OCaml/BuckleScript in favor of Reason and Haskell/GHCjs in favor of PureScript.
//TODO: dive into the options available