perf(docker): improve all images build cache efficiency (#3025)
- Fix .gitattribut -> .gitattributes typo in .dockerignore
- Fix **/*.tar.gz* -> **/*.tar.gz (remove unintended trailing wildcard)
- Remove **/target/dist/ (redundant, already covered by **/target/)
- Restore cron to apt-get install in all 4 Dockerfiles to keep the
existing start-hugegraph.sh -m true monitor path working
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..ee61478
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,60 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# IMPORTANT: .dockerignore does NOT inherit .gitignore — patterns must be restated.
+
+# Build output
+**/target/
+
+# Pre-extracted release dirs / archives
+apache-hugegraph-*/
+**/*.tar
+**/*.tar.gz
+**/*.zip
+**/*.war
+
+# IDE / OS
+.idea/
+.vscode/
+**/*.iml
+**/*.iws
+**/.DS_Store
+
+# Build / runtime artifacts
+**/logs/
+**/*.log
+**/*.class
+**/gen-java/
+**/upload-files/
+**/build/
+**/node_modules/
+
+# Env files
+.env.local
+.env.*.local
+
+# Git internals
+.git
+.gitignore
+.gitattributes
+.github
+
+# Compose / docs not needed in build context
+**/docker-compose*.yml
+**/docker-compose*.yaml
+**/*.md
+docs/
diff --git a/.github/workflows/docker-build-ci.yml b/.github/workflows/docker-build-ci.yml
new file mode 100644
index 0000000..2d88b72
--- /dev/null
+++ b/.github/workflows/docker-build-ci.yml
@@ -0,0 +1,48 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: "Docker Build CI"
+
+on:
+ push:
+ branches:
+ - master
+ - 'release-*'
+ pull_request:
+ paths:
+ - '**/Dockerfile*'
+ - '.dockerignore'
+
+jobs:
+ docker-build:
+ runs-on: ubuntu-24.04
+ strategy:
+ fail-fast: false
+ matrix:
+ dockerfile:
+ - hugegraph-pd/Dockerfile
+ - hugegraph-store/Dockerfile
+ - hugegraph-server/Dockerfile
+ - hugegraph-server/Dockerfile-hstore
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Build ${{ matrix.dockerfile }}
+ run: |
+ docker build -f ${{ matrix.dockerfile }} .
diff --git a/hugegraph-pd/Dockerfile b/hugegraph-pd/Dockerfile
index 3c00093..41cac1a 100644
--- a/hugegraph-pd/Dockerfile
+++ b/hugegraph-pd/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -19,12 +20,15 @@
# 1st stage: build source code
FROM maven:3.9.0-eclipse-temurin-11 AS build
-COPY . /pkg
WORKDIR /pkg
+
+COPY . .
+
ARG MAVEN_ARGS
-RUN mvn package $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true -Dmaven.javadoc.skip=true && pwd && ls -l && rm \
- ./hugegraph-server/*.tar.gz && rm ./hugegraph-pd/*.tar.gz && rm ./hugegraph-store/*.tar.gz
+RUN --mount=type=cache,target=/root/.m2 \
+ mvn package $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true -Dmaven.javadoc.skip=true \
+ && rm ./hugegraph-server/*.tar.gz ./hugegraph-pd/*.tar.gz ./hugegraph-store/*.tar.gz
# 2nd stage: runtime env
# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
@@ -38,14 +42,10 @@
HUGEGRAPH_HOME="hugegraph-pd" \
STDOUT_MODE="true"
-#COPY . /hugegraph/hugegraph-pd
WORKDIR /hugegraph-pd/
-# 1. Install environment and init HugeGraph Sever
-RUN set -x \
- && rm /var/lib/dpkg/info/libc-bin.* \
- && apt-get -q clean \
- && apt-get -q update \
+# 1. Install runtime dependencies
+RUN apt-get -q update \
&& apt-get -q install -y --no-install-recommends --no-install-suggests \
dumb-init \
procps \
@@ -54,9 +54,7 @@
vim \
cron \
&& apt-get clean \
- && rm -rf /var/lib/apt/lists/* \
- && service cron start \
- && pwd && cd /hugegraph-pd/
+ && rm -rf /var/lib/apt/lists/*
# 2. Init docker script
COPY hugegraph-pd/hg-pd-dist/docker/docker-entrypoint.sh .
diff --git a/hugegraph-server/Dockerfile b/hugegraph-server/Dockerfile
index be316b8..4b06bda 100644
--- a/hugegraph-server/Dockerfile
+++ b/hugegraph-server/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -19,15 +20,18 @@
# 1st stage: build source code
FROM maven:3.9.0-eclipse-temurin-11 AS build
-COPY . /pkg
WORKDIR /pkg
+
+COPY . .
+
ARG MAVEN_ARGS
-RUN mvn package $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true -Dmaven.javadoc.skip=true && pwd && ls -l && rm \
- ./hugegraph-server/*.tar.gz && rm ./hugegraph-pd/*.tar.gz && rm ./hugegraph-store/*.tar.gz
+RUN --mount=type=cache,target=/root/.m2 \
+ mvn package $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true -Dmaven.javadoc.skip=true \
+ && rm ./hugegraph-server/*.tar.gz ./hugegraph-pd/*.tar.gz ./hugegraph-store/*.tar.gz
# 2nd stage: runtime env
-# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
+# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
FROM eclipse-temurin:11-jre-jammy
COPY --from=build /pkg/hugegraph-server/apache-hugegraph-server-*/ /hugegraph-server/
@@ -39,14 +43,10 @@
HUGEGRAPH_HOME="hugegraph-server" \
STDOUT_MODE="true"
-#COPY . /hugegraph/hugegraph-server
WORKDIR /hugegraph-server/
-# 1. Install environment and init HugeGraph Sever
-RUN set -x \
- && rm /var/lib/dpkg/info/libc-bin.* \
- && apt-get -q clean \
- && apt-get -q update \
+# 1. Install runtime dependencies and configure server
+RUN apt-get -q update \
&& apt-get -q install -y --no-install-recommends --no-install-suggests \
dumb-init \
procps \
@@ -56,8 +56,6 @@
cron \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
- && service cron start \
- && pwd && cd /hugegraph-server/ \
&& sed -i "s/^restserver.url.*$/restserver.url=http:\/\/0.0.0.0:8080/g" ./conf/rest-server.properties
# 2. Init docker script
diff --git a/hugegraph-server/Dockerfile-hstore b/hugegraph-server/Dockerfile-hstore
index 2c6e4b1..54494db 100644
--- a/hugegraph-server/Dockerfile-hstore
+++ b/hugegraph-server/Dockerfile-hstore
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -15,19 +16,22 @@
# limitations under the License.
#
-# Dockerfile for HugeGraph Server
+# Dockerfile for HugeGraph Server (hstore backend)
# 1st stage: build source code
FROM maven:3.9.0-eclipse-temurin-11 AS build
-COPY . /pkg
WORKDIR /pkg
+
+COPY . .
+
ARG MAVEN_ARGS
-RUN mvn package $MAVEN_ARGS -e -B -ntp -DskipTests -Dmaven.javadoc.skip=true && pwd && ls -l && rm \
- ./hugegraph-server/*.tar.gz && rm ./hugegraph-pd/*.tar.gz && rm ./hugegraph-store/*.tar.gz
+RUN --mount=type=cache,target=/root/.m2 \
+ mvn package $MAVEN_ARGS -e -B -ntp -DskipTests -Dmaven.javadoc.skip=true \
+ && rm ./hugegraph-server/*.tar.gz ./hugegraph-pd/*.tar.gz ./hugegraph-store/*.tar.gz
# 2nd stage: runtime env
-# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
+# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
FROM eclipse-temurin:11-jre-jammy
COPY --from=build /pkg/hugegraph-server/apache-hugegraph-server-*/ /hugegraph-server/
@@ -41,12 +45,10 @@
ENV JAVA_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseContainerSupport -XX:MaxRAMPercentage=50 -XshowSettings:vm" \
HUGEGRAPH_HOME="hugegraph-server"
-#COPY . /hugegraph/hugegraph-server
WORKDIR /hugegraph-server/
-# 1. Install environment and init HugeGraph Sever
-RUN set -x \
- && apt-get -q update \
+# 1. Install runtime dependencies and configure server
+RUN apt-get -q update \
&& apt-get -q install -y --no-install-recommends --no-install-suggests \
dumb-init \
procps \
@@ -56,8 +58,6 @@
cron \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
- && service cron start \
- && pwd && cd /hugegraph-server/ \
&& sed -i "s/^restserver.url.*$/restserver.url=http:\/\/0.0.0.0:8080/g" ./conf/rest-server.properties
# 2. Init docker script
diff --git a/hugegraph-store/Dockerfile b/hugegraph-store/Dockerfile
index 902043f..5883f9c 100644
--- a/hugegraph-store/Dockerfile
+++ b/hugegraph-store/Dockerfile
@@ -1,3 +1,4 @@
+# syntax=docker/dockerfile:1
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -19,12 +20,15 @@
# 1st stage: build source code
FROM maven:3.9.0-eclipse-temurin-11 AS build
-COPY . /pkg
WORKDIR /pkg
+
+COPY . .
+
ARG MAVEN_ARGS
-RUN mvn package $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true -Dmaven.javadoc.skip=true && pwd && ls -l && rm \
- ./hugegraph-server/*.tar.gz && rm ./hugegraph-pd/*.tar.gz && rm ./hugegraph-store/*.tar.gz
+RUN --mount=type=cache,target=/root/.m2 \
+ mvn package $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true -Dmaven.javadoc.skip=true \
+ && rm ./hugegraph-server/*.tar.gz ./hugegraph-pd/*.tar.gz ./hugegraph-store/*.tar.gz
# 2nd stage: runtime env
# Note: ZGC (The Z Garbage Collector) is only supported on ARM-Mac with java > 13
@@ -38,14 +42,10 @@
HUGEGRAPH_HOME="hugegraph-store" \
STDOUT_MODE="true"
-#COPY . /hugegraph/hugegraph-store
WORKDIR /hugegraph-store/
-# 1. Install environment and init HugeGraph Sever
-RUN set -x \
- && rm /var/lib/dpkg/info/libc-bin.* \
- && apt-get -q clean \
- && apt-get -q update \
+# 1. Install runtime dependencies
+RUN apt-get -q update \
&& apt-get -q install -y --no-install-recommends --no-install-suggests \
dumb-init \
procps \
@@ -54,9 +54,7 @@
vim \
cron \
&& apt-get clean \
- && rm -rf /var/lib/apt/lists/* \
- && service cron start \
- && pwd && cd /hugegraph-store/
+ && rm -rf /var/lib/apt/lists/*
# 2. Init docker script
COPY hugegraph-store/hg-store-dist/docker/docker-entrypoint.sh .