Help us understand the problem. What is going on with this article?

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

独学でちょろちょろ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を入れようね、という感じみたいです。

 おわりに

個人的な備忘録も兼ねてまとめてみましたが、
文章&絵に起こすとわかりづらいですね...。

とりあえずプロトタイプとして残しておいて、わかりづらいところは加筆していきます。

ko_koyama_m
"ふいんき"えんじにあ / 機械学習やったり
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした