diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 684b8dc..0000000 --- a/Dockerfile +++ /dev/null @@ -1,69 +0,0 @@ -FROM registry.fedoraproject.org/f26/s2i-base:latest - -# nginx 1.12 image. -# -# Volumes: -# * /var/log/nginx/ - Storage for logs - -EXPOSE 8080 -EXPOSE 8443 - -ENV NAME=nginx \ - NGINX_VERSION=1.12 \ - VERSION=0 \ - RELEASE=1 \ - ARCH=x86_64 - -ENV SUMMARY="Platform for running nginx $NGINX_VERSION or building nginx-based application" \ - DESCRIPTION="Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and IMAP \ -protocols, with a strong focus on high concurrency, performance and low memory usage. The container \ -image provides a containerized packaging of the nginx $NGINX_VERSION daemon. The image can be used \ -as a base image for other applications based on nginx $NGINX_VERSION web server. \ -Nginx server image can be extended using source-to-image tool." - -LABEL summary="$SUMMARY" \ - description="$DESCRIPTION" \ - io.k8s.description="$SUMMARY" \ - io.k8s.display-name="Nginx $NGINX_VERSION" \ - io.openshift.expose-services="8080:http" \ - io.openshift.expose-services="8443:https" \ - io.openshift.tags="builder,nginx,nginx112" \ - com.redhat.component="$NAME" \ - name="$FGC/$NAME" \ - version="$VERSION" \ - release="$RELEASE.$DISTTAG" \ - architecture="$ARCH" \ - usage="s2i build file:///your/app $FGC/nginx your-app" - -ENV NGINX_CONFIGURATION_PATH=/opt/app-root/etc/nginx.d -ENV NGINX_DEFAULT_CONF_PATH=/opt/app-root/etc/nginx.default.d - -RUN dnf install -y gettext hostname && \ - INSTALL_PKGS="nss_wrapper bind-utils nginx" && \ - dnf install -y --setopt=tsflags=nodocs $INSTALL_PKGS && \ - rpm -V $INSTALL_PKGS && \ - dnf clean all - -# Copy the S2I scripts from the specific language image to $STI_SCRIPTS_PATH -COPY ./s2i/bin/ $STI_SCRIPTS_PATH - -# Copy extra files to the image. -COPY ./root/ / - -# In order to drop the root user, we have to make some directories world -# writeable as OpenShift default security model is to run the container under -# random UID. -RUN sed -i -f /opt/app-root/nginxconf-fed.sed /etc/nginx/nginx.conf && \ - mkdir -p /opt/app-root/etc/nginx.d/ && \ - mkdir -p /opt/app-root/etc/nginx.default.d/ && \ - chmod -R a+rwx /opt/app-root/etc && \ - chmod -R a+rwx /var /run && \ - chown -R 1001:0 /opt/app-root && \ - chown -R 1001:0 /var - -USER 1001 - -VOLUME ["/usr/share/nginx/html"] -VOLUME ["/var/log/nginx/"] - -CMD $STI_SCRIPTS_PATH/usage diff --git a/README.md b/README.md deleted file mode 100644 index a3501b1..0000000 --- a/README.md +++ /dev/null @@ -1,80 +0,0 @@ -Nginx 1.12 server and a reverse proxy server Docker image -========================================================= - -This container image includes Nginx 1.12 server and a reverse server for OpenShift and general usage. -Users can choose RHEL based image. -The RHEL image is available in the [Red Hat Container Catalog](https://access.redhat.com/containers/#/registry.access.redhat.com/rhscl/nginx-112-rhel7) -as registry.access.redhat.com/rhscl/nginx-112-rhel7. - - -Description ------------ - -Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and IMAP -protocols, with a strong focus on high concurrency, performance and low memory usage. The container -image provides a containerized packaging of the nginx 1.12 daemon. The image can be used -as a base image for other applications based on nginx 1.12 web server. -Nginx server image can be extended using source-to-image tool. - - -Usage ------ - -To build a simple [sample-app](https://github.com/sclorg/nginx-container/tree/master/1.12/test/test-app) application -using standalone [S2I](https://github.com/openshift/source-to-image) and then run the -resulting image with [Docker](http://docker.io) execute: - -* **For RHEL based image** - ``` - $ s2i build https://github.com/sclorg/nginx-container.git --context-dir=1.12/test/test-app/ rhscl/nginx-112-rhel7 nginx-sample-app - $ docker run -p 8080:8080 nginx-sample-app - ``` - -* **For CentOS based image** - ``` - $ s2i build https://github.com/sclorg/nginx-container.git --context-dir=1.12/test/test-app/ centos/nginx-112-centos7 nginx-sample-app - $ docker run -p 8080:8080 nginx-sample-app - ``` - -**Accessing the application:** -``` -$ curl 127.0.0.1:8080 -``` - - -S2I build support -------------- -Nginx server image can be extended using S2I tool (see Usage section). -S2I build folder structure: - -| Folder name | Description | -| :-------------------------- | ----------------------------------------- | -| ./nginx-cfg/*.conf | Should contain all nginx configuration we want to include into image | -| ./nginx-default-cfg/*.conf | Contains any nginx config snippets to include in the default server block | -| ./ | Should contain nginx application source code | - -Environment variables and volumes -------------- -The nginx container image supports the following configuration variable, which can be set by using the `-e` option with the docker run command: - - -| Variable name | Description | -| :--------------------- | ----------------------------------------- | -| `NGINX_LOG_TO_VOLUME` | When `NGINX_LOG_TO_VOLUME` is set, nginx logs into `/var/opt/rh/rh-nginx112/log/nginx/` | - - -Troubleshooting ---------------- -By default, nginx logs into standard output, so the log is available in the container log. The log can be examined by running: - - docker logs - -**If `NGINX_LOG_TO_VOLUME` variable is set, nginx logs into `/var/opt/rh/rh-nginx112/log/nginx/`, which can be mounted to host system using the Docker volumes.** - - -See also --------- -Dockerfile and other sources for this container image are available on -https://github.com/sclorg/nginx-container. -In that repository, Dockerfile for CentOS is called Dockerfile, Dockerfile -for RHEL is called Dockerfile.rhel7. diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..7290702 --- /dev/null +++ b/dead.package @@ -0,0 +1 @@ +container sources not used for building fedora containers anymore diff --git a/root/opt/app-root/etc/generate_container_user b/root/opt/app-root/etc/generate_container_user deleted file mode 100644 index 229b986..0000000 --- a/root/opt/app-root/etc/generate_container_user +++ /dev/null @@ -1,9 +0,0 @@ -# Set current user in nss_wrapper -PASSWD_DIR="/opt/app-root/etc" - -export USER_ID=$(id -u) -export GROUP_ID=$(id -g) -envsubst < ${PASSWD_DIR}/passwd.template > ${PASSWD_DIR}/passwd -export LD_PRELOAD=libnss_wrapper.so -export NSS_WRAPPER_PASSWD=${PASSWD_DIR}/passwd -export NSS_WRAPPER_GROUP=/etc/group diff --git a/root/opt/app-root/etc/passwd.template b/root/opt/app-root/etc/passwd.template deleted file mode 100644 index 7ad0b78..0000000 --- a/root/opt/app-root/etc/passwd.template +++ /dev/null @@ -1,15 +0,0 @@ -root:x:0:0:root:/root:/bin/bash -bin:x:1:1:bin:/bin:/sbin/nologin -daemon:x:2:2:daemon:/sbin:/sbin/nologin -adm:x:3:4:adm:/var/adm:/sbin/nologin -lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin -sync:x:5:0:sync:/sbin:/bin/sync -shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown -halt:x:7:0:halt:/sbin:/sbin/halt -mail:x:8:12:mail:/var/spool/mail:/sbin/nologin -operator:x:11:0:operator:/root:/sbin/nologin -games:x:12:100:games:/usr/games:/sbin/nologin -ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin -nobody:x:99:99:Nobody:/:/sbin/nologin -default:x:${USER_ID}:${GROUP_ID}:Default Application User:${HOME}:/sbin/nologin -apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin diff --git a/root/opt/app-root/etc/scl_enable b/root/opt/app-root/etc/scl_enable deleted file mode 100644 index 9079c61..0000000 --- a/root/opt/app-root/etc/scl_enable +++ /dev/null @@ -1,3 +0,0 @@ -# This will make scl collection binaries work out of box. -unset BASH_ENV PROMPT_COMMAND ENV -source scl_source enable rh-nginx112 diff --git a/root/opt/app-root/nginxconf-fed.sed b/root/opt/app-root/nginxconf-fed.sed deleted file mode 100644 index 4755966..0000000 --- a/root/opt/app-root/nginxconf-fed.sed +++ /dev/null @@ -1,7 +0,0 @@ -/listen/s%80%8080% -s/^user *nginx;// -s%/etc/nginx/conf.d/%/opt/app-root/etc/nginx.d/% -s%/etc/nginx/default.d/%/opt/app-root/etc/nginx.default.d/% -s%/usr/share/nginx/html%/opt/app-root/src% -s%/var/log/nginx/error.log%stderr% -s%access_log /var/log/nginx/access.log main;%% diff --git a/root/opt/app-root/nginxconf.sed b/root/opt/app-root/nginxconf.sed deleted file mode 100644 index 36faf3a..0000000 --- a/root/opt/app-root/nginxconf.sed +++ /dev/null @@ -1,7 +0,0 @@ -/listen/s%80%8080% -s/^user *nginx;// -s%/etc/opt/rh/rh-nginx112/nginx/conf.d/%/opt/app-root/etc/nginx.d/% -s%/etc/opt/rh/rh-nginx112/nginx/default.d/%/opt/app-root/etc/nginx.default.d/% -s%/opt/rh/rh-nginx112/root/usr/share/nginx/html%/opt/app-root/src% -s%/var/opt/rh/rh-nginx112/log/nginx/error.log%stderr% -s%access_log /var/opt/rh/rh-nginx112/log/nginx/access.log main;%% diff --git a/s2i/bin/assemble b/s2i/bin/assemble deleted file mode 100755 index 65ba990..0000000 --- a/s2i/bin/assemble +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -echo "---> Installing application source" -cp -Rf /tmp/src/. ./ - -if [ -d ./nginx-cfg ]; then - echo "---> Copying nginx configuration files..." - if [ "$(ls -A ./nginx-cfg/*.conf)" ]; then - cp -v ./nginx-cfg/*.conf "${NGINX_CONFIGURATION_PATH}" - rm -rf ./nginx-cfg - fi -fi - -if [ -d ./nginx-default-cfg ]; then - echo "---> Copying nginx default server configuration files..." - if [ "$(ls -A ./nginx-default-cfg/*.conf)" ]; then - cp -v ./nginx-default-cfg/*.conf "${NGINX_DEFAULT_CONF_PATH}" - rm -rf ./nginx-default-cfg - fi -fi - -# Fix source directory permissions -fix-permissions ./ diff --git a/s2i/bin/run b/s2i/bin/run deleted file mode 100755 index 084463a..0000000 --- a/s2i/bin/run +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -source /opt/app-root/etc/generate_container_user - -set -e - -exec nginx -g "daemon off;" diff --git a/s2i/bin/usage b/s2i/bin/usage deleted file mode 100755 index 1bc9219..0000000 --- a/s2i/bin/usage +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -DISTRO=`cat /etc/*-release | grep ^ID= | grep -Po '".*?"' | tr -d '"'` -NAMESPACE=centos -[[ $DISTRO =~ rhel* ]] && NAMESPACE=rhscl - -cat </dev/null -} - -container_exists() { - image_exists $(cat $cid_file) -} - -container_ip() { - docker inspect --format="{{ .NetworkSettings.IPAddress }}" $(cat $cid_file) -} - -run_s2i_build() { - s2i build ${s2i_args} file://${test_dir}/test-app ${IMAGE_NAME} ${IMAGE_NAME}-testapp -} - -prepare() { - if ! image_exists ${IMAGE_NAME}; then - echo "ERROR: The image ${IMAGE_NAME} must exist before this script is executed." - exit 1 - fi - # TODO: S2I build require the application is a valid 'GIT' repository, we - # should remove this restriction in the future when a file:// is used. - info "Build the test application image" - pushd ${test_dir}/test-app >/dev/null - git init - git config user.email "build@localhost" && git config user.name "builder" - git add -A && git commit -m "Sample commit" - popd >/dev/null -} - -run_test_application() { - run_args=${CONTAINER_ARGS:-} - docker run --user=100001 ${run_args} --cidfile=${cid_file} ${IMAGE_NAME}-testapp -} - -cleanup_test_app() { - info "Cleaning up the test application" - if [ -f $cid_file ]; then - if container_exists; then - docker stop $(cat $cid_file) - docker rm $(cat $cid_file) - fi - rm $cid_file - fi -} - -cleanup() { - info "Cleaning up the test application image" - if image_exists ${IMAGE_NAME}-testapp; then - docker rmi -f ${IMAGE_NAME}-testapp - fi - rm -rf ${test_dir}/test-app/.git -} - -check_result() { - local result="$1" - if [[ "$result" != "0" ]]; then - info "TEST FAILED (${result})" - cleanup - exit $result - fi -} - -wait_for_cid() { - local max_attempts=10 - local sleep_time=1 - local attempt=1 - local result=1 - info "Waiting for application container to start" - while [ $attempt -le $max_attempts ]; do - [ -f $cid_file ] && [ -s $cid_file ] && break - attempt=$(( $attempt + 1 )) - sleep $sleep_time - done -} - -test_s2i_usage() { - info "Testing 's2i usage'" - s2i usage ${s2i_args} ${IMAGE_NAME} &>/dev/null -} - -test_docker_run_usage() { - info "Testing 'docker run' usage" - docker run ${IMAGE_NAME} &>/dev/null -} - -test_scl_usage() { - local run_cmd="$1" - local expected="$2" - - info "Testing the image SCL enable" - out=$(docker run --rm ${IMAGE_NAME} /bin/bash -c "${run_cmd} 2>&1") - if ! echo "${out}" | grep -q "${expected}"; then - echo "ERROR[/bin/bash -c "${run_cmd}"] Expected '${expected}', got '${out}'" - return 1 - fi - out=$(docker exec $(cat ${cid_file}) /bin/bash -c "${run_cmd}" 2>&1) - if ! echo "${out}" | grep -q "${expected}"; then - echo "ERROR[exec /bin/bash -c "${run_cmd}"] Expected '${expected}', got '${out}'" - return 1 - fi - out=$(docker exec $(cat ${cid_file}) /bin/sh -ic "${run_cmd}" 2>&1) - if ! echo "${out}" | grep -q "${expected}"; then - echo "ERROR[exec /bin/sh -ic "${run_cmd}"] Expected '${expected}', got '${out}'" - return 1 - fi -} - -test_for_output() -{ - local url="$1" - local expect="$2" - local host="${3-localhost}" - local max_attempts=5 - local sleep_time=1 - local attempt=1 - local result=1 - - info "Testing URL $url with HTTP hostname ${host} produces output $expect" - - while [ $attempt -le $max_attempts ]; do - response=$(curl -s -H "Host: ${host}" ${url}) - echo "${response}" - status=$? - if [ $status -eq 0 ]; then - if echo "${response}" | grep -q "${expect}"; then - info "Success!" - result=0 - break - else - echo "Response: ${response}" - fi - fi - attempt=$(( $attempt + 1 )) - sleep $sleep_time - done - - return $result -} - -test_connection() { - cat $cid_file - info "Testing the HTTP connection (http://$(container_ip):${test_port})" - - if test_for_output "http://$(container_ip):${test_port}/" "NGINX is working" && - test_for_output "http://$(container_ip):${test_port}/" "NGINX2 is working" localhost2 && - test_for_output "http://$(container_ip):${test_port}/aliased/index2.html" "NGINX2 is working" && - test_for_output "http://$(container_ip):${test_port}/nginx-cfg/default.conf" "404"; then - return 0 - fi - - return 1 -} - -test_application() { - # Verify that the HTTP connection can be established to test application container - run_test_application & - - # Wait for the container to write it's CID file - wait_for_cid - - test_scl_usage "nginx -v" "nginx version: nginx/1.12." - check_result $? - - test_connection - check_result $? - cleanup_test_app -} - -cid_file=$(mktemp -u --suffix=.cid) - -# Since we built the candidate image locally, we don't want S2I attempt to pull -# it from Docker hub -s2i_args="--pull-policy=never" - -prepare -run_s2i_build -check_result $? - -# Verify the 'usage' script is working properly when running the base image with 's2i usage ...' -test_s2i_usage -check_result $? - -# Verify the 'usage' script is working properly when running the base image with 'docker run ...' -test_docker_run_usage -check_result $? - -# Test application with default uid -test_application - -# Test application with random uid -CONTAINER_ARGS="-u 12345" test_application -cleanup - -info "All tests finished successfully." diff --git a/test/test-app b/test/test-app deleted file mode 120000 index 5f73990..0000000 --- a/test/test-app +++ /dev/null @@ -1 +0,0 @@ -../../examples/1.12/test-app \ No newline at end of file