問題タブ [docker-multi-stage-build]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - Docker: ビルド終了後にマルチステージ イメージを使用する方法
シナリオ
- マルチステージ ビルドは、複数の Dockerfile セクションを 1 つに結合します
- 中間および最終ステージは、上位ステージからファイルをコピーできます
- 最終段階では、必要なバイナリのみを用意することをお勧めします。
それらを念頭に置いて、フォローを構築したいと思います
ベースステージの再利用
- 中間段階でテストを実行する代わりに、テストのシーケンスを並べ替えて、パイプライン レイヤー (Jenkins CI、Travis など) でさらにスイッチを追加できるように、イメージの外でテストを実行したいと考えています。
- ビルドされた基本イメージを使用できるようにしたいと考えています。
- テスト段階で提案されているように、セカンダリ
Dockerfile.test
を使用できます。ただし、すべての段階で単一の Dockerfile を維持したいと考えています。
実行するための要件は次のとおりです。
質問
- これは現在サポートされていますか?
- 回避策はありますか?
docker - Docker マルチステージ ビルドで RUN コマンドの結果が保持されない
docker-engine 17.05.0~ce-0~ubuntu-xenial を使用して、この Dockerfile をビルドしています。
しかし、出力は期待どおりではありません。wordpress:apache からコピーしたコードは /var/www/html に正しく追加されていますが、wp-config.php は実際のビルド ステップ中にのみ存在し、結果のイメージには存在しません。ここで何が間違っているのかわかりません。ビルドすると、次のように終了します。
最初の RUN で作成された wp-config.php が次のステップで利用できないのに、COPY コマンドでそこに入れられたデータがそこに残るのはなぜですか?
(私が何を達成しようとしているのか疑問に思っている場合は、これは単なる MCVE です。)
docker - Docker マルチステージ ビルドがインストール済みのアプリケーションを認識しない
イメージrun
にはインストール済みのnpm
. この事実にもかかわらず、npm install
次のエラーが返されます。/bin/sh: 1: npm: not found
これはどのように可能ですか?私は何を間違っていますか?
編集:
@BMitch のコメントへの回答として、RUN
イメージを実行すると、コンテナー内のノードは PATH 上にあり、使用できます。パスは/root/local/bin
. すべての Dockerfile を添付しました。
私は 3 つの docker ファイルを持っています:
APP
以前に見たものです。
走る
建てる
編集 2:コマンド
を削除するRUN npm...
と、ビルド全体が成功し、結果のイメージに npm が含まれ、それを使用できることが重要です (インタラクティブ モードでコンテナーを使用して確認しました)。
編集 3:
すぐに試すことができる、はるかに単純なソリューションを次に示します。
結果は次のとおりです。cat: can't open '/root/test.txt': No such file or directory