2017-07-07 12 views
0

私のプロジェクトでは、毎回基本部分を再構築する必要はなく、階層。Makefileを使ってDocker画像階層をインクリメンタルに構築する

私はMakefileを使ってイメージをビルドします。これは私が間違いなく怠け者であり、毎回手動でdocker buildコマンドを入力したくないためです。また、私はプロセスの間違いを避けたいからです。

ここで私がしたいのは、後者のためにDockerビルドコンテキストを毎回Dockerデーモンに送る必要があるため、DockerイメージがDockerイメージの代わりに再構築される必要があるかどうかを検出できるようにすることです。画像はubuntu:xenialに基づいており、「Dockerデーモンへのビルドコンテキストの送信」は、個々のDocker画像を再構築する必要があるかどうかにかかわらず、常に多くの時間がかかります。

makeが、処理を高速化するのに多く役立つdocker buildコマンドを実行する必要があるかどうかを検出できた場合。

makeが特定のDockerイメージを再構築する必要があるかどうかを検出する方法があるかどうかを知りたいと思います。

+0

改造が必要なドッカーの基準は何ですか? (タイムスタンプ比較の場合は単純ですが、それ以外の場合は条件付きで再構築するためにレシピにスクリプトを作成する可能性があります)。効果的にあなたを助けるために、より多くの情報を提供する必要があります。 – blackghost

+0

基準は、DockerがDockerイメージのレイヤを再構築するようにするものです。何もする必要がなければ、画像の一部であるすべてのレイヤーがキャッシュからロードされ、再構築されません。その場合、キャッシュからすべてのレイヤーを選ぶことができます。ドッカーのビルドコマンド全体をスキップできるようにするには 'make 'したいと思います。私は、Dockerがどの層を再構築する必要があるかを検出し、ビルドコンテキストをDockerデーモンに送信することが不可欠であるかどうかはわかりません。 –

+0

すぐに免責事項:私はドッカーについては何も知らない。しかし、それを言っていると、各ドッカー画像が別々のディレクトリにあると想定でき、ドッカーはそのディレクトリの外には何も依存していないと思いますか? – blackghost

答えて

1

と仮定:

  • お使いのドッキングウィンドウの画像は、それぞれのドッキングウィンドウのファイルがdockerfile.dia名前が付けられてい
  • ... diadibdicという名前dockerfile.dibdockerfile.dicされている...
  • それに対応するビルドディレクトリをされています./dia.dir/,./dib.dir/,./dic.dir/ ...
  • diaは、 n個のファイルfoo./dia.dir/
  • dibbar./dib.dir/にファイルcuzに依存し、ドッキングウィンドウの画像dia
  • dic./dic.dir/でファイルbazとドッキングウィンドウの画像dib

に依存してあなたのような何かを試すことができます(ありませんテスト済み):

DOCKERIMAGES := dia dib dic 
TAGS := $(patsubst %,.%.tag,$(DOCKERIMAGES)) 
diaDEPS := foo bar 
dibDEPS := cuz 
dicDEPS := baz 

all: $(TAGS) 

$(TAGS): .%.tag: dockerfile.% 
    docker build -f $< -t $* $*.dir && \ 
    echo '$* image built' && \ 
    touch [email protected] 

define DEPS_rule 
.$(1).tag: $$(addprefix $(1).dir/,$$($(1)DEPS)) 
endef 

$(foreach d,$(DOCKERIMAGES),$(eval $(call DEPS_rule,$(d)))) 

.dib.tag: .dia.tag 
.dic.tag: .dib.tag 

clean: 
    rm -f $(TAGS) 

ドッカーファイルが変更された場合、またはディレクトリに依存するファイルが変更された場合や、依存するドッカーイメージが変更された場合にのみ、ドッキング画像を再構築する必要があります。

+0

私は今このソリューションを使用していますが、少なくともそこからインスピレーションを得ています。魅力のように動作します。ありがとう! –

関連する問題