JavaのWrite once, run anywhereが失敗したのは、
違うOSなのに、Javaの力だけで同一の実行環境を
作り出そうとしたところなんだよな。

Dockerのアプローチは別で、Linuxという環境のみで
Write once, run anywhereを実現したということ。
Linuxでしか動かないじゃんと思うかもしれないが、
WindowsとMacではすでにある仮想マシン技術を利用することで実現
もっともWindowsとMacは本番用途としては考慮されてないと思うが。

本当に同一環境か?という点で見ると、Linuxのカーネルの違いというものはある
だけどLinuxは元からカーネルが違ってもユーザーランド(カーネル以外)には
100%に近い互換性を持たせる方針なのでそれが問題なることはない。

だからローカルで開発で使用していたDockerイメージをそのまま
クラウドの仮想化サービス上に持っていくことができる。
その作業も単にdocker runするだけ