2016-06-21 1 views
0

Docker에서 캐싱이 어떻게 작동하는지 정확히 알지 못하기 때문에 Docker 파일에서이 섹션을 매번 다시 작성하지 않는 방법으로 어떻게 수정할 수 있습니까?Docker 파일의 특정 부분을 다시 작성하지 못하도록 방지합니다.

# INSTALL OPENCV 3.1 
WORKDIR /root 
RUN wget https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip -O opencv_contrib-3.1.0.zip -nv && \ 
    unzip opencv_contrib-3.1.0.zip && \ 
    rm -f /root/opencv_contrib-3.1.0.zip && \ 
    wget https://github.com/Itseez/opencv/archive/3.1.0.zip -O opencv-3.1.0.zip -nv && \ 
    unzip opencv-3.1.0.zip && \ 
    rm -f /root/opencv-3.1.0.zip 

RUN export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:/usr/local/cuda-7.0/lib:$LD_LIBRARY_PATH 

WORKDIR /root/opencv-3.1.0 

RUN mkdir build && cd build && \ 
    cmake -D CUDA_ARCH_BIN=3.2 \ 
    -D CUDA_ARCH_PTX=3.2 \ 
    -D CMAKE_BUILD_TYPE=RELEASE \ 
    -D CMAKE_INSTALL_PREFIX=/usr/local \ 
    -D WITH_TBB=ON \ 
    -D BUILD_NEW_PYTHON_SUPPORT=ON \ 
    -D WITH_V4L=ON \ 
    -D BUILD_TIFF=ON \ 
    -D WITH_QT=ON \ 
# -D USE_GStreamer=ON \ 
    -D WITH_OPENGL=ON \ 
    -D WITH_IPP=ON \ 
    -D OPENCV_EXTRA_MODULES_PATH=/root/opencv_contrib-3.1.0/modules \ 
    -D BUILD_opencv_legacy=OFF .. && \ 
    make -j8 && \ 
    make install && \ 
    echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/opencv.conf && \ 
    ldconfig && \ 
    cp /root/opencv-3.1.0/build/lib/cv2.so /usr/lib/python2.7/dist-packages/cv2.so 

RUN rm -rf /root/opencv-3.1.0 /root/opencv_contrib-3.1.0 # cleanup 
+1

도커 컨테이너를 만들 때 이미 빌드 이미지와 새 이미지 사이의 차이를 확인하십시오. 즉, 변경되지 않는 파일이 먼저 캐시되는 방식으로 도커 파일을 작성해야합니다. 예를 들어 모든 종속성을 얻고 결국 코드를 ​​사용하여 파일을 추가하십시오. 꽤 자주 바뀔 것이라고 – Tomas

+0

Dockerfile의이 섹션은 변경된 적이 없으며 다운로드 할 OpenCV 버전을 수정했습니다. –

답변

0

저는 결정 론적이지 않은 빌드 타임 변수 인 $ LD_LIBRARY_PATH에 의존하고 있다고 생각합니다. 달러 기호를 이스케이프 처리하십시오 : \ $ LD_LIBRARY_PATH

관련 문제