152
128

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【図解】「Docker(コンテナ)でUbuntuを構築する」ってどういう意味?

Last updated at Posted at 2019-10-31

独学でちょろちょろDocker(コンテナ)を勉強していましたが、不明点がたまる一方...。
そんな中、Dockerの研修に行ける機会があり、不明点を解消してきたので備忘録としてまとめます。

いくつか解消できたのですが、すっきり度合い高めな2つだけピックアップ。

解消点

  • 「DockerでUbuntuを構築する」ってどういう意味?
  • 「Docker for Mac」の正体って何者?

Dockerとは

記事をさくっとまとめるためにDockerの詳しい解説は省きます。
すでに素晴らしい解説をしてくれている方が多数います。
自身が駄文で解説するよりも、遥かに参考になると思います。

【図解】Dockerの全体像を理解する -前編-
Dockerを体系的に学び直してみた(概要編)
【図解】コレ1枚でわかるサーバー仮想化とコンテナの違い

「DockerでUbuntuを構築する」ってどういう意味?

### 仮想マシンとコンテナの違い
度々比較される仮想マシンとコンテナ。
当初の自分のイメージではこんな感じ。
vm_container.png
この絵で言いたいことは、
仮想マシンは新たにOSも用意して仮想化しよう
コンテナでは**各コンテナで1つのOS(ホストOS)**を共有しよう
ということです。

実は、この絵の捉え方を間違えていたのが、今回の不明点の原因です。

# docker run ubuntu

参加した研修ではCentOSにDockerを導入していました。
そして遭遇するこのコマンド。

#  docker run ubuntu

コマンド自体は書いてある通りで、「DockerでUbuntuを構築してね」というものです。
しかし、独学で勉強した際にも、ここでつまりました。

「コンテナってOSは入れないんじゃないの?」
CentOSが入ってるのにUbuntuもいれるの?」

では不明点を解消していきます。

OSの構成要素

まずはOS周りについてまとめます。
OSとはみんな知ってるWindowsとかのことですね。
OSは大まかに以下の構成となっています。
os.png
おそらくこの図で納得しない方も多いと思いますが、自分はこの図がわかりやすかったので、これでいきます。

ここで色分けされているカーネルが今回大事になる部分です。
カーネルとはOSの中核です。

Linuxディストリビューション

次にLinuxディストリビューションについてまとめます。
上記ででてきたCentOSやUbuntuが有名ですね。
これらは大まかに以下の構成となっています。
linux.png
ここで大事なことは、
ディストリビューションが違っても、カーネルは同じLinuxカーネルということです。
差があるのはシェルとかその他の部分です。

厳密にはディストリビューションにはカーネルは入らないのかな...?
ここではざっくり理解できればいいということで。

上記知識を念頭に不明点を解消

いろいろと話が出てきましたが、まとめていきます。
自分が勘違いしていたのは以下の点です。

  • コンテナはホストOSを共用している
  • ディストリビューションが違えば、全く違うOS

まず1点目の「コンテナはホストOSを共用している」ですが、
これは「コンテナはホストOSのカーネルを共用している」が正しい表現です。

次に2点目の「ディストリビューションが違えば、全く違うOS」ですが、
これは「ディストリビューションが違ってもカーネルは同じ」が正しい表現です。

上記2点を元に「DockerでUbuntuを構築する」を絵で描いてみます。

container_kernel.PNG

絵心がないので、絵はこれが限界です。
要は、「ホスト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を導入する仮想マシンと考えて!」

つまり絵にするとこんな感じ。

docker4mac.png

実は、Docker for MacはLinuxOSを導入するための仮想マシンの役割をしていました。
(もちろん他にもいろいろしています)
これであればコンテナから見たホストOSはLinuxOSとなり、Ubuntuも難なく構成できそうです。

実際にDocker for Macを導入するとLinuxOSが動作しているのを確認できます。
DockerをMacにインストールする

少し補足すると、
Dockerは元々ホストOSがLinuxであること前提に作られたものです。
それをMac上で動かすために、まずはLinuxを入れようね、という感じみたいです。

# おわりに
個人的な備忘録も兼ねてまとめてみました。
事実と異なる部分がありましたらご指摘いただけますと幸いです。

152
128
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
152
128

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?