2016-04-06 9 views
2

初心者の質問; RUNコマンドを使用している場合、Dockerは基本となるオペレーティングシステムのバリエーションをどのように処理しますか?Dockerfile RUNコマンドの互換性クロスOS(apt-get)

たとえば、非常に単純なOfficial Docker Hub Dockerfile(JRE 1.8)を考えてみましょう。それは、Java用のパッケージをインストールすることになると、Dockerfileはapt-getを使用しています。

RUN apt-get update && apt-get install -y --no-install-recommends ... 

素人目には、これが唯一のDebianベースのオペレーティングシステム上で動作する(あるいは、少なくともますプラットフォーム固有の命令であるように思われますAPTがインストールされているもの)。

これはCentOSインストールでどのくらい正確に動作しますか?たとえば、パッケージマネージャがyumの場合、または神がSolarisのような何かを禁じます。


任意のシェルコマンドをフォークするRUNを使用してのこのパターンはドッキングウィンドウで流行している場合は、どのように1は、プラットフォーム間、あるいは相互バージョン、依存関係を避けるのですか?

Dockerfileの作成者が私よりも新しいバージョンのgrepを持っていて、以前のバージョンでは使用できなかった新しいCLIフラグを使用した場合はどうなりますか?

これは、(1)RUNコマンドがゼロ以外の終了コードで終了する(2)コマンドを実行する前にDockerfileによってインストールされているバージョンのgrepが変更されます。

+0

私はDockerfileを使用していますCentOSで画像を作成するDockerファイルの最初の行は 'FROM docker.io/centos:latest'です。これは上記の基本的なCentOSイメージをダウンロードし、私のレイヤー(私の次のRUNコマンド)を上に追加します。 – ItayB

答えて

1

すべてのDockerfilesで共有される共通点はFROMです。これはファイルの最初の行で、ビルドしている親のDockerイメージを示します。典型的なベースイメージは、Ubuntuのイメージ(すなわち、https://hub.docker.com/_/ubuntu/)です。あなたの質問で共有するスニペットは、Ubuntuイメージ(apt-get)ではうまく収まるが、CentOSイメージではうまく収まらない。

要約すると、CentOSシステムにドッカーをインストールしていますが、UbuntuでDockerイメージを構築しています。

+0

逆問題?Dockerfileにプラットフォームに依存しないコマンドが含まれていて、ubuntuイメージが 'FROM'の場合はどうでしょうか?Dockerfileの内容が実際に移植可能であるにもかかわらず、おそらく私のCentOSボックスで実行できませんでしょうか? – jwa

+0

'docker'はseですあなたのCentOSボックス(またはそれをインストールしたい場所)で動くrvice。このようなサービスを使用してDockerfile経由で画像を構築すると、このファイルの文は構築中のドッカー画像内で実行されます。言い換えれば、コンテナ化のおかげでCentOSボックスでUbuntuイメージを実行できます。 –

0

あなたの質問にコメントしたとおり、FROMステートメントを追加して、必要なリレーOSを指定することができます。例えば:あなたは(例えば、CentOSの)に精通しているOSを使用して構築しますということです

docker build -t <image-name> . 

アイデア:

FROM docker.io/centos:latest 
RUN yum update -y 
RUN yum install -y java 
... 

は、今あなたが/構築して画像を作成する必要がありますそれのイメージ。

docker run -it <image-name> bash 

と今、あなたはこのイメージを取るとUbuntu/CentOSの/ RHEL上でそれを実行することができます/何でも...(あなただけの希望OSにドッキングウィンドウをインストールする必要があります。

関連する問題