From 76fe3eba04ffedcec299142c7aa5071e497ee9ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Skalick=C3=BD?= Date: Tue, 5 Dec 2017 10:25:13 +0100 Subject: [PATCH] Do sync from upstream - https://github.com/sclorg/s2i-base-container/tree/master/base --- Dockerfile | 74 +++++++++------------------- README.md | 104 +++++++++++++++++++++++++++++++++++++++ bin/base-usage | 24 --------- bin/cgroup-limits | 92 ---------------------------------- bin/container-entrypoint | 2 - bin/fix-permissions | 6 --- contrib/scl_enable | 2 - test/run | 2 +- 8 files changed, 129 insertions(+), 177 deletions(-) create mode 100644 README.md delete mode 100755 bin/base-usage delete mode 100755 bin/cgroup-limits delete mode 100755 bin/container-entrypoint delete mode 100755 bin/fix-permissions delete mode 100644 contrib/scl_enable diff --git a/Dockerfile b/Dockerfile index 46fc285..c5122ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,45 +1,36 @@ # This image is the base image for all OpenShift v3 language Docker images. -FROM fedora:rawhide +FROM registry.fedoraproject.org/27/s2i-core -LABEL \ - io.openshift.s2i.scripts-url=image:///usr/libexec/s2i \ - io.s2i.scripts-url=image:///usr/libexec/s2i +ENV SUMMARY="Base image with essential libraries and tools used as a base for \ +builder images like perl, python, ruby, etc." \ + DESCRIPTION="The s2i-base image, being built upon s2i-core, provides any \ +images layered on top of it with all the tools needed to use source-to-image \ +functionality. Additionally, s2i-base also contains various libraries needed for \ +it to serve as a base for other builder images, like s2i-python or s2i-ruby." \ + NAME=s2i-base \ + VERSION=1 \ + RELEASE=9 \ + ARCH=x86_64 -ENV NAME=s2i-base VERSION=1 RELEASE=8 ARCH=x86_64 - -LABEL BZComponent="$NAME" \ - Name="$FGC/$NAME" \ - Version="$VERSION" \ - Release="$RELEASE.$DISTTAG" \ - Architecture="$ARCH" - -ENV \ - # DEPRECATED: Use above LABEL instead, because this will be removed in future versions. - STI_SCRIPTS_URL=image:///usr/libexec/s2i \ - # Path to be used in other layers to place s2i scripts into - STI_SCRIPTS_PATH=/usr/libexec/s2i \ - # The $HOME is not set by default, but some applications needs this variable - # TODO: There is a bug in rhel7.1 image where the PATH variable is not exported - # properly as Docker image metadata, which causes the $PATH variable do not - # expand properly. - HOME=/opt/app-root/src \ - PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +LABEL summary="$SUMMARY" \ + description="$DESCRIPTION" \ + io.k8s.description="$DESCRIPTION" \ + io.k8s.display-name="s2i base" \ + com.redhat.component="$NAME" \ + name="$FGC/$NAME" \ + version="$VERSION" \ + release="$RELEASE.$DISTTAG" \ + architecture="$ARCH" \ + maintainer="SoftwareCollections.org " # This is the list of basic dependencies that all language Docker image can # consume. -# Also setup the 'openshift' user that is used for the build execution and for the -# application runtime execution. -# TODO: Use better UID and GID values -RUN dnf repolist > /dev/null && \ - INSTALL_PKGS="autoconf \ +RUN INSTALL_PKGS="autoconf \ automake \ - bsdtar \ bzip2 \ - findutils \ gcc-c++ \ gd-devel \ gdb \ - gettext \ git \ libcurl-devel \ libxml2-devel \ @@ -48,33 +39,16 @@ RUN dnf repolist > /dev/null && \ make \ mariadb-devel \ mariadb-libs \ + npm \ openssl-devel \ patch \ postgresql-devel \ procps-ng \ - redhat-rpm-config \ - scl-utils \ sqlite-devel \ - tar \ unzip \ wget \ which \ - yum-utils \ zlib-devel" && \ - mkdir -p ${HOME}/.pki/nssdb && \ - chown -R 1001:0 ${HOME}/.pki && \ dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ rpm -V $INSTALL_PKGS && \ - dnf clean all -y && \ - useradd -u 1001 -r -g 0 -d ${HOME} -s /sbin/nologin \ - -c "Default Application User" default && \ - chown -R 1001:0 /opt/app-root - -# Copy executable utilities. -COPY bin/ /usr/bin/ - -# Directory with the sources is set as the working directory so all STI scripts -# can execute relative to this path. -WORKDIR ${HOME} - -CMD ["base-usage"] + dnf clean all -y diff --git a/README.md b/README.md new file mode 100644 index 0000000..13e4efe --- /dev/null +++ b/README.md @@ -0,0 +1,104 @@ +OpenShift base images +======================================== + +This repository contains Dockerfiles for images which serve as base images with all the +essential libraries and tools needed for OpenShift language images, for example: + +* [s2i-ruby](https://github.com/sclorg/s2i-ruby-container) +* [s2i-nodejs](https://github.com/sclorg/s2i-nodejs-container) +* [s2i-python](https://github.com/sclorg/s2i-python-container) +* [s2i-perl](https://github.com/sclorg/s2i-perl-container) +* [s2i-php](https://github.com/sclorg/s2i-php-container) + +This container image also installs several development libraries, that are +often required in the builder images above. It also includes NPM package manager. +Sharing those development packages in a common layer saves disk space and +improves pulling speed. + +NPM, a package manager for Node.js, offers a pleasant way to install JavaScript +libraries, that are often needed as static files for various web applications. +In order to offer good experience for web developers, the NPM package manager +is also installed in the image. + +For containers where the development libraries and NPM package manager are not +necessary, users are advised to use the s2i-core variant of this container image. + + +Description +----------- + +OpenShift S2I images use [Software Collections](https://www.softwarecollections.org/en/) +packages to provide the latest versions of various software. +The SCL packages are released more frequently than the RHEL or CentOS systems, +which are unlikely to change for several years. +We rely on RHEL and CentOS for base images, on the other hand, +because those are stable, supported, and secure platforms. + +Normally, SCL requires manual operation to enable the collection you want to use. +This is burdensome and can be prone to error. +The OpenShift S2I approach is to set Bash environment variables that +serve to automatically enable the desired collection: + +* `BASH_ENV`: enables the collection for all non-interactive Bash sessions +* `ENV`: enables the collection for all invocations of `/bin/sh` +* `PROMPT_COMMAND`: enables the collection in interactive shell + +Two examples: +* If you specify `BASH_ENV`, then all your `#!/bin/bash` scripts +do not need to call `scl enable`. +* If you specify `PROMPT_COMMAND`, then on execution of the +`docker exec ... /bin/bash` command, the collection will be automatically enabled. + +*Note*: +Executables in Software Collections packages (e.g., `ruby`) +are not directly in a directory named in the `PATH` environment variable. +This means that you cannot do: + + $ docker exec ... ruby + +but must instead do: + + $ docker exec ... /bin/bash -c ruby + +The `/bin/bash -c`, along with the setting the appropriate environment variable, +ensures the correct `ruby` executable is found and invoked. + + +Usage +------------------------ +Choose either the CentOS7 or RHEL7 base image: +* **RHEL7 base image** + +To build a RHEL7 based image, you need to build it on properly subscribed RHEL machine. + +``` +$ git clone --recursive https://github.com/sclorg/s2i-base-container.git +$ cd s2i-base-container +$ make build VERSIONS=base TARGET=rhel7 +``` + +* **CentOS7 base image** + +This image is available on DockerHub. To download it run: + +```console +docker pull sclorg/s2i-base-centos7 +``` + +To build a Base image from scratch run: + +``` +$ git clone --recursive https://github.com/sclorg/s2i-base-container.git +$ cd s2i-base-container +$ make build VERSIONS=base +``` + +**Notice: By omitting the `VERSION` parameter, the build/test action will be performed +on all provided versions of s2i image.** + + +See also +-------- +Dockerfile and other sources are available on https://github.com/sclorg/s2i-base-container. +In that repository you also can find another variants of S2I base Dockerfiles. +Dockerfile for CentOS is called Dockerfile, Dockerfile for RHEL is called Dockerfile.rhel7. diff --git a/bin/base-usage b/bin/base-usage deleted file mode 100755 index 154ccc4..0000000 --- a/bin/base-usage +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e - -cat <= 92233720368547: - env_vars["NO_MEMORY_LIMIT"] = "true" - - for key, value in env_vars.items(): - print("{0}={1}".format(key, value)) diff --git a/bin/container-entrypoint b/bin/container-entrypoint deleted file mode 100755 index 9d8ad4d..0000000 --- a/bin/container-entrypoint +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -exec "$@" diff --git a/bin/fix-permissions b/bin/fix-permissions deleted file mode 100755 index 0ed1f10..0000000 --- a/bin/fix-permissions +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# Fix permissions on the given directory to allow group read/write of -# regular files and execute of directories. -find $1 -exec chgrp 0 {} \; -find $1 -exec chmod g+rw {} \; -find $1 -type d -exec chmod g+x {} + diff --git a/contrib/scl_enable b/contrib/scl_enable deleted file mode 100644 index 8fca598..0000000 --- a/contrib/scl_enable +++ /dev/null @@ -1,2 +0,0 @@ -# This file contains automatic SCL enablement. -unset BASH_ENV PROMPT_COMMAND ENV diff --git a/test/run b/test/run index 3a9fe2d..a745d6d 100755 --- a/test/run +++ b/test/run @@ -6,7 +6,7 @@ # IMAGE_NAME specifies a name of the candidate image used for testing. # The image has to be available before this script is executed. # -IMAGE_NAME=${IMAGE_NAME-openshift/base-centos7-candidate} +IMAGE_NAME=${IMAGE_NAME-centos/s2i-base-centos7-candidate} test_docker_run_usage() { echo "Testing 'docker run' usage..."