2017-09-13 15 views
0

ドッキングコンテナ内でnginxサービスを実行していて、いくつかの静的ファイルとコンパイル済みファイルを提供しています(webpackでjsバンドルビルド)。nginxドッカーコンテナの構造と提供するアセットの構築

私はソースファイルをnginxコンテナに入れたくありません。代わりに、nginxがそこで提供できるファイルのみが必要です。

したがって、私は現在2つのドッカーコンテナを持っています.1つは.jsバンドルを生成します.2つ目のドッカーイメージをビルドする前に実行しなければなりません。次にホストからバンドルファイルを取得します。 )最初のコンテナ。

これは私のnginxイメージビルドはすぐに私が感じるソースからrunnableする必要があります間違っているようです。

しかし、webpackのビルドをnginxイメージのdockerfileに追加した場合、ソース全体を間違った感じのコンテナにコピーする必要があります。

私には何が欠けていますか?

(注:そこにファイルをコピーし、ビルドした後、ちょうどrmファイルを送信したいと思っていますが、それは不快に感じられ、不必要にコンテナのサイズが大きくなります。正しいアプローチです!)

+0

どのように展開していますか?スウォームモードを使用しますか? – vivekyad4v

+0

は現時点ではそれほど作業していません - イメージを生成してローカルでコンテナを実行するためにドッカーを作成していて、おそらくswarmを使用するつもりです。どうして? –

答えて

5

Docker 17.05で導入されたDockerfileの機能multi-stage buildで、あなたが望むものを手に入れることができます。

1つのコンテナにアーティファクトを作成し、そのアーティファクトをただちに1つのDockerfile内の別のコンテナにコピーすることで、単一のDockerイメージを作成できます。あなたのケースでは、Webpackバンドルを構築して、そのバンドルをnginxコンテナにコピーすることができます。ソースJSファイルは一切含まれていません。これにより、コンテンツを削除しなければならない、またはソフトウェアでオーバープロビジョニングされたコンテナを持つなどのすべてのハッキングが除去されます。あなたのnginx Dockerイメージはwebpackをインストールする必要はありません。

FROM node:8.5.0 as webpack 
COPY /src/js /src/js 
RUN webpack /src/js/app.js /app.bundle.js 

FROM nginx:1.13.5 
COPY --from=webpack /app.bundle.js /usr/share/nginx/html 

出力:

ですから、このようなものを(コマンドは一例ですが、私はあなたが正しいものに置き換えることができると確信してい)に見えるDockerfile書き込むことによって、それに近づくだろうあなたのwebpackバンドルを含む軽量のnginx Dockerコンテナイメージでなければならない。

+0

それはまさに私が探していたものです。 –

関連する問題