| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | FROM nvidia/cuda:11.7.0-cudnn8-runtime-ubuntu20.04# ensure local python is preferred over distribution pythonENV PATH /usr/local/bin:$PATH# http://bugs.python.org/issue19846# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK.ENV LANG C.UTF-8RUN apt-get update# runtime dependenciesRUN set -eux; \  	apt-get install -y  \		ca-certificates \		tzdata \	;ENV GPG_KEY A035C8C19219BA821ECEA86B64E628F8D684696DENV PYTHON_VERSION 3.10.10RUN apt-get update && \    set -eux; \	  \	  apt-get install -y \    build-essential\    wget \    curl \		tar \    xz-utils\		make \    cmake \    zlib1g-dev \    libssl-dev \    libssl1.1 || sudo apt install libssl1.0 \    software-properties-common \    libgl1-mesa-glx libsm6 libxrender1 libxext-dev\	  ; \	\	wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; \	wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; \	GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \	gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; \	gpg --batch --verify python.tar.xz.asc python.tar.xz; \	command -v gpgconf > /dev/null && gpgconf --kill all || :; \	rm -rf "$GNUPGHOME" python.tar.xz.asc; \	mkdir -p /usr/src/python; \	tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; \	rm python.tar.xz; \	\	cd /usr/src/python; \	# gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \	./configure \		#--build="$gnuArch" \		--enable-loadable-sqlite-extensions \		--enable-optimizations \		--enable-option-checking=fatal \		--enable-shared \		--with-lto \		--with-system-expat \		--without-ensurepip \	; \	nproc="$(nproc)"; \# set thread stack size to 1MB so we don't segfault before we hit sys.getrecursionlimit()# https://github.com/alpinelinux/aports/commit/2026e1259422d4e0cf92391ca2d3844356c649d0	EXTRA_CFLAGS="-DTHREAD_STACK_SIZE=0x100000"; \	LDFLAGS="-Wl,--strip-all"; \	make -j "$nproc" \		"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" \		"LDFLAGS=${LDFLAGS:-}" \		"PROFILE_TASK=${PROFILE_TASK:-}" \	; \# https://github.com/docker-library/python/issues/784# prevent accidental usage of a system installed libpython of the same version	rm python; \	make -j "$nproc" \		"EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" \		"LDFLAGS=${LDFLAGS:--Wl},-rpath='\$\$ORIGIN/../lib'" \		"PROFILE_TASK=${PROFILE_TASK:-}" \		python \	; \	make install; \	\	cd /; \	rm -rf /usr/src/python; \	\	find /usr/local -depth \		\( \			\( -type d -a \( -name test -o -name tests -o -name idle_test \) \) \			-o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \		\) -exec rm -rf '{}' + \	; \	\	find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec scanelf --needed --nobanner --format '%n#p' '{}' ';' \		| tr ',' '\n' \		| sort -u \		| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \		| xargs -rt apk add --no-network --virtual .python-rundeps \	; \	# apk del --no-network .build-deps; \	\	python3 --version# make some useful symlinks that are expected to exist ("/usr/local/bin/python" and friends)RUN set -eux; \	for src in idle3 pydoc3 python3 python3-config; do \		dst="$(echo "$src" | tr -d 3)"; \		[ -s "/usr/local/bin/$src" ]; \		[ ! -e "/usr/local/bin/$dst" ]; \		ln -svT "$src" "/usr/local/bin/$dst"; \	done# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'"ENV PYTHON_PIP_VERSION 22.3.1# https://github.com/docker-library/python/issues/365ENV PYTHON_SETUPTOOLS_VERSION 65.5.1# https://github.com/pypa/get-pipENV PYTHON_GET_PIP_URL https://github.com/pypa/get-pip/raw/1a96dc5acd0303c4700e02655aefd3bc68c78958/public/get-pip.pyENV PYTHON_GET_PIP_SHA256 d1d09b0f9e745610657a528689ba3ea44a73bd19c60f4c954271b790c71c2653RUN curl -O https://bootstrap.pypa.io/get-pip.py && \    python get-pip.py && \    rm get-pip.py \    \	pip --versionRUN sed -i 's/^#force_color_prompt=yes/force_color_prompt=yes/' ~/.bashrc && \    # above enable color prompt of docker in terminal    # set alias    echo "alias nv='nvidia-smi'" >> ~/.bash_aliases && \    echo "alias wnv='watch -n 1 nvidia-smi'" >> ~/.bash_aliases && \    echo "alias wwnv='watch -n 0.1 nvidia-smi'" >> ~/.bash_aliases    RUN python3 --versionWORKDIR /app/RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/opt/poetry python3 && \    cd /usr/local/bin && \    ln -s /opt/poetry/bin/poetry && \    poetry config virtualenvs.create falseCOPY ./app/gpuproject.toml /app/pyproject.tomlARG INSTALL_DEV=falseRUN bash -c "if [ $INSTALL_DEV == 'true' ] ; then poetry install --no-root ; else poetry install --no-root --no-dev ; fi"ENV C_FORCE_ROOT=1COPY ./app /appWORKDIR /appCOPY /${CELERY_ZIP_STORAGE} /app/${CELERY_ZIP_STORAGE}COPY /${CELERY_ZIP_STORAGE} /app/${CELERY_ZIP_STORAGE}COPY ./app/worker-start.sh /worker-start.shRUN chmod +x /worker-start.shCMD ["bash", "/worker-start.sh"]
 |