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

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

ただいまの
回答率

90.35%

  • Docker

    1200questions

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

  • OS

    248questions

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

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

解決済

回答 5

投稿

  • 評価
  • クリップ 6
  • VIEW 893

monologue

score 7

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を動かし、その上でコマンドを実行する、ということなのでしょうか?
そもそも私の理解が根本から間違っている部分があれば、ご指摘いただけると幸いです。よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+2

おそらく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でカーネルバージョンを表示すると

$ uname -r
3.10.0-957.1.3.el7.x86_64

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

$ docker run centos:7 uname -r
4.15.0-45-generic


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

$ uname -r
4.15.0-45-generic

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/23 23:54

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

    キャンセル

+1

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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には明るくないので、この回答が全て正しい事かというと保証はできない事を留意頂ければと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Docker

    1200questions

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

  • OS

    248questions

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