2017-06-09 12 views
0

私は、nixのdockerToolsでドッカーにpythonアプリケーションをパックしていますが、画像サイズ以外はすべて良好です。 Python自体は約40MBで、numpypandasを追加すると数百メガバイトになりますが、アプリケーションコードは約100KBです。nixで構築されたドックラーコンテナのサイズを最小化

私が見る唯一の解決策は、依存関係を別のイメージにパックし、それからメインのものを継承することです。サイズを修正することはできませんが、少なくともコミットごとに巨大なイメージを転送する必要はありません。また、私はこれを行う方法がわからない、私はnixでいくつかの画像を使用するか、またはpythonPackages.buildEnvと環境を構築し、それに私のアプリを添付する必要がありますか?

一般的な解決策があるのはすばらしいことですが、Python固有のものが良いでしょう。不完全な解決策があっても、共有してください。

[OK]をfromImage attr buildImage私は巨大な依存層と小さなアプリケーションコード層に分割します。 この脂肪依存層を別の画像に移動する方法があるのだろうかと思うので、他のプロジェクトと共有することができますか?

答えて

0

。また、fromImageの値がpullImageという結果になるようですが、(私が正しく理解していれば)同じ結果が得られるはずですが、確認できませんでした。

0

依存関係を別のイメージにパッケージ化して継承する必要はありませんが、害はありません。

Dockerfileの最後の手順の1つとしてアプリケーションコードを追加するだけです。各コマンドには独自のレイヤーがあるため、アプリケーションコードを変更するだけであれば、その変更を超えるすべてのレイヤーをキャッシュから使用できます。 Docker Images and Layersドキュメントから

例:

FROM ubuntu:15.10 
COPY . /app 
RUN make /app 
CMD python /app/app.py 

は、4つの別個の層を含ん

dockerfile。最後の行だけを変更した場合は、そのレイヤーとその下位のレイヤーだけを転送する必要があります。押すか引っ張ると、レイヤーの隣にある4b0ba2c4050a: Already existsがキャッシュから使用されています。 この方法に従えば、より小さな画像になることはありませんが、それぞれの変更に対して大きな画像を引き出す必要はありません。これは、他の1アプリで、そのうちの一つは、依存関係になり、2層のドッキングウィンドウのイメージを構築します

let 
    deps = pkgs.dockerTools.buildImage { 
    name = "deps"; 
    content = [ list of all deps here ]; 
}; 
in pkgs.dockertools.buildImage { 
    name = "app"; 
    fromImage = deps; 
} 

:ビットをグーグルで、私は、このソリューションで終わったdockerToolsコードを読んだ後

関連する問題