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

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

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

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Docker

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

Q&A

解決済

5回答

9121閲覧

Docker上で動作するOSに関する質問

monologue

総合スコア13

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Docker

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

0グッド

6クリップ

投稿2019/02/23 09:07

Dockerを初めて勉強しています。初歩的な質問すぎてググっても知りたい情報が見つからなかったため質問です。

自分の理解

ハイパーバイザ型やホスト型の仮想化技術と違い、Dockerはコンテナ型なので、1つのホストOS上にプロセスとして各コンテナが立ち上がると理解しています。
であれば、各コンテナには「ゲストOS」という概念がないと理解しています(なぜなら、Dockerが乗っているOS=各コンテナのOSなので)。

質問

しかし、Dockerイメージには「CentOS」や「Ubuntu」といったOSの情報が入っています。ここが理解できません。このDockerイメージに含まれるOS情報は何者なのでしょうか?

  • コンテナ上で動かすOS?
  • コンテナを動かすために必要なホストOSの情報?

例えば、Ubuntu上で動作するDockerでdocker run centos XXXとすると、CentOS上でコマンドを実行したことになるのでしょうか?つまり、Ubuntuの上で動くコンテナ上でCentOSを動かし、その上でコマンドを実行する、ということなのでしょうか?
そもそも私の理解が根本から間違っている部分があれば、ご指摘いただけると幸いです。よろしくお願いいたします。

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

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

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

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

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

guest

回答5

0

ベストアンサー

おそらくOSという言葉で終わらせずカーネルについて把握した方が理解しやすいと思います。

なぜなら、Dockerが乗っているOS=各コンテナのOSなので

これは正しいですが、正確にはコンテナはホスト(Dockerが乗っているOS)のカーネルを共有する技術です。
ここでカーネルとはLinux Kernelです。
CentOSやUbuntuなどのLinuxディストリビューションは
Linux Kernelを軸としてさまざまなソフトウェアをセットアップしたOSです。
そして、この"さまざまなソフトウェア"をコンテナで提供することで
DockerではCentOSイメージやUbuntuイメージを実現しています。

Ubuntu上で動作するDockerでdocker run centos XXXとすると、CentOS上でコマンドを実行したことになるのでしょうか

yumやaptなど、ディストリビューション固有のコマンドを実行する上では正しいです。
Ubuntuホスト上でCentOSコンテナを実行すればCentOSのソフトウェアが利用できます。

一方でカーネルバージョンは異なる点に注意しなければいけません。
VM上のCentOS7でカーネルバージョンを表示すると

bash

1$ uname -r 23.10.0-957.1.3.el7.x86_64

となりますが、Ubuntu上のコンテナでカーネルバージョンを表示すると

bash

1$ docker run centos:7 uname -r 24.15.0-45-generic

とVMとは異なります。そしてこれはUbuntuホストの結果と一致します。

bash

1$ uname -r 24.15.0-45-generic

このため、CentOSコンテナでカーネルバージョン依存のソフトウェアを実行するとき、
完全にCentOS VMと同じ挙動となるとは限りません。

投稿2019/02/23 19:34

thaim

総合スコア175

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

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

0

理解は正しいです。仮想マシンとの区別が付いてない人も多いのですが。

コンテナが、ファイルシステムや、プロセス、その他ポート番号などを封じ込めていると言うことは理解されていると思います。

ubuntuOS内で動く、CentOSコンテナ内のプロセスから、/usr/etcを見るとそこにあるのは、本物のCentOS内のプロセスから見た/usr/etcと同じファイル構成の物が見えます。
例えば、yumコマンドもあるし、/etc/redhat-releaseも見えます。
そのため、CentOSで動くようにコンパイルや設定をされたソフトはそのまま動くわけです。
(想定するKernelバージョンが違うと動かない可能性もありますが)

投稿2019/02/23 11:02

otn

総合スコア84529

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

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

wwbQzhMkhhgEmhU

2019/02/23 14:54

補足です。 Docker for Windowsは従来は間接的に、最近のバージョンだと直接Hyper-Vを使ってて、若干違いそうです。
guest

0

Dockerイメージには「CentOS」や「Ubuntu」といったOSの情報が入っています。

それはOSの情報ではありません、ベースイメージの情報です。もっと言うとただのデータです。Dockerは、ざっくり説明すると、そのデータを隔離空間で利用可能にしてプロセスを起動するだけです。

Ubuntu上で動作するDockerでdocker run centos XXXとすると

centosイメージのデータを隔離空間で利用可能にしてXXXプロセスを起動するという意味になります。

投稿2019/02/23 12:11

YouheiSakurai

総合スコア6142

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

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

0

CentOSやUbuntuの違い

ですが、まずパッケージ管理の手法が違います。
CentOSはyum、Ubuntuはaptになります。
詳しくはこちらを参考にしてみてください。
https://qiita.com/smallpalace/items/57bf018909644e7c3e70
つまり、dockerといえどもsshログインさえすれば、コンテナと言えども何ら、今ままでのサーバと変わらない操作感を得られる訳です。

CentOSが得意な方はCentOSを使えば良いですし、Ubuntuが得意な方はUbuntuを使えば良い訳です。
このあたりがdockerにも反映されているわけです。

また、dockerと言えど、既存のrpmが使えるのがメリットがある訳です。
rpmならrpm -i http:// で任意のrpmをインストールできるので、すぐに既存のソフトウェアが使える訳です。
このメリットが非常に大きいのです。

そこで、docker hubなどでCentOSと謳っている訳です。

CentOS上でコマンドを実行したことになるのでしょうか?つまり、Ubuntuの上で動くコンテナ上でCentOSを動かし、その上でコマンドを実行する、ということなのでしょうか?

これは現実的には違う訳です。
dockerはホストOSのカーネルに依存するのでCentOSならkernel3系となってしまいます。
そこで、Ubuntuのカーネルとはバージョンが違うので動かない事もあるかも知れないという事です。
Linuxカーネルは後方互換性があるので、Ubuntuで動かせばCentOSのコンテナが動く可能性はあるかも知れないという事です。

私はUbuntuには明るくないので、この回答が全て正しい事かというと保証はできない事を留意頂ければと思います。

投稿2019/02/23 10:09

yut148

総合スコア752

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

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

0

まずは、「docker 仕組み」でぐぐって、でてきたものを一通り読んでみましょう
この上でわからないことを聞いていただけるとよろしいかと

投稿2019/02/23 09:36

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問