Docker、WindowsとLinuxに両対応する「マルチアーキテクチャイメージ」の仕組みを開発中、デモも披露
マイクロソフトが開発中のWindows Server 2016にはDockerの機能が組み込まれ、Windows上でコンテナ型仮想化を実現する予定です。
しかしWindowsとLinuxのあいだにアプリケーションの互換性がないのと同様に、Windows用のDockerイメージとLinux用のDockerイメージにも互換性はありません。
例えば、Docker HubにNoSQLデータベースであるRedisのDockerイメージがあるとして、それがLinux用にビルドされたDockerイメージの場合には、Windows ServerのDockerでそれを実行することはできません。
これまでDockerが対応しているOSはLinuxしかなかったため、DockerイメージがどのOSに対応しているのかを気にする必要はありませんでした。しかしWindows Server版Dockerが登場することで、その状況が変わろうとしているのです。
Multi-architecture images(マルチアーキテクチャイメージ)
この新しい状況で発生する不便さを解決するために開発が進んでいるのが「Multi-architecture images」(マルチアーキテクチャイメージ)です。
Multi-architecture imagesは、Windows用とLinux用のそれぞれのイメージファイルを用意しておき、利用されるイメージはターゲットOSによって自動的に切り替わる、という仕組み。ARMなどプロセッサの違いにも対応します。
昨年11月にバルセロナで行われたイベント「DockerCon Europe 2015」のセッションで、マイクロソフトとDocker社が協同で行ったセッション「Windows Server Containers - How we got here and architecture deep dive」において、Docker社のシニアエンジニアリングマネジャーのArnaud Porterie氏がその取り組みについて説明しています。
Arnaud氏の説明によると、例えばRedisという単一の名前で新しくマニフェストファイルが用意されます。
そのマニフェストファイルはRedis for WindowsとRedis for LinuxなどのDockerイメージへの参照を備えており、Dockerエンジンによって実行されるものが決定されるとのこと。
これの優れた点は、WindowsでもLinuxでもOSの違いを気にすることなく同一の設定で同じアプリケーションが実行される、という点です。
LinuxとWindows Serverを同一のクラスタに設定してデモ
Arnaud氏は実際にこの仕組みが動いている様子をデモで紹介しました。
まず、Azure内のWindows版DockerとDigitalOcean内のLinux版Dockerが、1つのSwarmクラスタとして設定されています。
Swarmマスターから、クラスタ内のLinux OSだけを対象にしてredisを起動するように命令すると、RedisがLinuxのホストで立ち上がります。
この命令のLinux OSの指定の部分を「Windows」に書き換えて実行してみると対象OSが切り替わり、今度はWindows ServerでRedisが起動しました。Windows ServerのコマンドラインでDocker psを実行すると、1秒以内にredisが起動しているのが分かります。
下記が公開されているセッション「Windows Server Containers - How we got here and architecture deep dive」の動画です。Multi-architecture imagesの説明は26分頃から。デモは35分頃からです。
あわせて読みたい
DevOpsを採用している国内企業=7%、知らない=39%、予定はない=33%。IDC Japan
≪前の記事
開発現場を「自動化」する仕事は儲かるのか? 自動化を仕事にするには~自動化の現場の真実(後編)。システムテスト自動化カンファレンス 2015