背景
- alpineでbazelを使いたい
- デフォルトのapkリポジトリに存在しない1
- Bazeliskはalpineのサポートをしていない
- コンパイルに時間がかかるのでビルド済みdockerイメージとして使えるようにしたい
コンパイルのためのdocker image
./compile.shでコンパイルしているgitリポジトリがあったので、参考に一部拝借・抜粋してdockerfileにしました。
bazel-build
FROM python:3.8-alpine3.11
ARG bazel_ver=3.1.0
ENV JAVA_HOME=/usr/lib/jvm/default-jvm \
PATH="$JAVA_HOME/bin:${PATH}" \
BAZEL_VERSION=3.1.0
RUN apk add --virtual .bazel_build --no-cache g++ gcc \
bash zip unzip cmake make linux-headers openjdk8 && \
wget -q "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-dist.zip" \
-O bazel.zip && \
mkdir "bazel-${BAZEL_VERSION}" && \
unzip -qd "bazel-${BAZEL_VERSION}" bazel.zip && \
rm bazel.zip && \
cd "bazel-${BAZEL_VERSION}" && \
sed -i -e 's/-classpath/-J-Xmx6096m -J-Xms128m -classpath/g' \
scripts/bootstrap/compile.sh && \
EXTRA_BAZEL_ARGS=--host_javabase=@local_jdk//:jdk ./compile.sh && \
cp -p output/bazel /usr/bin/ && \
cd ../ && rm -rf "bazel-${BAZEL_VERSION}" && \
bazel version && \
apk del --purge .bazel_build
あとはdocker build
してpushするだけ
注意点
-
ソースからコンパイルを行う場合は、openjdk11対応していないのでopenjdk8を入れる
-
sed
で置き換えている箇所はJavaのヒープ・メモリのサイズを指定している。指定しないとメモリを食い尽くして途中で落ちるケースがある。
The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space
参考文献
-
apkのtestingリポジトリに存在するが、導入したいモジュールがこのバージョンに対応してないため使用しない ↩