Позвольте мне сначала немного очистить этот Dockerfile:
FROM debian:stretch
RUN echo "deb http://ftp.de.debian.org/debian stretch main" >> /etc/apt/source.list
RUN apt-get update -y && apt install -qq -y \
python3-dev libncurses5-dev libxml2-dev \
libedit-dev swig doxygen graphviz xz-utils ninja-build \
openjdk-8-jre openjdk-8-jdk \
xz-utils curl git build-essential wget unzip zip
# Clang 8 as a compiler
RUN curl -SL http://releases.llvm.org/8.0.0/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz \
| tar -xJC . && \
mv clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04 clang_8.0.0 && \
echo 'export PATH=/clang_8.0.0/bin:$PATH' >> ~/.bashrc && \
echo 'export LD_LIBRARY_PATH=/clang_8.0.0/lib:LD_LIBRARY_PATH' >> ~/.bashrc
#install sdkman
RUN ln -fs /bin/bash /bin/sh
RUN curl -s "https://get.sdkman.io" | bash
RUN source "$HOME/.sdkman/bin/sdkman-init.sh"
RUN yes | /bin/bash -l -c 'sdk install gradle 6.1'
RUN mkdir /src /work
WORKDIR /src
ENTRYPOINT gradle build -p /src
Важные биты внизу: он создает каталог /src
и выполняет там gradle build
. Вам остается только сделать этот каталог доступным при сборке.
Если вы создали контейнер один раз с docker build -t my-build-container .
, вы можете запустить его следующим образом:
docker run -v $(pwd):/src my-build-container
В зависимости от ваша система сборки, это может привести к загрязнению вашего исходного дерева различными артефактами сборки, принадлежащими root. Если это так, рассмотрите возможность перехода к сборкам вне дерева, изменив вместо этого рабочий каталог по умолчанию на /work
. Все результаты сборки будут go до /work
, и вы можете извлечь их из контейнера позже.