每次部署到bitbucket时,如何防止docker编译库?是否有任何位桶管道缓存?

我们在docker映像中包含了flask API,将其推送到一个bitbucket存储库,然后一个bitbucket管道开始部署。

一切正常,但是OpenCV的编译平均需要15分钟。

我想知道是否有什么方法可以在每次我们推入bitbucket时避免这种编译。就像缓存一样。

我已经阅读了有关位桶管道上的缓存的信息,但是它没有按我预期的那样工作。

这是我要改进的Dockerfile的一部分:

RUN mkdir /opt && cd /opt && \
  wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
  unzip ${OPENCV_VERSION}.zip && \
  rm -rf ${OPENCV_VERSION}.zip && \
  mkdir -p /opt/opencv-${OPENCV_VERSION}/build && \
  cd /opt/opencv-${OPENCV_VERSION}/build && \
  CXX=/usr/bin/clang++ CC=/usr/bin/clang cmake \
  -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D WITH_FFMPEG=NO \
  -D WITH_IPP=NO \
  -D WITH_OPENEXR=NO \
  -D WITH_TBB=YES \
  -D BUILD_EXAMPLES=NO \
  -D BUILD_ANDROID_EXAMPLES=NO \
  -D INSTALL_PYTHON_EXAMPLES=NO \
  -D BUILD_DOCS=NO \
  -D BUILD_opencv_python2=NO \
  -D BUILD_opencv_python3=ON \
  -D ENABLE_PYTHON3=ON \
  -D PYTHON3_EXECUTABLE=/usr/bin/python3 \  
  .. && \
  make VERBOSE=1 -j8 && \
  make && \
  make install && \
  rm -rf /opt/opencv-${OPENCV_VERSION}

我希望有一些解决方案,例如仅指向OpenCV Api的预编译版本。

zhb6434513 回答:每次部署到bitbucket时,如何防止docker编译库?是否有任何位桶管道缓存?

我最近遇到了这个问题,并同意缓存似乎无法按预期工作。但是,如果不查看整个Dockerfile,很难说。 ADDCOPY会使缓存无效,因此,如果可以的话,建议您在添加任何文件之前将本部分移至顶部。

更好的解决方案(如果没有预编译版本)是使用基本映像的概念,这是我将构建时间减少一半的方法。基本上,您将构建一个基础映像flask-api-base,该映像将安装所有软件包并编译OpenCV,然后实际的最终映像将提取FROM flask-api-base:latest并构建您的应用程序特定代码。请记住,如果基础映像发生更改,则可能需要擦除Bitbucket缓存。

,

我不熟悉OpenCV,但是假设,如果有可以使用的二进制文件,那将是理想的选择。

我很好奇为什么没有在构建之间缓存该层(RUN ...)。看来您正在将OpenCV的构造与Dockerfile中的其他语句完全分开,因此,此RUN应该会生成一个稳定的独特层,从而可在各个版本之间重复使用。

此语句是否发生在例如RUN条语句会更改吗?如果是这样,您可能需要重新排序此语句并将其更早地放置在Dockerfile中,以便使该层保持不变。有关生成层的Dockerfile语句,请参见best practices

或者,您可以制作一个包含OpenCV的单独映像,然后在代码构建中FROM将该映像select rprawrd_aidy_code as year,sum(rprawrd_accept_amt) from rprawrd where rprawrd_aidy_code = '1819' group by rprawrd_aidy_code 创建。您可以使用不同的Dockerfile或多阶段构建来执行此操作。这样,包含OpenCV构建的映像将仅根据(您的)需求构建,并在后续构建中重复使用。

HTH!

,

我使用的解决方案是创建自己的映像,将其上传到Docker中心,然后基于该映像创建一个新映像。

因此,第一个docker映像应包含我的系统使用的所有基本库。 第二个具有环境变量和api本身。

本文链接:https://www.f2er.com/3136250.html

大家都在问