2017-11-10 9 views
0

最初に糸とドッキング作業を一緒にしようとしています。 docker buildコマンドを実行するたびに、糸のインストールを毎回止めることができますか?糸でドッカー

node_modulesを一時ディレクトリに保存してからリンクするなどの解決策がいくつか見つかりましたが、さまざまなパッケージがインストールされているため、処理するには多すぎるエラーが発生します。 yarn.lockとDocker内の既存のソリューションまたは他のソリューションを比較する方法はありますか?

Dockerfile:この設定で

FROM node:8.9.1-alpine 

COPY package.json yarn.lock /usr/src/ 
RUN cd /usr/src \ 
    && yarn install --pure-lockfile 

COPY . /usr/src 
EXPOSE 3005 

私はSending build context to Docker daemon 375.2MBを言ってメッセージを取得し、その後、yarn installは、パッケージごとに一回のフェッチ、いつものように実行されます。

+1

あなたは 'を使用してに見てきました。dockerignore'ファイルをあなたの設定に追加しますか? –

+0

@DanielDアプローチについての詳細は? – Ancinek

+0

これをチェックしてください:https://docs.docker.com/engine/reference/builder/#dockerignore-file。これはあなたを助けることができるかもしれません。これは '.gitignore'ファイルの使用に似ています。外見が役立つなら、私は将来の使用のための簡単な答えを書くでしょう。 –

答えて

0

ドッカーキャッシュをよく使う必要があります。

次のようにあなたのDockerfileが用意している場合:

FROM node:carbon 

COPY package.json yarn.lock /app 
RUN cd /app \ 
    && yarn install --pure-lockfile 

COPY . /app 
CMD doStuff 

を、それが変更されていない限り、docker buildpackage.jsonには触れません。前の手順でキャッシュが無効にされていない限り、次のRUNコマンドは実行されません。

注:確かに、キャッシングをドッキングウィンドウに注意を払うあなたの.dockerignoreファイル

1

node_modulesを保ちます。基本的には、安定性の低い命令よりも早く最も安定した命令を実行したいと考えています。以前の実行と同じ画像の変更をもたらす指示は、ENV/ARG命令の問題を除き、再実行しないでください。しかし、命令を実行する必要があると、次の命令はすべてキャッシュ内の命令に関係なく実行されます。

.dockerignoreも役立ちますが、物事が入り込みやすくなることがあります。すべてを無視して何をコピーするかを指定することで、ファイルを反転する方法を採用しました。

ウェブからのフェッチを最小限に抑えるため、私は糸のオフラインキャッシュを使用するのが好きです。これにより、インストールされた依存関係のtarballが保存され、将来のインストールのために再利用されます。毎回フレッシュインストールのnpm rebuild以上のメリットが得られます(キャッシュが無効になっている場合)。ホームディレクトリにある.yarnrcファイルを使ってオフラインキャッシュを設定しますが、この目的のために、tarballを保存するディレクトリとともにリポジトリに保存します。

あなたのレポにミラーディレクトリをチェックインすることができます。一般的なnpmモジュールのインストールは、まだ20メガバイトの領域にしかありません。

あなたのニーズに合わせてカスタマイズし、ローカルでyarnを実行すると、糸オフラインミラーにはアプリのインストールに必要なタールボールが含まれます。

.dockerignore

* 

!yarn-offline-mirror/ 
!src/ 
!package.json 
!yarn.lock 
!.yarnrc 

.yarnrc

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 
# yarn lockfile v1 

yarn-offline-mirror "./yarn-offline-mirror" 

Dockerfile

ENV HOME /usr/src/ 
WORKDIR $HOME 

# copy the tarballs 
COPY ["yarn-offline-mirror", "$HOME/yarn-offline-mirror/"] 

# copy files needed for the install 
COPY ["package.json", "yarn.lock", ".yarnrc", "$HOME/"] 

# the offline flag will mean that an error is raised if any 
# module needs to be fetched remotely. It can be removed to allow 
# yarn to fetch any missing modules if that was to happen. 
RUN yarn --offline --frozen-lockfile --link-duplicates 

# copy the rest.. could be further broken up into multiple instructions 
# for cache optimisation 
COPY . $HOME 

CMD npm start 
関連する問題