Deep-Barcode-Reader / Dockerfile
afshin-dini's picture
Transfer project
36ccd32
## 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"]