From b819b607c4c0c11924866798b1d42956fbe9b35c Mon Sep 17 00:00:00 2001 From: Karolina Surma Date: Wed, 11 Sep 2024 16:36:14 +0200 Subject: [PATCH] Distgen generated content --- 3.11-minimal/README.md | 3 +- 3.11/README.md | 5 +- 3.12-minimal/Dockerfile.c10s | 108 +++++++++++++++++++++++++++++++++++ 3.12-minimal/README.md | 3 +- 3.12/Dockerfile.c10s | 93 ++++++++++++++++++++++++++++++ 3.12/README.md | 5 +- 3.6/README.md | 5 +- 3.9-minimal/README.md | 3 +- 3.9/README.md | 5 +- 9 files changed, 216 insertions(+), 14 deletions(-) create mode 100644 3.12-minimal/Dockerfile.c10s create mode 100644 3.12/Dockerfile.c10s diff --git a/3.11-minimal/README.md b/3.11-minimal/README.md index 1ad132fe..e978131c 100644 --- a/3.11-minimal/README.md +++ b/3.11-minimal/README.md @@ -8,8 +8,7 @@ Because the minimal and full images work similarly, we document here only the di of the minimal container image. For the documentation of common features see the [full container image docs](https://github.com/sclorg/s2i-python-container/tree/master/3.11). The Python 3.11 minimal container image is currently considered a tech-preview and only available on quay.io. -The image is built on top of the [Red Hat Universal Base Image 8 Micro image](https://catalog.redhat.com/software/containers/ubi8-micro/601a84aadd19c7786c47c8ea) -and therefore uses the RPM packages from Red Hat Enterprise Linux, the same that are used by Python 3.9 supported container image and are part of the [UBI registry](https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image). +The image is built on top of the [official CentOS Stream base containers](quay.io/centos/centos). To pull the Python 3.11 minimal container image to build on, run diff --git a/3.11/README.md b/3.11/README.md index aefeb2d7..166705b3 100644 --- a/3.11/README.md +++ b/3.11/README.md @@ -381,5 +381,6 @@ See also -------- Dockerfile and other sources are available on https://github.com/sclorg/s2i-python-container. In that repository you also can find another versions of Python environment Dockerfiles. -Dockerfile for CentOS is called `Dockerfile`, Dockerfile for RHEL7 is called `Dockerfile.rhel7`, -for RHEL8 it's `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9` and the Fedora Dockerfile is called `Dockerfile.fedora`. +Dockerfile for RHEL8 is called `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9`, +for CentOS Stream 9 it's `Dockerfile.c9s`, for CentOS Stream 10 it's `Dockerfile.c10s`, +and the Fedora Dockerfile is called `Dockerfile.fedora`. diff --git a/3.12-minimal/Dockerfile.c10s b/3.12-minimal/Dockerfile.c10s new file mode 100644 index 00000000..8025b109 --- /dev/null +++ b/3.12-minimal/Dockerfile.c10s @@ -0,0 +1,108 @@ +FROM quay.io/centos/centos:stream10-development-minimal + + +EXPOSE 8080 + +ENV PYTHON_VERSION=3.12 \ + PYTHONUNBUFFERED=1 \ + PYTHONIOENCODING=UTF-8 \ + LC_ALL=en_US.UTF-8 \ + LANG=en_US.UTF-8 \ + CNB_STACK_ID=com.redhat.stacks.ubi10-python-312 \ + CNB_USER_ID=1001 \ + CNB_GROUP_ID=0 \ + PIP_NO_CACHE_DIR=off \ + # The following variables are usually available from parent s2i images \ + STI_SCRIPTS_PATH=/usr/libexec/s2i \ + APP_ROOT=/opt/app-root \ + HOME=/opt/app-root/src \ + PLATFORM="el10" + +# /opt/app-root/bin - the main venv +# /opt/app-root/src/bin - app-specific binaries +# /opt/app-root/src/.local/bin - tools like pipenv +ENV PATH=$APP_ROOT/bin:$HOME/bin:$HOME/.local/bin:$PATH + +# RHEL7 base images automatically set these envvars to run scl_enable. RHEl8 +# images, however, don't as most images don't need SCLs any more. But we want +# to run it even on RHEL8, because we set the virtualenv environment as part of +# that script +ENV BASH_ENV=${APP_ROOT}/etc/scl_enable \ + ENV=${APP_ROOT}/etc/scl_enable \ + PROMPT_COMMAND=". ${APP_ROOT}/etc/scl_enable" + +ENV SUMMARY="Minimal platform for building and running Python $PYTHON_VERSION applications" \ + DESCRIPTION="Python $PYTHON_VERSION available as container is a base platform for \ +building and running various Python $PYTHON_VERSION applications and frameworks. \ +Python is an easy to learn, powerful programming language. It has efficient high-level \ +data structures and a simple but effective approach to object-oriented programming. \ +Python's elegant syntax and dynamic typing, together with its interpreted nature, \ +make it an ideal language for scripting and rapid application development in many areas \ +on most platforms." + +LABEL summary="$SUMMARY" \ + description="$DESCRIPTION" \ + io.k8s.description="$DESCRIPTION" \ + io.k8s.display-name="Python 3.12" \ + io.openshift.expose-services="8080:http" \ + io.openshift.tags="builder,python,python312,python-312,rh-python312" \ + com.redhat.component="python-312-container" \ + name="sclorg/python-312-minimal-c10s" \ + version="1" \ + usage="s2i build https://github.com/sclorg/s2i-python-container.git --context-dir=3.12-minimal/test/setup-test-app/ ubi10/python-312-minimal python-sample-app" \ + com.redhat.license_terms="https://www.redhat.com/en/about/red-hat-end-user-license-agreements#UBI" \ + io.buildpacks.stack.id="com.redhat.stacks.ubi10-python-312-minimal" \ + maintainer="SoftwareCollections.org " + +# Very minimal set of packages +# Python is obvious in the Python container :) +# glibc-langpack-en is needed to set locale to en_US and disable warning about it +# findutils - find command is needed for fix-permissions script +# nss_wrapper - used in generate_container_user script +RUN INSTALL_PKGS="python3.12 glibc-langpack-en findutils nss_wrapper" && \ + microdnf -y --setopt=tsflags=nodocs --setopt=install_weak_deps=0 install $INSTALL_PKGS && \ + microdnf -y clean all --enablerepo='*' + +# Copy the S2I scripts from the specific language image to $STI_SCRIPTS_PATH. +COPY 3.12-minimal/s2i/bin/ $STI_SCRIPTS_PATH + +# Copy extra files to the image. +COPY 3.12-minimal/root/ / + +# Python 3.7+ only +# Yes, the directory below is already copied by the previous command. +# The problem here is that the wheels directory is copied as a symlink. +# Only if you specify symlink directly as a source, COPY copies all the +# files from the symlink destination. +COPY 3.12/root/opt/wheels /opt/wheels + +# This command sets (and also creates if necessary) +# the home directory - it has to be done here so the latter +# fix-permissions fixes this directory as well. +WORKDIR ${HOME} + +# - Create a Python virtual environment for use by any application to avoid +# potential conflicts with Python packages preinstalled in the main Python +# installation. +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN \ + python3.12 -m venv ${APP_ROOT} && \ + # We have to upgrade pip to a newer version because \ + # pip < 19.3 does not support manylinux2014 wheels. Only manylinux2014 (and later) wheels \ + # support platforms like ppc64le, aarch64 or armv7 \ + # We are newly using wheel from one of the latest stable Fedora releases (from RPM python-pip-wheel) \ + # because it's tested better then whatever version from PyPI and contains useful patches. \ + # We have to do it here so the permissions are correctly fixed and pip is able \ + # to reinstall itself in the next build phases in the assemble script if user wants the latest version \ + ${APP_ROOT}/bin/pip install /opt/wheels/pip-* && \ + rm -r /opt/wheels && \ + chown -R 1001:0 ${APP_ROOT} && \ + fix-permissions ${APP_ROOT} -P && \ + rpm-file-permissions + +USER 1001 + +# Set the default CMD to print the usage of the language image. +CMD $STI_SCRIPTS_PATH/usage diff --git a/3.12-minimal/README.md b/3.12-minimal/README.md index 3bc43b3e..170e25c3 100644 --- a/3.12-minimal/README.md +++ b/3.12-minimal/README.md @@ -8,8 +8,7 @@ Because the minimal and full images work similarly, we document here only the di of the minimal container image. For the documentation of common features see the [full container image docs](https://github.com/sclorg/s2i-python-container/tree/master/3.12). The Python 3.12 minimal container image is currently considered a tech-preview and only available on quay.io. -The image is built on top of the [Red Hat Universal Base Image 8 Micro image](https://catalog.redhat.com/software/containers/ubi8-micro/601a84aadd19c7786c47c8ea) -and therefore uses the RPM packages from Red Hat Enterprise Linux, the same that are used by Python 3.9 supported container image and are part of the [UBI registry](https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image). +The image is built on top of the [official CentOS Stream base containers](quay.io/centos/centos). To pull the Python 3.12 minimal container image to build on, run diff --git a/3.12/Dockerfile.c10s b/3.12/Dockerfile.c10s new file mode 100644 index 00000000..1e673065 --- /dev/null +++ b/3.12/Dockerfile.c10s @@ -0,0 +1,93 @@ +# This image provides a Python 3.12 environment you can use to run your Python +# applications. +FROM quay.io/sclorg/s2i-base-c10s:c10s + +EXPOSE 8080 + +ENV PYTHON_VERSION=3.12 \ + PATH=$HOME/.local/bin/:$PATH \ + PYTHONUNBUFFERED=1 \ + PYTHONIOENCODING=UTF-8 \ + LC_ALL=en_US.UTF-8 \ + LANG=en_US.UTF-8 \ + PIP_NO_CACHE_DIR=off + +ENV NAME=python3 \ + VERSION=0 \ + ARCH=x86_64 + +ENV SUMMARY="Platform for building and running Python $PYTHON_VERSION applications" \ + DESCRIPTION="Python $PYTHON_VERSION available as container is a base platform for \ +building and running various Python $PYTHON_VERSION applications and frameworks. \ +Python is an easy to learn, powerful programming language. It has efficient high-level \ +data structures and a simple but effective approach to object-oriented programming. \ +Python's elegant syntax and dynamic typing, together with its interpreted nature, \ +make it an ideal language for scripting and rapid application development in many areas \ +on most platforms." + +LABEL summary="$SUMMARY" \ + description="$DESCRIPTION" \ + io.k8s.description="$DESCRIPTION" \ + io.k8s.display-name="Python 3.12" \ + io.openshift.expose-services="8080:http" \ + io.openshift.tags="builder,python,python312,python-312,rh-python312" \ + com.redhat.component="$NAME" \ + name="sclorg/python-312-c10s" \ + version="$VERSION" \ + usage="s2i build https://github.com/sclorg/s2i-python-container.git --context-dir=3.12/test/setup-test-app/ $FGC/$NAME python-sample-app" \ + maintainer="SoftwareCollections.org " + +RUN INSTALL_PKGS="python3 python3-devel python3-setuptools python3-pip nss_wrapper \ + httpd httpd-devel mod_ssl mod_auth_gssapi mod_ldap \ + mod_session gcc-gfortran libffi-devel libtool-ltdl krb5-devel" && \ + yum -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \ + rpm -V $INSTALL_PKGS && \ + yum -y clean all --enablerepo='*' + +# Copy the S2I scripts from the specific language image to $STI_SCRIPTS_PATH. +COPY 3.12/s2i/bin/ $STI_SCRIPTS_PATH + +# Copy extra files to the image. +COPY 3.12/root/ / + +# Python 3.7+ only +# Yes, the directory below is already copied by the previous command. +# The problem here is that the wheels directory is copied as a symlink. +# Only if you specify symlink directly as a source, COPY copies all the +# files from the symlink destination. +COPY 3.12/root/opt/wheels /opt/wheels +# - Create a Python virtual environment for use by any application to avoid +# potential conflicts with Python packages preinstalled in the main Python +# installation. +# - In order to drop the root user, we have to make some directories world +# writable as OpenShift default security model is to run the container +# under random UID. +RUN python3.12 -m venv ${APP_ROOT} && \ +# Python 3.7+ only code, Python <3.7 installs pip from PyPI in the assemble script. \ +# We have to upgrade pip to a newer verison because \ +# pip < 19.3 does not support manylinux2014 wheels. Only manylinux2014 (and later) wheels \ +# support platforms like ppc64le, aarch64 or armv7 \ +# We are newly using wheel from one of the latest stable Fedora releases (from RPM python-pip-wheel) \ +# because it's tested better then whatever version from PyPI and contains useful patches. \ +# We have to do it here (in the macro) so the permissions are correctly fixed and pip is able \ +# to reinstall itself in the next build phases in the assemble script if user wants the latest version \ +${APP_ROOT}/bin/pip install /opt/wheels/pip-* && \ +rm -r /opt/wheels && \ +chown -R 1001:0 ${APP_ROOT} && \ +fix-permissions ${APP_ROOT} -P && \ +# The following echo adds the unset command for the variables set below to the \ +# venv activation script. This is inspired from scl_enable script and prevents \ +# the virtual environment to be activated multiple times and also every time \ +# the prompt is rendered. \ +echo "unset BASH_ENV PROMPT_COMMAND ENV" >> ${APP_ROOT}/bin/activate + +# For Fedora scl_enable isn't sourced automatically in s2i-core +# so virtualenv needs to be activated this way +ENV BASH_ENV="${APP_ROOT}/bin/activate" \ + ENV="${APP_ROOT}/bin/activate" \ + PROMPT_COMMAND=". ${APP_ROOT}/bin/activate" + +USER 1001 + +# Set the default CMD to print the usage of the language image. +CMD $STI_SCRIPTS_PATH/usage diff --git a/3.12/README.md b/3.12/README.md index 9f066e61..da206c85 100644 --- a/3.12/README.md +++ b/3.12/README.md @@ -381,5 +381,6 @@ See also -------- Dockerfile and other sources are available on https://github.com/sclorg/s2i-python-container. In that repository you also can find another versions of Python environment Dockerfiles. -Dockerfile for CentOS is called `Dockerfile`, Dockerfile for RHEL7 is called `Dockerfile.rhel7`, -for RHEL8 it's `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9` and the Fedora Dockerfile is called `Dockerfile.fedora`. +Dockerfile for RHEL8 is called `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9`, +for CentOS Stream 9 it's `Dockerfile.c9s`, for CentOS Stream 10 it's `Dockerfile.c10s`, +and the Fedora Dockerfile is called `Dockerfile.fedora`. diff --git a/3.6/README.md b/3.6/README.md index b293f35d..f8bfc01c 100644 --- a/3.6/README.md +++ b/3.6/README.md @@ -381,5 +381,6 @@ See also -------- Dockerfile and other sources are available on https://github.com/sclorg/s2i-python-container. In that repository you also can find another versions of Python environment Dockerfiles. -Dockerfile for CentOS is called `Dockerfile`, Dockerfile for RHEL7 is called `Dockerfile.rhel7`, -for RHEL8 it's `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9` and the Fedora Dockerfile is called `Dockerfile.fedora`. +Dockerfile for RHEL8 is called `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9`, +for CentOS Stream 9 it's `Dockerfile.c9s`, for CentOS Stream 10 it's `Dockerfile.c10s`, +and the Fedora Dockerfile is called `Dockerfile.fedora`. diff --git a/3.9-minimal/README.md b/3.9-minimal/README.md index cf93dd43..0171bd74 100644 --- a/3.9-minimal/README.md +++ b/3.9-minimal/README.md @@ -8,8 +8,7 @@ Because the minimal and full images work similarly, we document here only the di of the minimal container image. For the documentation of common features see the [full container image docs](https://github.com/sclorg/s2i-python-container/tree/master/3.9). The Python 3.9 minimal container image is currently considered a tech-preview and only available on quay.io. -The image is built on top of the [Red Hat Universal Base Image 8 Micro image](https://catalog.redhat.com/software/containers/ubi8-micro/601a84aadd19c7786c47c8ea) -and therefore uses the RPM packages from Red Hat Enterprise Linux, the same that are used by Python 3.9 supported container image and are part of the [UBI registry](https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image). +The image is built on top of the [official CentOS Stream base containers](quay.io/centos/centos). To pull the Python 3.9 minimal container image to build on, run diff --git a/3.9/README.md b/3.9/README.md index d370af58..84a46cc2 100644 --- a/3.9/README.md +++ b/3.9/README.md @@ -381,5 +381,6 @@ See also -------- Dockerfile and other sources are available on https://github.com/sclorg/s2i-python-container. In that repository you also can find another versions of Python environment Dockerfiles. -Dockerfile for CentOS is called `Dockerfile`, Dockerfile for RHEL7 is called `Dockerfile.rhel7`, -for RHEL8 it's `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9` and the Fedora Dockerfile is called `Dockerfile.fedora`. +Dockerfile for RHEL8 is called `Dockerfile.rhel8`, for RHEL9 it's `Dockerfile.rhel9`, +for CentOS Stream 9 it's `Dockerfile.c9s`, for CentOS Stream 10 it's `Dockerfile.c10s`, +and the Fedora Dockerfile is called `Dockerfile.fedora`.