DockerはLinux上でしか動作しない

はじめに

ここ最近、「既存システムをコンテナ化して複製する」という内容の社内研修を受講させていただきました。
その際リリースを行う環境はwindowsでしたが、Windows上に仮想マシンでLinuxOSのサーバを立て、そこにコンテナをイメージから作成して環境構築を行いました。

研修はつつがなく修了できたのですが、

「Windows上に直接Dockerコンテナを起動すれば、仮想マシンなんていらなかったんじゃないの?」

という疑問が生まれ、気になっていろいろ調べていたので、その調べた内容を自分と同様の初学者を対象とした記事にまとめたいと思います。

DockerコンテナはLinux上でしか動作しない

まず、前提なのですが、DockerコンテナはLinux環境を前提に作られています。
そして、Dockerコンテナ内にはディストリビューションのみ存在し、カーネルが存在しません。

あまり、Linuxに詳しくない人の為にカーネルとディストリビューションについて補足しておくと、
カーネルとはLinuxのOSの中核の機能を担っている部分で、昔はLinuxとは本来このカーネルのみを指す言葉でした。
カーネルの機能はハードウェアとソフトウェアの仲介を行うことですが、
カーネルだけではPCは動作せず、OSとして動作するために様々なソフトウェア組み合わせてパッケージを作成しました。
この組み合わせて完成したものがディストリビューションです。

ではなぜ、中核機能のカーネルがないコンテナが、Linuxマシン上は動作するのかというと、
Dockerの仕組みとして、コンテナはDockerEngineの上で動作しています。
そして、コンテナはこのDockerEngineを通して、Dockerが動作しているマシンのカーネルの機能を間借りすることが可能です。

なので、windowsだけでDockerコンテナを起動しようとしてもそもそもカーネルがないので動作しませんし、
逆にLinuxマシン上であればコンテナそのものにはカーネルがなくてもコンテナ内のディストリビューションはカーネルを間借りして動作できます。

Windows上でDockerを動作させる

ここまでの説明でWindowsだけではDockerを動作させることできないと説明してきましたが、
逆を言えば、windows上に何らかの手段でLinuxカーネルを用意できればWindows上でもDockerを動作させることができます。

方法1.Linuxを仮想環境として用意する

windows上に仮想マシンソフトを導入し、Linuxを仮想環境として用意し、その環境上でDockerを動作させる。
自分が研修にて行った方法になります。windows上にLinux環境を用意し、さらにその上に構築したかったシステムをコンテナ内に構成する方法です。

方法2.Windows用のDockerを使う

最も簡単な方法になります。
LinuxマシンでDockerを利用する場合、必要なのはDockerEngineのみですが、
windows用のDockerではLinux OSなどの実行環境がセットでパッケージになっています。
「windowsでもDocker動いたよ?」という人がいるかもしれませんが、その人はこれを利用することを指していると思われます。
内部的には結局Linuxを利用しています。

まとめ

Linuxカーネルのお話から始めて、Dockerコンテナの内部的なお話でした。
本記事が少しでも誰かの助けになれば幸いです。

参考

Docker&Kubernetesのきほんのきほん


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です