Spaces:
Running
Running
| ## syntax=docker/dockerfile:1.1.7-experimental | |
| ################ | |
| # Base builder # | |
| ################ | |
| FROM python:3.10-bookworm as base_build | |
| ENV \ | |
| # locale environment variables | |
| LC_ALL=C.UTF-8 \ | |
| # python environemnt variables | |
| PYTHONFAULTHANDLER=1 \ | |
| PYTHONUNBUFFERED=1 \ | |
| PYTHONHASHSEED=random \ | |
| # pip environmental variables | |
| PIP_NO_CACHE_DIR=off \ | |
| PIP_DISABLE_PIP_VERSION_CHECK=on \ | |
| PIP_DEFAULT_TIMEOUT=100 \ | |
| # poetry version | |
| POETRY_VERSION=1.5.0 | |
| # Install requirements | |
| RUN apt-get update && apt-get install -y \ | |
| curl \ | |
| git \ | |
| bash \ | |
| build-essential \ | |
| libffi-dev \ | |
| libssl-dev \ | |
| tini \ | |
| openssh-client \ | |
| cargo \ | |
| musl-dev \ | |
| libzbar0 \ | |
| && apt-get autoremove -y \ | |
| && rm -rf /var/lib/apt/lists/* \ | |
| # github ssh key setting | |
| && mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com | sort > ~/.ssh/known_hosts \ | |
| # Installing poetry and set the PATH | |
| && curl -sSL https://install.python-poetry.org | python3 - \ | |
| && echo 'export PATH="/root/.local/bin:$PATH"' >>/root/.profile \ | |
| && export PATH="/root/.local/bin:$PATH" \ | |
| && true | |
| SHELL ["/bin/bash", "-lc"] | |
| # Copy poetry lock and pyproject config files to the container | |
| WORKDIR /pysetup | |
| COPY ./poetry.lock ./pyproject.toml /pysetup/ | |
| # Install pip/wheel/virtualenv and build the wheels based on the poetry lock | |
| RUN --mount=type=ssh pip3 install wheel virtualenv poetry-plugin-export \ | |
| && poetry export -f requirements.txt --without-hashes -o /tmp/requirements.txt \ | |
| && pip3 wheel --wheel-dir=/tmp/wheelhouse --trusted-host 172.17.0.1 --find-links=http://172.17.0.1:3141/debian/ -r /tmp/requirements.txt \ | |
| && virtualenv /.venv && source /.venv/bin/activate && echo 'source /.venv/bin/activate' >>/root/.profile \ | |
| && pip3 install --no-deps --trusted-host 172.17.0.1 --find-links=http://172.17.0.1:3141/debian/ --find-links=/tmp/wheelhouse/ /tmp/wheelhouse/*.whl \ | |
| && true | |
| ########################### | |
| # Production base builder # | |
| ########################### | |
| FROM base_build as production_build | |
| # Copy entrypoint script to the container and src files to the app directory | |
| COPY ./docker/entrypoint.sh /docker-entrypoint.sh | |
| COPY . /app/ | |
| WORKDIR /app | |
| # Build the wheel packages with poetry and add them to the wheelhouse | |
| RUN --mount=type=ssh source /.venv/bin/activate \ | |
| && poetry build -f wheel --no-interaction --no-ansi \ | |
| && cp dist/*.whl /tmp/wheelhouse \ | |
| && chmod a+x /docker-entrypoint.sh \ | |
| && true | |
| ######################## | |
| # Production Container # | |
| ######################## | |
| FROM python:3.10-bookworm as production | |
| COPY --from=production_build /tmp/wheelhouse /tmp/wheelhouse | |
| COPY --from=production_build /docker-entrypoint.sh /docker-entrypoint.sh | |
| WORKDIR /app | |
| # Install system level deps for running the package and install the wheels we built in the previous step. | |
| RUN --mount=type=ssh apt-get update && apt-get install -y \ | |
| bash \ | |
| libffi8 \ | |
| libgl1 \ | |
| tini \ | |
| libzbar0 \ | |
| && apt-get autoremove -y \ | |
| && rm -rf /var/lib/apt/lists/* \ | |
| && chmod a+x /docker-entrypoint.sh \ | |
| && WHEELFILE=`echo /tmp/wheelhouse/deep_barcode_reader-*.whl` \ | |
| && pip3 install --trusted-host 172.17.0.1 --find-links=http://172.17.0.1:3141/debian/ --find-links=/tmp/wheelhouse/ "$WHEELFILE"[all] \ | |
| && rm -rf /tmp/wheelhouse/ \ | |
| && true | |
| ENTRYPOINT ["/usr/bin/tini", "--", "/docker-entrypoint.sh"] | |
| ############################ | |
| # Development base builder # | |
| ############################ | |
| FROM base_build as development_build | |
| # Copy src to app directory | |
| COPY . /app | |
| WORKDIR /app | |
| # Install dependencies from poetry lock | |
| RUN --mount=type=ssh source /.venv/bin/activate \ | |
| && apt-get update && apt-get install -y libgl1 libzbar0 \ | |
| && export PIP_FIND_LINKS=http://172.17.0.1:3141/debian/ \ | |
| && export PIP_TRUSTED_HOST=172.17.0.1 \ | |
| && pip3 install nvidia-cublas-cu12 nvidia-cusparse-cu12 triton nvidia-nccl-cu12 nvidia-cudnn-cu12 nvidia-cufft-cu12 nvidia-cusolver-cu12 \ | |
| && poetry install --no-interaction --no-ansi \ | |
| && true | |
| ################### | |
| # Tests Container # | |
| ################### | |
| FROM development_build as test | |
| RUN --mount=type=ssh source /.venv/bin/activate \ | |
| && chmod a+x docker/*.sh \ | |
| && docker/pre_commit_init.sh \ | |
| && true | |
| ENTRYPOINT ["/usr/bin/tini", "--", "docker/entrypoint-test.sh"] | |
| ######################### | |
| # Development Container # | |
| ######################### | |
| FROM development_build as development | |
| RUN apt-get update && apt-get install -y zsh libzbar0 \ | |
| && sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" \ | |
| && echo "if [ \"\$NO_WHEELHOUSE\" = \"1\" ]" >>/root/.profile \ | |
| && echo "then" >>/root/.profile \ | |
| && echo " echo \"Wheelhouse disabled\"" >>/root/.profile \ | |
| && echo "else">>/root/.profile \ | |
| && echo " export PIP_TRUSTED_HOST=172.17.0.1" >>/root/.profile \ | |
| && echo " export PIP_FIND_LINKS=http://172.17.0.1:3141/debian/" >>/root/.profile \ | |
| && echo "fi" >>/root/.profile \ | |
| && echo "source /root/.profile" >>/root/.zshrc \ | |
| && pip3 install git-up \ | |
| && true | |
| ENTRYPOINT ["/bin/zsh", "-l"] | |