質問: Dockerについて勉強中です。 たとえば、あるDockerイメージ"foo"がUbuntu20.04上(CPUはIntel/AMD、つまり「普通のパソコン」)で動作したとします。 このDockerイメージは別の異なる環境のDocker実行環境で動作しますか? 例: * RaspberryPi上のRaspberryPiOS * CentOS8(CPUはIntel/AMD、つまり「普通のパソコン」) * MacOS * Windows10(CPUはIntel/AMD、つまり「普通のパソコン」) OSが同じor異なる場合、CPUのアーキテクチャが同じor異なる場合、...などで動作に差異が生じるのでしょうか。もしくはDocker実行環境がこれらの違いを全部吸収するのでしょうか。 このとき、Dockerイメージ"foo"の制作者は、他の実行環境における動作について特に気を払っていないものとします。
回答: Dockerイメージのプログラムはホストのカーネル上で動くと認識しています。 ライブラリは動いても、システムコールが異なれば動かないと思います。 * CPUのアーキテクチャが違えば動かない。 ※機械語に互換がないと思います。 * CPUのアーキテクチャが同じでもカーネルが違えば動かないと思います。 ※実際に試したわけではありませんし、私もDockerについて勉強中の身です。以上は言い切っていることがありますが、全部推測です。 【追記】Win10のPCで動かしてみました。 * RaspberryPi上のRaspberryPiOS RaspberryPiOSはARMなのでCPUのアーキテクチャが異なるため動きません。 * CentOS8(CPUはIntel/AMD、つまり「普通のパソコン」) kernelがLinuxなので動くと思います。 * MacOS kernelはUnix系ですが、Linuxでないので動かないと思います。 【追記】コンテナエンジンがkernel内蔵ならMacOSのPCでも動くと思いますが、CPUアーキテクチャが異なると動きません。 ※CPUも変わるようなので、どちらにしても動かないと思います。 * Windows10(CPUはIntel/AMD、つまり「普通のパソコン」) OSがWindowsの場合は動かないと思います。 WSL上であれば動く可能性があります。WSL2ならたぶん動くでしょう。 【追記】Docker Desktopをインストールすると動くと思います。Linuxカーネルを内蔵しています。WSL2を使用する方法(※)もあります。 ※設定項目に「Use the WSL 2 based engine」があります。