Newer
Older
cactus / Dockerfile
@agalyaramadoss agalyaramadoss on 16 Feb 1 KB added document
FROM maven:3.9-eclipse-temurin-21 AS builder

# Set working directory
WORKDIR /build

# Copy project files
COPY pom.xml .
COPY src ./src

# Build the application
RUN mvn clean package -DskipTests

# Runtime stage
FROM eclipse-temurin:21-jre-jammy

# Metadata
LABEL maintainer="Cube Database Team"
LABEL description="Cube Database - Cassandra-like distributed database"
LABEL version="1.0.0"

# Create application user
RUN groupadd -r cubedb && useradd -r -g cubedb cubedb

# Set working directory
WORKDIR /opt/cube-db

# Copy built JAR from builder stage
COPY --from=builder /build/target/cube-db-1.0.0.jar ./cube-db.jar

# Copy scripts
COPY start.sh ./
COPY run-shell.sh ./
RUN chmod +x *.sh

# Create directories for data and hints
RUN mkdir -p /var/lib/cube/data /var/lib/cube/hints /var/log/cube && \
    chown -R cubedb:cubedb /var/lib/cube /var/log/cube /opt/cube-db

# Switch to non-root user
USER cubedb

# Environment variables with defaults
ENV CUBE_NODE_ID=node-1
ENV CUBE_HOST=0.0.0.0
ENV CUBE_PORT=8080
ENV CUBE_DATA_DIR=/var/lib/cube/data
ENV CUBE_HINTS_DIR=/var/lib/cube/hints
ENV JAVA_OPTS="-Xmx1G -Xms512M"

# Expose ports
EXPOSE 8080

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
  CMD curl -f http://localhost:8080/api/v1/health || exit 1

# Volume for persistent data
VOLUME ["/var/lib/cube/data", "/var/lib/cube/hints"]

# Default command - start the database server
CMD java ${JAVA_OPTS} \
    -Dcube.nodeid=${CUBE_NODE_ID} \
    -Dcube.host=${CUBE_HOST} \
    -Dserver.port=${CUBE_PORT} \
    -Dcube.datadir=${CUBE_DATA_DIR} \
    -Dcube.hints.dir=${CUBE_HINTS_DIR} \
    -jar cube-db.jar