2025-11-25 16:30:45 -06:00
|
|
|
# 1. A: Define a base image
|
2025-11-26 00:31:15 -06:00
|
|
|
# FROM scratch
|
|
|
|
|
# FROM busybox
|
2025-11-25 16:30:45 -06:00
|
|
|
# FROM alpine:3.22.1
|
2025-11-26 00:31:15 -06:00
|
|
|
# FROM alpine:latest
|
|
|
|
|
# FROM python:3.12
|
|
|
|
|
FROM debian:bookworm-slim
|
2025-11-24 17:45:11 -06:00
|
|
|
|
|
|
|
|
# 1. B: Set ENV Variables
|
2025-11-26 00:31:15 -06:00
|
|
|
ENV NVM_VERSION=0.40.3
|
|
|
|
|
ENV NODE_VERSION=24.9.0
|
|
|
|
|
ENV PYTHON_VERSION=3.12.12
|
2025-11-25 16:30:45 -06:00
|
|
|
|
2025-11-26 00:31:15 -06:00
|
|
|
ENV NVM_DIR="/root/.nvm"
|
2025-11-25 16:30:45 -06:00
|
|
|
ENV PYENV_ROOT="/opt/pyenv"
|
2025-11-26 00:31:15 -06:00
|
|
|
ENV JEXTRACT_PATH="/opt/jextract"
|
|
|
|
|
ENV JAVA_LS_PATH="/opt/java-language-server"
|
|
|
|
|
ENV JDTLS_PATH="/opt/jdtls"
|
|
|
|
|
ENV MAVEN_PATH="/opt/maven"
|
|
|
|
|
ENV JAVA_HOME="/opt/jdk"
|
2025-11-25 16:30:45 -06:00
|
|
|
|
2025-11-26 00:31:15 -06:00
|
|
|
ENV PATH="${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}"
|
2025-11-25 16:30:45 -06:00
|
|
|
ENV PATH="${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}"
|
2025-11-26 00:31:15 -06:00
|
|
|
ENV PATH="${JEXTRACT_PATH}/bin:${PATH}"
|
|
|
|
|
ENV PATH="${JAVA_LS_PATH}/:${PATH}"
|
|
|
|
|
ENV PATH="${JDTLS_PATH}/bin:${PATH}"
|
|
|
|
|
ENV PATH="${MAVEN_PATH}/bin:${PATH}"
|
|
|
|
|
ENV PATH="${JAVA_HOME}/bin:${PATH}"
|
2025-11-24 17:45:11 -06:00
|
|
|
|
2025-11-26 00:31:15 -06:00
|
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
|
|
|
|
ENV PYTHONUNBUFFERED=1
|
2025-11-24 17:45:11 -06:00
|
|
|
|
|
|
|
|
# 2. Set the working directory inside the container
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
# 3. Copy the requirements and src files
|
|
|
|
|
COPY requirements.txt .
|
|
|
|
|
COPY package.json .
|
|
|
|
|
COPY src/* .
|
2025-11-26 00:31:15 -06:00
|
|
|
COPY Docker/scripts/run.sh .
|
|
|
|
|
COPY Docker/opt/ /opt/
|
2025-11-24 17:45:11 -06:00
|
|
|
|
2025-11-25 16:30:45 -06:00
|
|
|
# 4. A: Install dependencies
|
|
|
|
|
# RUN apt update
|
2025-11-26 00:31:15 -06:00
|
|
|
# RUN apt install
|
|
|
|
|
RUN apt-get update
|
|
|
|
|
RUN apt-get install \
|
|
|
|
|
--no-install-recommends \
|
|
|
|
|
--no-install-suggests \
|
|
|
|
|
-y \
|
|
|
|
|
pkg-config \
|
|
|
|
|
ca-certificates \
|
|
|
|
|
libreadline-dev \
|
|
|
|
|
liblzma-dev \
|
|
|
|
|
libsqlite3-dev \
|
|
|
|
|
libncurses5-dev \
|
|
|
|
|
libncursesw5-dev \
|
|
|
|
|
libgirepository1.0-dev \
|
|
|
|
|
libssl-dev libcairo2-dev \
|
2025-11-25 16:30:45 -06:00
|
|
|
curl \
|
2025-11-26 16:40:01 -06:00
|
|
|
wget \
|
2025-11-25 16:30:45 -06:00
|
|
|
clang \
|
2025-11-26 16:40:01 -06:00
|
|
|
clangd \
|
2025-11-25 16:30:45 -06:00
|
|
|
gopls \
|
2025-11-26 00:31:15 -06:00
|
|
|
git
|
|
|
|
|
|
|
|
|
|
# RUN apk update
|
|
|
|
|
# RUN apk add --no-cache \
|
|
|
|
|
# nodejs \
|
|
|
|
|
# npm \
|
|
|
|
|
# bash \
|
|
|
|
|
# bash-completion \
|
|
|
|
|
# curl \
|
|
|
|
|
# clang \
|
|
|
|
|
# pkgconf \
|
|
|
|
|
# make \
|
|
|
|
|
# git \
|
|
|
|
|
# gopls \
|
|
|
|
|
# gobject-introspection-dev \
|
|
|
|
|
# cairo-dev
|
2025-11-25 16:30:45 -06:00
|
|
|
|
|
|
|
|
RUN curl -fsSL https://pyenv.run | bash
|
|
|
|
|
RUN pyenv install ${PYTHON_VERSION} && pyenv global ${PYTHON_VERSION} && pyenv local ${PYTHON_VERSION}
|
2025-11-24 17:45:11 -06:00
|
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
|
|
2025-11-26 00:31:15 -06:00
|
|
|
# # 4. B: Install nvm and node
|
|
|
|
|
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v"${NVM_VERSION}"/install.sh | bash
|
|
|
|
|
RUN . "${NVM_DIR}/nvm.sh" && nvm install ${NODE_VERSION}
|
|
|
|
|
RUN . "${NVM_DIR}/nvm.sh" && nvm use v${NODE_VERSION}
|
|
|
|
|
RUN . "${NVM_DIR}/nvm.sh" && nvm alias default v${NODE_VERSION}
|
2025-11-25 16:30:45 -06:00
|
|
|
|
2025-11-24 17:45:11 -06:00
|
|
|
RUN npm install
|
|
|
|
|
|
2025-11-26 00:31:15 -06:00
|
|
|
RUN node --version
|
|
|
|
|
RUN npm --version
|
|
|
|
|
RUN java --version
|
2025-11-25 16:30:45 -06:00
|
|
|
|
2025-11-26 00:31:15 -06:00
|
|
|
# # 5. Cleanup
|
2025-11-25 16:30:45 -06:00
|
|
|
RUN rm -rf /tmp/*
|
2025-11-26 00:31:15 -06:00
|
|
|
RUN rm -rf "${NVM_DIR}/.cache"
|
2025-11-25 16:30:45 -06:00
|
|
|
RUN rm /app/requirements.txt
|
|
|
|
|
|
|
|
|
|
# 6. Expose Port and define the command used to run the app
|
2025-11-24 17:45:11 -06:00
|
|
|
EXPOSE 9999
|
2025-11-26 00:31:15 -06:00
|
|
|
CMD ["/app/run.sh"]
|