2016-04-11 13 views
2

env変数がドッカーから使用できるかどうか疑問に思っていますか?この理由は、タグ付けを制御するためです。例えば、私は私のDockerfileにこのラインを持っていると言う:ドッカーFROMで変数を使用できますか?

From myApp 

私が欲しいものはこれです:

From myApp:${VERSION} 

私は、このためのドッキングウィンドウの画像を構築するためにdocker build . myApp --build-arg VERSION=9

プロセスを言うことができますこの方法アプリは同じです。私はDockerfilesを別の基本イメージを使用するだけのものにしたいとは思っていません。バージョン9をビルドする場合、基本イメージのバージョン9を使用する必要があります。

答えて

0

できません。

新しいバージョンを作成するときは、from myApp:latestのような可変タグを使用して、latestタグを上書きすることができます。

+0

しかし、このアプローチにはどうすれば古いバージョンをビルドできますか?バージョン8を再構築したい場合は、最新版をベースとして使用します。つまり、バージョン9をベースとして使用しないということですか?イメージとベースイメージを同期させた状態に保つための簡単なメカニズムが必要です。 – CodyK

+0

私はあなたがあらゆる種類のバージョンと組み合わせを維持し、サポートしたいと思うことを理解できます。これは、あなたの画像の中に「非下位互換性のある」機能(例えば、新しいプログラムパラメータ。前に述べたテンプレートメカニズムは、現在、それを処理するのが最善です。私のアドバイスは、環境に応じて常にバージョンを最小限に抑え、下位互換性のないブランチ・バージョンを使用することです。最新バージョンの画像を改善し、バージョンとブランチの複雑さをチェックし続けるだけで、あなたの努力を集中してください。 – blacklabelops

+0

この特定のユースケースは、ベンダー提供のドッカーファイルから構築されています。ドッキングファイルはまったく変更されませんが、アーキテクチャの性質上、これが必要です。彼らのイメージはドッカーハブにはない。それで、あなたがしなければならないのは、彼らのツールの新しいバージョンをインストールし、スクリプトを実行してイメージを構築することです。次に、それらの画像をベース画像として使用します。アドバイスありがとう。私はそれを念頭に置いておきます。 – CodyK

2

テンプレートからDockerファイルを簡単に生成することができます。 Makefileの中でこのような 何かを置く:

MYTAG=latest 

.PHONY: Dockerfile 
Dockerfile: Dockerfile.in 
    sed 's/MYTAG/$(MYTAG)/' $< > [email protected] || rm -f [email protected] 

次にあなたが実行することができます:

make MYTAG=8; docker build -t my-app-8 . 

あなたが頻繁にFROMラインで別のタグを必要と イメージを構築している場合にのみ意味をなすだろう。

+0

私はそれについて考えました。私はちょうどこれのためのネイティブのドッカー機能を期待していた。 – CodyK

+1

ネイティブソリューションはありません。しかし、提案/機能要求は公開されています。 https://github.com/docker/docker/issues/18119 – thaJeztah

0

残念ながら、それはできません。 Dockerfile の最初の行はである必要があります。FROMの指示である必要があります。したがって、ARGディレクティブを使用することはできません。そこDockerfileの生成についてlarsksからそこに良い答えですが、私はまた、単に異なるDockerfilesを作成し、-fスイッチを使用してdocker buildコマンドで特定の1つを指定勧めしたいと思います:

docker build -t codemiester/app:latest -f ./Dockerfile.apache2.ubuntu 
+0

私はそれを行うことができます。それはバージョンに関係なくプロセスが同じであると述べたので、それはただの痛みです。また、私は、イメージとベースイメージを同期させたままにする簡単なメカニズムが必要です。 – CodyK

関連する問題