2016-10-25 8 views
0

私はドッカーには新しく、LinuxカーネルはホストOSとコンテナ間で共有されていることを理解しています。しかし、私は本当に深いドッカーが特定のLinuxディストリビューションをエミュレートするかどうかは分かりません。定義済みのLinuxディストリビューションのどのコマンドがDockerコンテナで利用できますか?

FROM ubuntu:16.10 
RUN apt-get install nginx 

それは私のUbuntu 16.10環境にインストールnginxのとドッキングウィンドウコンテナを提供します:私たちはこのような単純なドッキングウィンドウのファイルを持って言うことができます。だから、私はapt-getをUbuntuのデフォルトのパッケージマネージャーとして使うことができるはずです。しかし、これはどれくらい深いですか? lsb_releaseのような配布の典型的なコマンドは、Ubuntu 16.10がインストールされた完全なVMのようにエミュレートされていると仮定できますか?

私の質問の背後にある理由は、Linuxディストリビューションが異なるということです。私はどのコマンドが利用可能であるかを知る必要があります。たとえば、上記のRed Hat、CentOSなどの異なるディストリビューションがインストールされているホストで、Ubuntu 16.10のようなコンテナを実行すると、

ドッカーのUbuntuイメージは約150 MBです。だから私は実際のインストールのようにすべてのツールが含まれているわけではないと思う。しかし、私は彼らがそこにいることをどのように砂漠化できるのかをどのように知ることができます。

+0

'docker run --name myubuntu sleep infinity'と 'docker exec -it myubuntu lsb_release'を使って起動しようとすると、Ubuntuのバージョンがあれば動作する – user2915097

答えて

0

コンテナは、コンテナ化されていない配布と同じソフトウェア環境を提供しています。デフォルトでインストールされている同じパッケージをすべて持っているわけではありませんが、適切なパッケージマネージャを使用して必要なものをインストールできます。コンテナ内のソフトウェアの可用性は、ホスト上で実行されているディストリビューションとは関係ありません(CentOS、Fedora、Ubuntu、Archなどの下でDockerを実行しているかどうかにかかわらず、Ubuntuイメージは同じになります)。

特定のコマンドを使用する必要がある場合は、それらのコマンドがDockerfileにインストールされていることを確認してください。

異なっコンテナ内で動作しますいくつかのことの一つは、(のようなinitまたはsystemdまたは何を)実行中のサービス管理プロセスは、一般的に存在しないということですので、あなたがすることなく、ホスト上のサービスにすることができます同じように起動することはできません。仕事の少し。

1

Dockerの基本OSイメージは意図的に削除されています.Ubuntuでは、新しいリリースがリリースされるたびに多くのコマンドが削除されています。イメージは、専用のアプリケーションを実行するためのベースとなるため、コンテナに接続してコマンドを実行することは通常ありません。小さなイメージの方が移動しやすく、攻撃ベクトルが小さくなります。

私が知っている各画像のバージョンにはコマンドのリストはありません。画像を作成することによってのみ知ることができます。しかし、画像がタグ付けされると、将来のマイナーな更新がダウンストリーム画像を破らないと仮定することができます。これはDockerfileにタグを明示的に指定するための良い引数です。

例えばは、このDockerfileは正しく構築します

FROM ubuntu:trusty 
RUN ping -c 1 127.0.0.1 

この1つは失敗します。

pingxenialリリースのイメージから削除されたためだ
FROM ubuntu:xenial 
RUN ping -c 1 127.0.0.1 

FROM ubuntuをちょうど使用した場合、trustylatestタグであった場合、同じDockerfileが正しく構築され、xenialに置き換えられたときに失敗します。

関連する問題