2017-04-26 1 views
4

私はドッキングウィンドウのコンテナとして実行していますNode.jsのアプリを持っています。そのアプリケーションのDockerfileは です。 Ubuntuの上のあなたのベースは、スマートの動きは、このはどのようドッカー画像のサイズを小さくすることができ

RUN apt-get update && apt-get install -y \ 
    build-essential \ 
    cwhatever-you-want \ 
    vim \ 
&& rm -rf /var/lib/apt/lists/* 

最後の行はクリアされますようにすることです場合

FROM ubuntu 

ARG ENVIRONMENT 
ARG PORT 

RUN apt-get update -qq 
RUN apt-get install -y build-essential nodejs npm nodejs-legacy vim 

RUN mkdir /consumer_portal 
ADD . /consumer_portal 
WORKDIR /consumer_portal 

RUN npm install -g express 
RUN npm install -g path 
RUN npm cache clean 
RUN npm install 

EXPOSE $PORT 

ENTRYPOINT [ "node", "server.js" ] 
CMD [ $PORT, $ENVIRONMENT ] 

は私がドッキングウィンドウの画像サイズ

+0

vimをインストールしないでください。外のイメージを構築する? – Igor

+1

アルパインのベースイメージを使用する –

+0

@Aurélien 'anapsix/alpine-java'は、あなたが言っていることです:ノードのjavaの代わりに何ができるでしょうか? –

答えて

0

を減らすために、このDockerfileで何かを変更することができますlot :) 別のlibをインストールしてインストールすると、それはキャッシュされ、次のビルドでは起動されないため、常に同じ行でapt-getを更新する必要があります。

+0

はい、正確です。私はUbuntuをベースにしています –

+0

あなたは私のDockerfileで私を修正していただけますか?どこのコードを入れたらいいですか –

+1

ubuntuの私のDocekrファイルの最初の行にある 'mhart/alpine-node:base-6'を試してみると私のドッカーの画像自体はビルドされていません –

1

は、中間画像の数を減らすことができます、一緒にすべてのRUN指示をパックにしてください。 (しかし、それは「トンサイズを小さくウォン)。

apt-get updaterm -rf /var/lib/apt/lists/*を追加すると、すべての無用のapt-getのものを除去することにより、画像のサイズを小さくします。

をまた最後RUN命令であなたのイメージからvimを削除することができます。

ここで最もさえベース高山のイメージがベースUbuntuの画像に比べて多くの小さいので、画像の全体のサイズを小さくするための簡単な解決策である、提案されているように、基本イメージとして the official node alpine imageを使用して
FROM ubuntu 

ARG ENVIRONMENT 
ARG PORT 

RUN apt-get update \ 
    && apt-get install -y build-essential nodejs npm nodejs-legacy vim \ 
    && rm -rf /var/lib/apt/lists/* \ 
    && mkdir /consumer_portal 

ADD . /consumer_portal 
WORKDIR /consumer_portal 

RUN npm install -g express \ 
    && npm install -g path \ 
    && npm cache clean \ 
    && npm install 

EXPOSE $PORT 

ENTRYPOINT [ "node", "server.js" ] 
CMD [ $PORT, $ENVIRONMENT ] 
+0

答えのためにありがとうございます、 MBの削減を得る。 –

+0

Ubuntuをベースイメージとして使用したい場合、MBをそれ以上減らすことはできません。おそらく、あなたのベースイメージをアルパインなどに変更することについて考えるべきでしょう。 – kstromeiraos

+0

@JoséAntonioLópezアルプスは知りませんが、回答を改善するために私の投稿を自由に編集できます;) –

3

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

FROM node:alpine 

ARG ENVIRONMENT 
ARG PORT 

RUN mkdir /consumer_portal \ 
    && npm install -g express path 

COPY . /consumer_portal 
WORKDIR /consumer_portal 

RUN npm cache clean \ 
    && npm install 

EXPOSE $PORT 

CMD [ "node", "server.js" ] 

それはほぼ同じだと期待通りに動作するはずです。あなたのubuntuイメージからのコマンドのほとんどは、アルパインイメージで同じ方法で適用することができます。

私はあなたが持つかもしれないと同様のプロジェクトを作成するためにモックデータを追加すると、491メガバイトのサイズでUbuntuの画像と高山バージョンの結果が大きな唯一の62.5メガバイトです:

REPOSITORY TAG  IMAGE ID  CREATED   SIZE 
alpinefoo latest 8ca6f338475e 5 minutes ago 62.5MB 
ubuntufoo latest 38620a1bd5a6 6 minutes ago 491MB 
+3

http://www.sandtable.com/reduce-docker-image-sizes-using-alpine/を参照してください。 –

0

1 )おそらくアルパインへの移動が最良の賭けです。私はちょうどアルパインにUbuntuドッカーファイルを移植し、1.5GBから585MBになりました。私はthese instructionsに続いた。注意、apt-getの代わりにapkを使用し、アルパインのパッケージ名は少し異なります。

2)は、実行コマンドを(新しい各実行コマンドは、新しいレイヤを作成する)マージすることによって層を低減することも可能です。あなたが唯一の最終的なイメージに必要なコンポーネントをコピーここ

RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy vim 
RUN npm install -g express path && npm cache clean && npm install 

3)また、multi-stage buildに興味があるかもしれません。

0

容器の画像サイズが適切に対処されるべき問題です。

一部は、スペースを節約するためにalpline分布を使用することをお勧めします。使用する準備ができている高山ためnodejsイメージがあるとして、原則的に良い提案されていることを

すべてのバイナリをビルドする必要があるので、ここで注意する必要があります。 _node_modules_には通常、javascriptパッケージだけが含まれています。場合によってはバイナリをビルドする必要があります。

あなたのドッカーファイルが現在動作している場合、これはあなたのケースではありませんが、ubuntuから別の種類のイメージに移動するときは、使用する必要があるすべてのバイナリ将来的にはアルペンの画像でコンパイルする必要があります。

サイズを切り取る場所を選択する前に、イメージの使用方法を検討する必要があります。

あなたのアプリケーションは、他のノードアプリケーションを使わずに単独のコンテナ内に単独で存在する1つのアプリケーションですか?

回答が「いいえ」の場合、ローカルドッカーレジストリ内の各イメージのサイズは、合計使用サイズを取得するために集計としてカウントされないことに注意してください。

代わりに、基本レイヤーで各画像を分割し、それぞれのユニークレイヤーを合計する必要があります。

ここで意味するのは、ノード上で実行される多くのノードアプリケーションがある場合、単一のイメージはあまり重要ではないということです。

必要なすべての依存関係を含むボリュームとして_node_modules_をエクスポートすることで、領域を節約できます。

以上、あなたはあなたのアプリケーションの依存関係のルートを含む中間画像を生成するために、公式nodejsイメージから起動することができます。例えば、は、およびのパスです。そして、専用の依存関係を各アプリケーションイメージにインストールします。

こうすることで、レイヤを共有してローカルドッカーレジストリの合計使用サイズを減らすことができます。

マイナー配慮

あなたはをインストールする必要はありませんコンテナ画像内のグローバルパスを発現します。

本当にvimがコンテナに必要ですか? 開発中でもコンテナの変更が安全でないと考えてください。このボリュームを使用して、サーバーファイルシステムのリソースを指すことができます。 実行中にコンテナからファイルまたはフォルダをコピー/イン/アウトします。 あなたが何かを読む必要があるなら、less、more、catのようなコマンドを使うだけです。

関連する問題