# 1. A: Define a base image # FROM scratch # FROM busybox # FROM alpine:3.22.1 # FROM alpine:latest # FROM python:3.12 FROM debian:bookworm-slim # 1. B: Set ENV Variables ENV NVM_VERSION=0.40.3 ENV NODE_VERSION=24.9.0 ENV PYTHON_VERSION=3.12.12 ENV NVM_DIR="/root/.nvm" ENV PYENV_ROOT="/opt/pyenv" 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" ENV PATH="${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}" ENV PATH="${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}" 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}" ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # 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/* . COPY Docker/scripts/run.sh . COPY Docker/opt/ /opt/ COPY Docker/env/* /home/abaddon/ # 4. A: Install dependencies # RUN apt update # RUN apt install RUN apt-get update RUN apt-get install -y \ --no-install-recommends \ --no-install-suggests \ pkg-config \ ca-certificates \ libreadline-dev \ liblzma-dev \ libsqlite3-dev \ libncurses5-dev \ libncursesw5-dev \ libgirepository1.0-dev \ libssl-dev libcairo2-dev \ bash-completion \ parallel \ 7zip \ zip \ tar \ curl \ wget \ git \ clang \ clangd \ gdb \ php \ gopls \ htop \ ranger \ nano \ fzf \ bat \ less \ tree \ ripgrep # RUN apk update # RUN apk add --no-cache \ # nodejs \ # npm \ # bash \ # bash-completion \ # curl \ # clang \ # pkgconf \ # make \ # git \ # gopls \ # gobject-introspection-dev \ # cairo-dev RUN curl -fsSL https://pyenv.run | bash RUN pyenv install ${PYTHON_VERSION} && pyenv global ${PYTHON_VERSION} && pyenv local ${PYTHON_VERSION} RUN pip install --no-cache-dir -r requirements.txt # # 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} RUN npm install RUN node --version RUN npm --version RUN java --version # # 5. Cleanup RUN rm -rf /tmp/* RUN rm -rf "${NVM_DIR}/.cache" RUN rm /app/requirements.txt # 6. Expose Port and define the command used to run the app EXPOSE 9999 CMD ["/app/run.sh"]