2017-11-24 8 views
0

マイDockerfileがインストールファイルに を削除 ドッカーレイヤーを分割する方法は?

  • をインストールし実行
  • の開梱、いくつかのサードパーティのインストールパッケージ
  • をダウンロード

    RUN echo "Downloading huge file" && \ 
        wget http://server/huge.tar.gz && \ 
        echo "Extracting huge file" && \ 
        tar xzf huge.tar.gz && \ 
        huge/install /opt/myinstall && \ 
        rm -rf huge* 
    

    実は、私は

    1. だように見えます

      Dockerビルドが成功し、新しいコンテナを使用できます。

      Amazon Containerレジストリにプッシュしているときに問題が発生します。

      最後のレイヤーが巨大(約20G)なのでプッシュは拒否されます。

      20Gは実際のインストールサイズなので、少し減らすことができます。

      私の質問は、Amazonのレイヤーサイズの制限に対応するために、レイヤーをいくつかの小さなレイヤーに分割する方法です。

  • 答えて

    1

    各dockerfile命令で新しいレイヤーが作成されます。したがって、解決策は、RUNコマンドを複数のRUNコマンドに分割することです。しかし、タールが非常に大きい場合、このソリューションがあなたのケースで機能するかどうかは確かではありません。層の1つにタールが含まれているためです。それにもかかわらず、あなたはこのアプローチを試みるべきです。

    RUN wget http://server/huge.tar.gz 
    RUN tar xzf huge.tar.gz 
    RUN huge/install /opt/myinstall && \ 
    RUN rm -rf huge* 
    

    docker multistage buildを使用することもできます。アイデアは、別の容器にタールをインストールすることで、あなたのコンテナにインストールディレクトリをコピーします。

    FROM ... as installer 
    RUN echo "Downloading huge file" && \ 
        wget http://server/huge.tar.gz && \ 
        echo "Extracting huge file" && \ 
        tar xzf huge.tar.gz && \ 
        huge/install /opt/myinstall && \ 
        rm -rf huge* 
    
    FROM ... 
    COPY --from=installer /opt/myinstall /opt/myinstall 
    ... 
    

    そのようにあなただけの画像のみをコピー、インストール内の1つの層を持つことになります。

    +1

    多段階ビルドで素晴らしいアイデア!残念ながら、インストールディレクトリは> 10Gですので、/ opt/myinstallを分割する必要があります。 – ilia

    関連する問題