2017-12-07 5 views
0

私はマルチステージのDockerfileを持っています。ステージ1では、GithubレポのI git cloneです。後の段階では、私はpipなどの他のものを行い、ステージ1のファイルを使用します。私は最初のステージのキャッシングを無効にしたいと思います。Docker:特定のステージのキャッシングを無効にする

docker build --target stage1 --no-cacheは私がしたいことをしていないようです。

特定のステージのみを無効にする方法はありますか?

私Dockerfileは、次のようになります。

FROM yijian/git-alpine 
WORKDIR /tmp 
RUN git clone https://github.com/abc/abc.git 


FROM python:3.5.3-slim 

RUN mkdir /app 
ADD requirements.txt /app 
ADD pip/pip.conf /root/.pip/pip.conf 
WORKDIR /app 
RUN pip3 install --upgrade pip && \ 
    pip3 install pbr && \ 
    pip3 install -r requirements.txt 
ADD server.py /app 
ADD docker/start.sh /app 
RUN chmod a+x /app/start.sh 
COPY --from=0 /tmp/abc/directory /usr/local/lib/python3.5/site-packages/abc/directory 


EXPOSE 9092 
ENTRYPOINT ["./start.sh"] 
+0

あなたの 'Dockerfile'を表示できますか? –

+0

が質問 – lang2

+0

https://github.com/moby/moby/issues/34715に追加されました。しかし、それほどではない。 – VonC

答えて

0

私は、単一のDockerfileが特定の状態のためのキャッシングを無効に持つことができることを信じていません。それはいい機能を要求するかもしれませんが、私はむしろそれをコマンドラインではなくファイルの宣言文として見ています。

ドッカーの参照サイトによると: https://docs.docker.com/engine/reference/commandline/build/#usage

「--target」フラグは、あなたはそれが唯一のDockerfileのその部分を実行することを意味し、Dockerfileからターゲットのステージを選択することができます。私は、このフラグと一緒に--no-cacheフラグが動作することを期待していますが、Dockerfileの他のセクションが実行されることは期待しません。

私はあなたが何を起こそうとしているかは、多段階のDockerfileを持つ目的を打ち負かすかもしれない複数のコマンドを取ると信じています。

これ以上の作業は必要ですが、キャッシュする内容によっては、この目標を達成できるbashやpowershellなどのスクリプトを含めることができます。

別のオプション(必要に応じて)は、必要なものだけをキャッシュする別のDockerコンテナを使用することができます。たとえば、依存関係をインポートするだけのDockerfileを使用するCIビルドを作成した後、メインビルドはその最初のコンテナを参照するコンテナで行われます。私はこれを "dotnet restore"コマンドで行っているので、依存関係はあらかじめロードされており、 "npm install"を使ってこれもやっています。この方法は、ソースを指定できるパッケージ管理ツールで動作します。 project.jsonがある場所では、共通の依存関係を抽出してcache.package.jsonと呼ぶことができます。その後、重いダウンロードを既に行っているベースイメージを作成し、その後頻繁に実行すると理想的ですそれを少なくする必要があります構築します。 Dockerが提供する階層化されたアプローチを活用してください!

関連する問題