Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #https://github.com/docker-library/python/blob/a1af335ee34324b2f40d7e90345f9468328f6a00/3.12-rc/slim-bullseye/Dockerfile
- FROM alpine:3.17
- # ensure local python is preferred over distribution python
- ENV 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-8
- # runtime dependencies
- RUN set -eux; \
- apk add --no-cache \
- ca-certificates \
- tzdata \
- ;
- ENV GPG_KEY A035C8C19219BA821ECEA86B64E628F8D684696D
- ENV PYTHON_VERSION 3.11.1
- RUN set -eux; \
- \
- apk add --no-cache --virtual .build-deps \
- gnupg \
- tar \
- xz \
- \
- bluez-dev \
- bzip2-dev \
- dpkg-dev dpkg \
- expat-dev \
- findutils \
- gcc \
- gdbm-dev \
- libc-dev \
- libffi-dev \
- libnsl-dev \
- libtirpc-dev \
- linux-headers \
- make \
- ncurses-dev \
- openssl-dev \
- patchelf \
- pax-utils \
- readline-dev \
- sqlite-dev \
- tcl-dev \
- tk \
- tk-dev \
- util-linux-dev \
- xz-dev \
- zlib-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)"; \
- make -j "$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 install; \
- \
- # https://github.com/docker-library/python/issues/784
- # prevent accidental usage of a system installed libpython of the same version
- bin="$(readlink -vf /usr/local/bin/python3)"; \
- patchelf --set-rpath '$ORIGIN/../lib' "$bin"; \
- \
- 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/365
- ENV PYTHON_SETUPTOOLS_VERSION 65.5.1
- # https://github.com/pypa/get-pip
- ENV PYTHON_GET_PIP_URL https://github.com/pypa/get-pip/raw/66030fa03382b4914d4c4d0896961a0bdeeeb274/public/get-pip.py
- ENV PYTHON_GET_PIP_SHA256 1e501cf004eac1b7eb1f97266d28f995ae835d30250bec7f8850562703067dc6
- RUN set -eux; \
- \
- wget -O get-pip.py "$PYTHON_GET_PIP_URL"; \
- echo "$PYTHON_GET_PIP_SHA256 *get-pip.py" | sha256sum -c -; \
- \
- export PYTHONDONTWRITEBYTECODE=1; \
- \
- python get-pip.py \
- --disable-pip-version-check \
- --no-cache-dir \
- --no-compile \
- "pip==$PYTHON_PIP_VERSION" \
- "setuptools==$PYTHON_SETUPTOOLS_VERSION" \
- ; \
- rm -f get-pip.py; \
- \
- pip --version
- WORKDIR /app_demo
- COPY . ./
- RUN pip install --upgrade pip
- RUN pip install -r requirements.txt
- #Инструкция COPY представлена в нашем файле так: COPY . ./app.
- #Она сообщает Docker о том, что нужно взять файлы и папки из локального контекста сборки и добавить их в текущую рабочую директорию образа.
- #Если целевая директория не существует, эта инструкция её создаст.
- #COPY . ./app
- #Позже в нашем Dockerfile использована exec-форма инструкции RUN, в виде RUN ["mkdir", "/a_directory"] для создания директории.
- #При этом, используя инструкцию в такой форме, нужно помнить о необходимости оформления строк с помощью двойных кавычек, как это принято в формате JSON.
- #RUN ["mkdir", "/a_directory"]
- #Инструкция CMD предоставляет Docker команду, которую нужно выполнить при запуске контейнера. Результаты выполнения этой команды не добавляются в образ во время его сборки.
- #В нашем примере с помощью этой команды запускается скрипт welcomer.py во время выполнения контейнера.
- CMD ["python", "./welcomer.py"]
- #Удалить все не включенное
- #docker system prune -a
- #
- #docker images
- #docker ps
- #
- #
- #Сформировать контейнер с именем welc в текущей дериктории
- #docker build -t welc .
- #
- #Запустить в режиме демона -d с именем welc-test1 контейнер под названием welc
- #docker run -d --name welc-test1 welc
- #
- #Просмотр информации о контейнере
- #docker inspect 981c0309d852
- #Например о том где лежит контейнер "WorkDir": "/var/lib/docker/overlay2/102ef5890a18c0f7b115f67b5ae3b414aa0a0a3de6566746e6b996ed71494131/work"
- #ls -l /var/lib/docker/overlay2/102ef5890a18c0f7b115f67b5ae3b414aa0a0a3de6566746e6b996ed71494131/work
Advertisement
Add Comment
Please, Sign In to add comment