flex-analysis / Dockerfile
baxin's picture
Update Dockerfile
fb2899e verified
# syntax=docker/dockerfile:1
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# -----------------------------
# System deps
# -----------------------------
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \
git \
make \
curl \
ca-certificates \
pkg-config \
libudev-dev \
libsystemd-dev \
&& rm -rf /var/lib/apt/lists/*
# -----------------------------
# Node.js (v22.21.1) via nvm
# -----------------------------
ENV NVM_DIR=/opt/nvm
RUN mkdir -p ${NVM_DIR} \
&& curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
ARG NODE_VERSION=22.21.1
RUN bash -lc ". ${NVM_DIR}/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm alias default ${NODE_VERSION} \
&& nvm use default \
&& node -v \
&& npm -v \
&& npx -v"
ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin:$PATH
# -----------------------------
# uv (system-wide)
# -----------------------------
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
&& install -m 0755 /root/.local/bin/uv /usr/local/bin/uv
ENV UV_PYTHON_INSTALL_DIR=/opt/uv/python
RUN mkdir -p /opt/uv/python \
&& chmod -R 755 /opt/uv
ARG PYTHON_VERSION=3.12.12
RUN uv python install ${PYTHON_VERSION}
# -----------------------------
# Clone Opentrons monorepo
# -----------------------------
ARG OPENTRONS_REF=edge
RUN git clone --depth 1 --branch ${OPENTRONS_REF} https://github.com/Opentrons/opentrons.git /root/opentrons
WORKDIR /root/opentrons
RUN uv run --python ${PYTHON_VERSION} make -C robot-server setup
# -----------------------------
# App user + deps
# -----------------------------
RUN useradd -m -u 1000 user
USER user
ENV HOME=/home/user
ENV UV_CACHE_DIR=/home/user/.cache/uv
WORKDIR $HOME/app
RUN mkdir -p $UV_CACHE_DIR
# install python deps (fastapi/uvicorn含む)
COPY --chown=user requirements.txt $HOME/app/requirements.txt
RUN uv venv --python ${PYTHON_VERSION} .venv \
&& uv pip install --python .venv/bin/python -r requirements.txt
# copy app code (api.py / entrypoint.sh など)
COPY --chown=user . $HOME/app
# -----------------------------
# Entrypoint
# -----------------------------
USER root
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
WORKDIR /root/opentrons
ENV PORT=7860
EXPOSE 7860
ENTRYPOINT ["/bin/bash", "-lc", "/entrypoint.sh"]