独学でちょろちょろDocker(コンテナ)を勉強していましたが、不明点がたまる一方...。
そんな中、Dockerの研修に行ける機会があり、不明点を解消してきたので備忘録としてまとめます。
いくつか解消できたのですが、すっきり度合い高めな2つだけピックアップ。
解消点
- 「DockerでUbuntuを構築する」ってどういう意味?
- 「Docker for Mac」の正体って何者?
Dockerとは
記事をさくっとまとめるためにDockerの詳しい解説は省きます。
すでに素晴らしい解説をしてくれている方が多数います。
自身が駄文で解説するよりも、遥かに参考になると思います。
【図解】Dockerの全体像を理解する -前編-
Dockerを体系的に学び直してみた(概要編)
【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い
「DockerでUbuntuを構築する」ってどういう意味?
### 仮想マシンとコンテナの違い
度々比較される仮想マシンとコンテナ。
当初の自分のイメージではこんな感じ。
この絵で言いたいことは、
仮想マシンは新たにOSも用意して仮想化しよう
コンテナでは**各コンテナで1つのOS(ホストOS)**を共有しよう
ということです。
実は、この絵の捉え方を間違えていたのが、今回の不明点の原因です。
# docker run ubuntu
参加した研修ではCentOSにDockerを導入していました。
そして遭遇するこのコマンド。
# docker run ubuntu
コマンド自体は書いてある通りで、「DockerでUbuntuを構築してね」というものです。
しかし、独学で勉強した際にも、ここでつまりました。
「コンテナってOSは入れないんじゃないの?」
「CentOSが入ってるのにUbuntuもいれるの?」
では不明点を解消していきます。
OSの構成要素
まずはOS周りについてまとめます。
OSとはみんな知ってるWindowsとかのことですね。
OSは大まかに以下の構成となっています。
おそらくこの図で納得しない方も多いと思いますが、自分はこの図がわかりやすかったので、これでいきます。
ここで色分けされているカーネルが今回大事になる部分です。
カーネルとはOSの中核です。
Linuxディストリビューション
次にLinuxディストリビューションについてまとめます。
上記ででてきたCentOSやUbuntuが有名ですね。
これらは大まかに以下の構成となっています。
ここで大事なことは、
ディストリビューションが違っても、カーネルは同じLinuxカーネルということです。
差があるのはシェルとかその他の部分です。
厳密にはディストリビューションにはカーネルは入らないのかな...?
ここではざっくり理解できればいいということで。
上記知識を念頭に不明点を解消
いろいろと話が出てきましたが、まとめていきます。
自分が勘違いしていたのは以下の点です。
- コンテナはホストOSを共用している
- ディストリビューションが違えば、全く違うOS
まず1点目の「コンテナはホストOSを共用している」ですが、
これは「コンテナはホストOSのカーネルを共用している」が正しい表現です。
次に2点目の「ディストリビューションが違えば、全く違うOS」ですが、
これは「ディストリビューションが違ってもカーネルは同じ」が正しい表現です。
上記2点を元に「DockerでUbuntuを構築する」を絵で描いてみます。
絵心がないので、絵はこれが限界です。
要は、「ホストOSにはCentOSをいれて、コンテナではUbuntuのシェルやその他を用意して、ホストOSのカーネルを使ってUbuntuを動かす」ということです。
自分の中ではこれでイメージができたのですが、
同じ悩みを抱えていた同志の方々いかがでしょうか...?
「Docker for Mac」の正体って何者?
Docker for MacでもUbuntuを構築
MacでDockerを扱うソフトウェアとして、「Docker for Mac」があります。
では、これを用いてMacでDockerを扱えるようにしたとして、コンテナ上にUbuntuは構築できるのでしょうか。
今までの話からすると、MacとLinuxのカーネルはそれぞれ違うのものなのでできなさそうです。
ただ、これはできます。
Docker for Macは仮想マシンとほぼ同義
「なんでMac上のDockerでUbuntuが構成できるの?」
と質問を投げたところ、講師の方はこのような返答でした。
「Docker for MacはLinuxOSを導入する仮想マシンと考えて!」
つまり絵にするとこんな感じ。
実は、Docker for MacはLinuxOSを導入するための仮想マシンの役割をしていました。
(もちろん他にもいろいろしています)
これであればコンテナから見たホストOSはLinuxOSとなり、Ubuntuも難なく構成できそうです。
実際にDocker for Macを導入するとLinuxOSが動作しているのを確認できます。
DockerをMacにインストールする
少し補足すると、
Dockerは元々ホストOSがLinuxであること前提に作られたものです。
それをMac上で動かすために、まずはLinuxを入れようね、という感じみたいです。
# おわりに
個人的な備忘録も兼ねてまとめてみました。
事実と異なる部分がありましたらご指摘いただけますと幸いです。