Update from the upstream Github repository
This commit is contained in:
parent
7d867c91ad
commit
92b5488cc0
12 changed files with 807 additions and 53 deletions
108
README.md
108
README.md
|
|
@ -1,10 +1,10 @@
|
|||
Python 3.8 container image
|
||||
===================
|
||||
=========================
|
||||
|
||||
This container image includes Python 3.8 as a [S2I](https://github.com/openshift/source-to-image) base image for your Python 3.8 applications.
|
||||
Users can choose between RHEL and CentOS based builder images.
|
||||
The RHEL images are available in the [Red Hat Container Catalog](https://access.redhat.com/containers/),
|
||||
the CentOS images are available on [Docker Hub](https://hub.docker.com/r/centos/),
|
||||
the CentOS images are available on [Quay.io](https://quay.io/organization/centos7),
|
||||
and the Fedora images are available in [Fedora Registry](https://registry.fedoraproject.org/).
|
||||
The resulting image can be run using [podman](https://github.com/containers/libpod) or
|
||||
[docker](http://docker.io).
|
||||
|
|
@ -29,28 +29,104 @@ modules for their web applications. There is no guarantee for any specific npm o
|
|||
version, that is included in the image; those versions can be changed anytime and
|
||||
the nodejs itself is included just to make the npm work.
|
||||
|
||||
Usage
|
||||
---------------------
|
||||
Usage in Openshift
|
||||
------------------
|
||||
|
||||
For this, we will assume that you are using the supported image, available via `python:3.8` imagestream tag in Openshift.
|
||||
Building a simple [python-sample-app](https://github.com/sclorg/s2i-python-container/tree/master/3.8/test/setup-test-app) application
|
||||
Building a simple [python-sample-app](https://github.com/sclorg/django-ex.git) application
|
||||
in Openshift can be achieved with the following step:
|
||||
|
||||
```
|
||||
oc new-app python:3.8~https://github.com/sclorg/s2i-python-container.git --context-dir=3.8/test/setup-test-app/
|
||||
oc new-app python:3.8~https://github.com/sclorg/django-ex.git
|
||||
```
|
||||
|
||||
The same application can also be built using the standalone [S2I](https://github.com/openshift/source-to-image) application on systems that have it available:
|
||||
|
||||
```
|
||||
$ s2i build https://github.com/sclorg/s2i-python-container.git --context-dir=3.8/test/setup-test-app/ <image_name> python-sample-app
|
||||
```
|
||||
|
||||
Where `<image_name>` is the s2i-python image you [downloaded from RHEL, Centos or Fedora registry](../README.md#Download) or [built](../README.md#Build) from these sources. For example ubi8/python-36, centos/python-36-centos7 or f31/python3.
|
||||
|
||||
**Accessing the application:**
|
||||
```
|
||||
$ curl 127.0.0.1:8080
|
||||
$ oc get pods
|
||||
$ oc exec <pod> -- curl 127.0.0.1:8080
|
||||
```
|
||||
|
||||
Source-to-Image framework and scripts
|
||||
-------------------------------------
|
||||
This image supports the [Source-to-Image](https://docs.openshift.com/container-platform/3.11/creating_images/s2i.html)
|
||||
(S2I) strategy in OpenShift. The Source-to-Image is an OpenShift framework
|
||||
which makes it easy to write images that take application source code as
|
||||
an input, use a builder image like this Python container image, and produce
|
||||
a new image that runs the assembled application as an output.
|
||||
|
||||
To support the Source-to-Image framework, important scripts are included in the builder image:
|
||||
|
||||
* The `/usr/libexec/s2i/assemble` script inside the image is run to produce a new image with the application artifacts.
|
||||
The script takes sources of a given application and places them into appropriate directories inside the image.
|
||||
It utilizes some common patterns in Perl application development (see the **Environment variables** section below).
|
||||
* The `/usr/libexec/s2i/run` script is set as the default command in the resulting container image (the new image with the application artifacts).
|
||||
It runs your application according to settings in `APP_MODULE`, `APP_FILE` or `APP_SCRIPT` environment variables or it tries to detect the best
|
||||
way automatically.
|
||||
|
||||
Building an application using a Dockerfile
|
||||
------------------------------------------
|
||||
Compared to the Source-to-Image strategy, using a Dockerfile is a more
|
||||
flexible way to build a Python container image with an application.
|
||||
Use a Dockerfile when Source-to-Image is not sufficiently flexible for you or
|
||||
when you build the image outside of the OpenShift environment.
|
||||
|
||||
To use the Python image in a Dockerfile, follow these steps:
|
||||
#### 1. Pull a base builder image to build on
|
||||
|
||||
```
|
||||
podman pull registry.access.redhat.com/ubi8/python-38
|
||||
```
|
||||
|
||||
#### 2. Pull and application code
|
||||
|
||||
An example application available at https://github.com/sclorg/django-ex.git is used here. Feel free to clone the repository for further experiments.
|
||||
You can also take a look at code examples in s2i-python-container repository: https://github.com/sclorg/s2i-python-container/tree/master/examples
|
||||
|
||||
```
|
||||
git clone https://github.com/sclorg/django-ex.git app-src
|
||||
```
|
||||
|
||||
#### 3. Prepare an application inside a container
|
||||
|
||||
This step usually consists of at least these parts:
|
||||
|
||||
* putting the application source into the container
|
||||
* installing the dependencies
|
||||
* setting the default command in the resulting image
|
||||
|
||||
For all these three parts, users can either setup all manually and use commands `python` and `pip` explicitly in the Dockerfile,
|
||||
or users can use the Source-to-Image scripts inside the image.
|
||||
|
||||
The manual way comes with the highest level of flexibility but requires you to know how to work
|
||||
with modules or software collections manually, how to setup virtual environment with the right version
|
||||
of Python and many more. On the other hand, using Source-to-Image scripts makes your Dockerfile
|
||||
prepared for a future flawless switch to a newer or different platform.
|
||||
|
||||
To use the Source-to-Image scripts and build an image using a Dockerfile, create a Dockerfile with this content:
|
||||
|
||||
```
|
||||
FROM registry.access.redhat.com/ubi8/python-38
|
||||
# Add application sources to a directory that the assemble script expects them
|
||||
# and set permissions so that the container runs without root access
|
||||
USER 0
|
||||
ADD app-src /tmp/src
|
||||
RUN chown -R 1001:0 /tmp/src
|
||||
USER 1001
|
||||
# Install the dependencies
|
||||
RUN /usr/libexec/s2i/assemble
|
||||
# Set the default command for the resulting image
|
||||
CMD /usr/libexec/s2i/run
|
||||
```
|
||||
#### 4. Build a new image from a Dockerfile prepared in the previous step
|
||||
|
||||
```
|
||||
podman build -t python-app .
|
||||
```
|
||||
|
||||
#### 5. Run the resulting image with final application
|
||||
|
||||
```
|
||||
podman run -d python-app
|
||||
```
|
||||
|
||||
Environment variables
|
||||
|
|
@ -244,7 +320,7 @@ following ways, in precedence order:
|
|||
application.
|
||||
|
||||
Hot deploy
|
||||
---------------------
|
||||
----------
|
||||
|
||||
If you are using Django, hot deploy will work out of the box.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue