質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

3回答

50005閲覧

Dockerのコンテナ内で使われるOSについて

Udomomo

総合スコア1524

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

5グッド

7クリップ

投稿2018/08/24 11:52

最近Dockerを触り始めたのですが、コンテナとOSの関係についてわからないことがあります。

Dockerの仕組みとして、ホストOSとカーネルを共有しており、コンテナはアプリケーションの実行に必要なもののみを隔離しているという理解でいます。
しかし、Dockerのimageを見ると、UbuntuやCentOSなどのimageも配布されています。
これらのimageが何を配布しているのかがあやふやなせいか、以下の点がよくわかっていません。

・仮にMacOSにDockerを入れ、Ubuntuのimageをpullしてコンテナを立ち上げた場合、コンテナの中で動いているOSは何なのでしょうか?
・上記の例において、コンテナに何かライブラリをインストールしておきたい場合、homebrew等MacOS用のパッケージ管理ツールは使えるのでしょうか?
・別の例として、MacOSにDockerを入れ、OSではないimage(例えばpythonなど)をpullしてコンテナを立ち上げた場合、コンテナの中で動いているOSは何になるのでしょうか?

「コンテナの中で動いているOS」という表現は自分でも少し変かなとは思っているのですが...
よろしくお願いいたします。

Kitami, Tatsuyaaaa, mychikin, yodel, MutsuyukiTanaka👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

・仮にMacOSにDockerを入れ、Ubuntuのimageをpullしてコンテナを立ち上げた場合、コンテナの中で動いているOSは何なのでしょうか?

厳密に言うと何もないが正解で、親のOSであるLinuxで動かしています。
なのでDockerはOSがLinuxでなければインストールすら出来ません。

実はLinuxは共通仕様としてマシン語で書かれている実行ファイルのフォーマットが同じ形式です。
違うディストリビューションでも動作し、適切な依存ライブラリを渡してやれば動作します。

ハードディスクの中身を完全に一致させてバイナリ叩いた場合、
Ubuntuっぽいディレクトリ構造ならUbuntuっぽく、
CentOSっぽいディレクトリ構造ならCentOSっぽく動作するでしょ?という所が根拠になっています
(マシン語の命令が異なるARM等の特殊なCPUの場合、多くのDockerHubで提供されているコンテナやイメージは利用不可能になります)

MacOSはLinuxじゃないのでDockerは起動出来ません。
なのでDocker for Macというアプリケーションをインストールした時に、
準仮想化技術を使ってシンプル高速なLinuxを裏で仮想マシンとして動かして、その仮想マシン内でDockerを利用しています。

・上記の例において、コンテナに何かライブラリをインストールしておきたい場合、homebrew等MacOS用のパッケージ管理ツールは使えるのでしょうか?

Homebrewは無理です。
しょぼい仮想マシンのLinuxの中の話になるので…

例えばCentOSのイメージを落としてきた場合はyumというパッケージ管理ツール、
Ubuntuのイメージを落としてきた場合はaptというパッケージ管理ツールが使えますので、イメージに応じて使い分けてください。
これらは単純にパスの通ったディレクトリにyumやaptが入ってるかくらいの違いしかありませんからね。

・別の例として、MacOSにDockerを入れ、OSではないimage(例えばpythonなど)をpullしてコンテナを立ち上げた場合、コンテナの中で動いているOSは何になるのでしょうか?

繰り返しになりますがLinuxのいずれかのディストリビューションが候補になります。
最近はDebian系(Ubuntu含む)が強いですね。

気になる場合はDocker Hubというサイトで確認してみてください。
特に公式で配布されているような超有名イメージは全てビルド時に使われたDockerfileもセットになっており、
そのDockerfileの上から数行目にFROM ディストリビューション名という形で書いてあります。

逆にDockerfileを公開していないようなイメージは使用しないでください。

投稿2018/08/24 12:29

編集2020/02/03 04:08
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Udomomo

2018/08/25 14:02

ありがとうございます。とてもわかりやすいです。 Dockerfileを見るのは確かに重要ですね。
guest

0

UbuntuもCentOSもカーネルが同じでコマンド群が違うだけというものです。
なので、動いている環境のLinuxカーネルをそのまま利用し、コマンドセットだけそれっぽく構成しなおしたのが、UbuntuやCentOSのimageです。

OSではないimage(例えばpythonなど)

も、実際は動作環境のLinux上で動作します。

ただ、MacOSもWindowsもLinuxじゃないので、専用のLinuxを仮想環境で用意しています。

投稿2018/08/24 12:53

編集2018/08/24 12:55
aquaS

総合スコア191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Udomomo

2018/08/25 14:00

ありがとうございます。UbuntuやCentOSのimageの位置づけが理解できました。
guest

0

DockerはLinuxカーネルに依存するツールですので、macOSで直接動かすことはできません。

macOSでDockerを動かす場合、Linuxの仮想マシンを立ち上げて、その中で動かす形となっています。

そして、ディストリビューションはコンテナによって違うこともありますが、コンテナのカーネルは常にLinuxカーネルです。

投稿2018/08/24 12:00

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Udomomo

2018/08/25 14:02

DockerはLinuxベースだったんですね。この点が理解できていませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問