多阶段 docker 构建,防止特定阶段的并发
Multi-stage docker build, prevent concurency for specific stage
在 docker 多阶段构建中,如何防止其他阶段 运行 与特定阶段并行?
我有一个多级 Dockerfile。
其中一个阶段构建 opencv 堆栈。
FROM node:12.22.1 AS client_build
COPY client/package*.json .
RUN npm install
RUN npm run build
FROM pkg_builder AS open_cv_builder
ARG PYTHON_VERSION
RUN cd ~ && \
python${PYTHON_VERSION} -m pip install numpy==1.18.2 && \
cd ~ && \
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.4.zip && \
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.4.zip && \
unzip opencv.zip && mv opencv-3.4.4 opencv && \
unzip opencv_contrib.zip && mv opencv_contrib-3.4.4 opencv_contrib && \
cd opencv && mkdir build && cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D PYTHON_EXECUTABLE=python${PYTHON_VERSION} \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF .. && \
make -j8 && make install && sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf' && ldconfig
FROM python_runtime as main
...
COPY --from=client build /dist/* /dist
COPY --from=open_cv_builder /usr/local/python/cv2/python-${PYTHON_VERSION}/cv2.cpython-${PYTHON_VERSION_RAW}m-x86_64-linux-gnu.so /usr/local/lib/python${PYTHON_VERSION}/dist-packages/cv2.so
COPY --from=open_cv_builder /usr/local/python/cv2/python-${PYTHON_VERSION}/cv2.cpython-${PYTHON_VERSION_RAW}m-x86_64-linux-gnu.so /usr/local/lib/python${PYTHON_VERSION}/dist-packages/
此阶段使用所有内核进行构建。
如果其他阶段 运行 并行,它们会冻结并通常会在命令(wget、apt 等)上超时。
我想在这个阶段 运行s 时阻止其他阶段 运行ning。
最近在 PR #2049. With docker buildx create
的 buildkit 中添加了并发限制,您可以传递一个包含 max-parallelism
选项的配置文件来限制并发步骤。
在 docker 多阶段构建中,如何防止其他阶段 运行 与特定阶段并行?
我有一个多级 Dockerfile。 其中一个阶段构建 opencv 堆栈。
FROM node:12.22.1 AS client_build
COPY client/package*.json .
RUN npm install
RUN npm run build
FROM pkg_builder AS open_cv_builder
ARG PYTHON_VERSION
RUN cd ~ && \
python${PYTHON_VERSION} -m pip install numpy==1.18.2 && \
cd ~ && \
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.4.zip && \
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.4.zip && \
unzip opencv.zip && mv opencv-3.4.4 opencv && \
unzip opencv_contrib.zip && mv opencv_contrib-3.4.4 opencv_contrib && \
cd opencv && mkdir build && cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D PYTHON_EXECUTABLE=python${PYTHON_VERSION} \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF .. && \
make -j8 && make install && sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf' && ldconfig
FROM python_runtime as main
...
COPY --from=client build /dist/* /dist
COPY --from=open_cv_builder /usr/local/python/cv2/python-${PYTHON_VERSION}/cv2.cpython-${PYTHON_VERSION_RAW}m-x86_64-linux-gnu.so /usr/local/lib/python${PYTHON_VERSION}/dist-packages/cv2.so
COPY --from=open_cv_builder /usr/local/python/cv2/python-${PYTHON_VERSION}/cv2.cpython-${PYTHON_VERSION_RAW}m-x86_64-linux-gnu.so /usr/local/lib/python${PYTHON_VERSION}/dist-packages/
此阶段使用所有内核进行构建。
如果其他阶段 运行 并行,它们会冻结并通常会在命令(wget、apt 等)上超时。
我想在这个阶段 运行s 时阻止其他阶段 运行ning。
最近在 PR #2049. With docker buildx create
的 buildkit 中添加了并发限制,您可以传递一个包含 max-parallelism
选项的配置文件来限制并发步骤。