2017-10-18 6 views
2

ドッカーの初心者で、ドッキング用のコンテナで開発しようとしています。私はコードの一行の変更を行い、コンテナを再実行しようとするたびに問題を抱えています。ドッカーは、画像を最初から作り直すことになります。 キャッシュを最大限に活用するために、プロジェクトを正しく設定するにはどうすればよいですか?私がソースコードにいくつかの変更を加えるたびに、apt-getpip install(btw私はPythonで開発しています)をすべて再インストールする必要はありません。誰でも私が何が欠けているか考えている。助けをお待ちしています。ドッカーがコードを変更した後に画像を最初から作成しないようにします。

私の現在のドッキングウィンドウのファイル:彼らはもはやキャッシュヒットを持っていないのでDockerfileのキャッシュ休憩したら

FROM tiangolo/uwsgi-nginx-flask:python3.6 

# Copy the current directory contents into the container at /app 
ADD ./app /app 

# Run python's package manager and install the flask package 
RUN apt-get update -y \ 
    && apt-get -y install default-jre \ 
    && apt-get install -y \ 
    build-essential \ 
    gfortran \ 
    libblas-dev \ 
    liblapack-dev \ 
    libxft-dev \ 
    && rm -rf /var/lib/apt/lists/* 

WORKDIR /app 
ADD ./requirements.txt /app/requirements.txt 
RUN pip3 install -r requirements.txt 
+0

推奨読書:[Dockerfilesを書くためのベストプラクティス](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/) – jwodder

+0

コードの場合、ボリュームをコードに指す –

+0

私は生産のためだけにコンテナにコードを含めることを好む。開発のためにコンテナ内にコードをマウントすることができます –

答えて

4

は、次の行のすべてを再構築する必要があります。キャッシュ検索は、キャッシュを再利用するために、既存の以前のレイヤーと同一のコマンド(またはCOPYのようなコンテンツ)を探します。両方が一致しない場合、キャッシュミスが発生し、ビルドステップが実行されます。

FROM tiangolo/uwsgi-nginx-flask:python3.6 

# Run python's package manager and install the flask package 
RUN apt-get update -y \ 
    && apt-get -y install default-jre \ 
    && apt-get install -y \ 
    build-essential \ 
    gfortran \ 
    libblas-dev \ 
    liblapack-dev \ 
    libxft-dev \ 
    && rm -rf /var/lib/apt/lists/* 

WORKDIR /app 
COPY requirements.txt /app/requirements.txt 
RUN pip3 install -r requirements.txt 

# Copy the current directory contents into the container at /app 
COPY app /app 

あなたドンので、私はCOPYにごADDラインをも変更した:あなたのシナリオでは、単に頻繁に変更部分は終わりではなく、ファイルの先頭にあることを確認するために、行を並べ替える必要がありますADDによって提供される特別な機能が必要ありません。

開発中は、コードを変更するたびにイメージを再構築する必要がないように、アプリケーションをコンテナにボリュームとしてマウントすることをおすすめします。 COPY app /appをDockerfileの中に残すことができ、ボリュームマウントはディレクトリに重なるだけで、その場所の画像には何も隠します。変更を取り込むためにコンテナを再起動する必要があります。終了すると、ビルドによって開発環境と同じように見えるイメージが作成されます。

+0

これは完全に動作します。本当にありがとう。 *ボリュームマウント*は、開発のための非常に良い戦略のようです。 – Psidom

関連する問題