Spaces:
Running
Running
File size: 5,186 Bytes
36ccd32 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
## 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"]
|