2016-07-10 2 views
6

私はドッカーの概念を理解しようとしているが、私はキャッチすることはできません一つのことしています:ドッカー:ベースイメージ

私は画像理解では(結果的に - コンテナ)が異なるLinuxのdistributivesからインスタンス化することができ、そのようなUbuntuの、CentOSのようおよびその他。

は、私は同じ分配からインスタンス化されていないコンテナを使用するとどうなりますか、私は標準のUbuntu 14.04、

  • を実行するのは、ホストマシン上で言ってみましょうか?
    • 14.04?
    • Ubuntu(または他のDebianベースのもの)ではありませんか?
    • イメージの異なるベースイメージを使用すると、どのような短所がありますか? (私がUbuntuをベースイメージとして使用するイメージA、Debianをベースイメージとして使用したイメージB、CentOSをベースイメージとして使用したイメージCを使用しています)

ボーナス質問:開発者は、ドッカーハブの説明でそれを指定しなかった場合、どのように私はイメージのために使用したものベース画像伝えることができますか?

ありがとうございます!

答えて

6

ドッカーはない使用LXC(ないsince Docker 0.9)が、(現在runc)libcontainer、名前空間、対照群、機能、AppArmorのプロファイル、ネットワークインタフェース及びファイアウォールのルールを操作内蔵実行ドライバを行います一貫した予測可能な方法で、LXCや他のユーザランドパッケージに依存することなく、

ドッキング・イメージは、ホスト・カーネルにアクセスしている間、ウィンチが独自のメモリー、ディスクおよびユーザー・スペース内のコンテナとして実行する一連のファイルを表します。
これは、ホストカーネルにはアクセスしませんが、自身のハードウェア/ソフトウェアスタックを含むVMとは異なり、hypervisorです。
コンテナは、ホストに制限(ディスク、メモリ、CPU)を設定するだけです。実際のVMは新しいホスト全体を構築する必要があります。それは、独自のディスクスペースに隔離されているので、それが(ホストのライブラリに依存しない

  • 、それはへのアクセス権を持っていません:イメージ(ファイルのグループを)ドッキングウィンドウ

    は限り、何もすることができますホストファイル、unless volumes are mounted

  • は、それが唯一のシステムコールん:別のLinuxディストリビューション、あるいは単一の実行可能ファイル:画像はことができることを意味し、「What is meant by shared kernel in Docker?

参照してください。それがあるので、

FROM scratch 
COPY my_go_exe/
ENTRYPOINT /my_go_exe 

scratchが「空」の画像で、外出先の実行可能ファイルを静的にリンクされます。例えば、外出先(https://golang.org/)内のすべての実行可能なコンパイルは、どのLinuxディストリビューションせずに、独自のドッキングウィンドウのイメージにパッケージすることができ自己完結型で、カーネルへのシステムコールのみに依存します。

+0

答えをありがとう、それは今ではっきりしています!それで、なぜ、同じベースイメージからすべてのイメージをインスタンス化するのが良いアイデアだと人々は続けているのですか?クリスピットマンは、このスレッドでかなり合理的な答えを与えた、あなたは何を言ったことに同意するのですか? – SmxCde

+1

@SmxCdeあなたのカーネルが「最近のバージョン」(3.14以上)であれば、ベースイメージは重要ではありません。同じベースイメージから始めることは、ホスト上の '/ var/lib/docker/images'にあまりにも多くのスペースを消費しないようにするのに役立ちますが、それ以外にもあなたは好きなだけ基本イメージを使うことができます。 (クリスのセキュリティについての警告) – VonC

1

Dockerは、単一のLinuxカーネルを使用して複数の隔離されたLinuxシステム(コンテナ)を制御ホスト上で実行するためのオペレーティングシステムレベルの仮想化方法であるLXCを使用します。

これはマシン上のVMと比較することができます。このマシンでは、別のLinuxディストリビューションを起動しますが、ホストOSと同じである必要はありません。あなたのホストOSがあなたのコンテナのベースイメージと同じなら、それは問題ではありません。

Dockerでは、コンテナはレイヤーで構築されています。 Dockerファイル内の各ステップ(コマンド)は1つのレイヤーを表し、順番に適用されます。最初のステップは、ベースOS層を適用することであり、それはFROMによって示される。

あなたのボーナスの質問に答えるには、使用しているコンテナのDockerfile(DockerHubの3番目のタブ)の内側を見て、最初の文であるベースイメージ(os)を見てください。

+0

ありがとうございました!しかし今のところあなたが言っていることは私のためにちょっと混乱しています。私がDockerについて学び始めたとき、私は彼らがVMではないソフトウェアとして自分自身を位置づけていることを見ています。例えば、この画像を見てください:http://i.imgur.com/MJHfm1c.jpgそしてあなたはそれがOSレベルでの何らかの種類のVM、またはそれに類似したVM私は自分の質問がばかげているかもしれないと理解していますが、私はOSやLinuxの人ではありません) – SmxCde

+0

実際のVMとLXCのDockerとの違いを説明できれば、またはa)ホストマシンと同じ配分を使用することb)すべての私のドッカーコンテナのための同じ基本イメージ、私はそれが推奨されていることを理解しています...ありがとう! – SmxCde

4

ホストOSとドッカーの間で共有される主なものはカーネルです。ドッカーコンテナを異なるディストリビューション/バージョンから実行する主なリスクは、ホストシステムには存在しないカーネル機能に依存する可能性があることです。例えば、コンテナがホストよりも新しいカーネルを必要とする場合です。

理論上、Linuxカーネルは下位互換性があります。ホストカーネルがコンテナカーネルよりも新しい場合、になるはずです。

操作上の観点から、異なる基本イメージに応じて起動するたびに、更新やセキュリティの問題を監視する必要がある別の依存関係です。 1つのディストリビューションを標準化することで、次の大きな脆弱性が発見されたときに、運用チームの作業負荷が軽減されます。全部で -

+0

完璧な意味合いがあります、ありがとうございます! – SmxCde

関連する問題