From 5df93a6c82e96266c250ab13dc70e30c6bd3f27e Mon Sep 17 00:00:00 2001 From: JACQUES Francois Date: Mon, 4 Apr 2016 14:06:26 +0200 Subject: [PATCH 1/2] Add alpine-base images --- .travis.yml | 11 +-- 9.2-jre7/Dockerfile | 4 +- ...r-entrypoint.bash => docker-entrypoint.sh} | 12 ++- 9.2-jre8/Dockerfile | 4 +- ...r-entrypoint.bash => docker-entrypoint.sh} | 12 ++- 9.3-jre8/Dockerfile | 4 +- 9.3-jre8/alpine/Dockerfile | 65 +++++++++++++++++ .../docker-entrypoint.sh} | 12 ++- .../docker-entrypoint.sh | 12 ++- Makefile | 4 +- docker-entrypoint.sh | 29 ++++++++ generate-stackbrew-library.sh | 73 +++++++++++-------- update.sh | 19 +++-- 13 files changed, 200 insertions(+), 61 deletions(-) rename 9.2-jre7/{docker-entrypoint.bash => docker-entrypoint.sh} (60%) rename 9.2-jre8/{docker-entrypoint.bash => docker-entrypoint.sh} (60%) create mode 100644 9.3-jre8/alpine/Dockerfile rename 9.3-jre8/{docker-entrypoint.bash => alpine/docker-entrypoint.sh} (60%) rename docker-entrypoint.bash => 9.3-jre8/docker-entrypoint.sh (60%) create mode 100755 docker-entrypoint.sh diff --git a/.travis.yml b/.travis.yml index 866be80..32b043c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,17 +4,18 @@ language: bash dist: trusty env: - - VERSION=9.2 VARIANT=jre7 - - VERSION=9.2 VARIANT=jre8 - - VERSION=9.3 VARIANT=jre8 + - VERSION=9.2-jre7 + - VERSION=9.2-jre8 + - VERSION=9.3-jre8 + - VERSION=9.3-jre8 VARIANT=alpine install: - git clone https://github.com/docker-library/official-images.git ~/official-images before_script: - env | sort - - cd "$VERSION-$VARIANT" - - image="jetty:$VERSION-$VARIANT" + - cd "${VERSION}${VARIANT:+/$VARIANT}" + - image="jetty:${VERSION}${VARIANT:+-$VARIANT}" script: - docker build --pull -t "$image" . diff --git a/9.2-jre7/Dockerfile b/9.2-jre7/Dockerfile index a31191a..c20bb10 100644 --- a/9.2-jre7/Dockerfile +++ b/9.2-jre7/Dockerfile @@ -47,8 +47,8 @@ RUN set -xe \ && mkdir -p "$JETTY_RUN" "$TMPDIR" \ && chown -R jetty:jetty "$JETTY_RUN" "$TMPDIR" "$JETTY_BASE" -COPY docker-entrypoint.bash / +COPY docker-entrypoint.sh / EXPOSE 8080 -ENTRYPOINT ["/docker-entrypoint.bash"] +ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["java","-Djava.io.tmpdir=/tmp/jetty","-jar","/usr/local/jetty/start.jar"] diff --git a/9.2-jre7/docker-entrypoint.bash b/9.2-jre7/docker-entrypoint.sh similarity index 60% rename from 9.2-jre7/docker-entrypoint.bash rename to 9.2-jre7/docker-entrypoint.sh index 2f4b81c..7a37c6a 100755 --- a/9.2-jre7/docker-entrypoint.bash +++ b/9.2-jre7/docker-entrypoint.sh @@ -1,8 +1,16 @@ -#!/bin/bash +#!/bin/sh set -e if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi cat >&2 <<- 'EOWARN' ******************************************************************** WARNING: Use of jetty.sh from this image is deprecated and may @@ -14,7 +22,7 @@ if [ "$1" = jetty.sh ]; then EOWARN fi -if ! type -- "$1" &>/dev/null; then +if ! command -v -- "$1" >/dev/null 2>&1 ; then set -- java -jar "-Djava.io.tmpdir=$TMPDIR" "$JETTY_HOME/start.jar" "$@" fi diff --git a/9.2-jre8/Dockerfile b/9.2-jre8/Dockerfile index 241872d..bf8b5c9 100644 --- a/9.2-jre8/Dockerfile +++ b/9.2-jre8/Dockerfile @@ -47,8 +47,8 @@ RUN set -xe \ && mkdir -p "$JETTY_RUN" "$TMPDIR" \ && chown -R jetty:jetty "$JETTY_RUN" "$TMPDIR" "$JETTY_BASE" -COPY docker-entrypoint.bash / +COPY docker-entrypoint.sh / EXPOSE 8080 -ENTRYPOINT ["/docker-entrypoint.bash"] +ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["java","-Djava.io.tmpdir=/tmp/jetty","-jar","/usr/local/jetty/start.jar"] diff --git a/9.2-jre8/docker-entrypoint.bash b/9.2-jre8/docker-entrypoint.sh similarity index 60% rename from 9.2-jre8/docker-entrypoint.bash rename to 9.2-jre8/docker-entrypoint.sh index 2f4b81c..7a37c6a 100755 --- a/9.2-jre8/docker-entrypoint.bash +++ b/9.2-jre8/docker-entrypoint.sh @@ -1,8 +1,16 @@ -#!/bin/bash +#!/bin/sh set -e if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi cat >&2 <<- 'EOWARN' ******************************************************************** WARNING: Use of jetty.sh from this image is deprecated and may @@ -14,7 +22,7 @@ if [ "$1" = jetty.sh ]; then EOWARN fi -if ! type -- "$1" &>/dev/null; then +if ! command -v -- "$1" >/dev/null 2>&1 ; then set -- java -jar "-Djava.io.tmpdir=$TMPDIR" "$JETTY_HOME/start.jar" "$@" fi diff --git a/9.3-jre8/Dockerfile b/9.3-jre8/Dockerfile index 486bdb9..f6185f5 100644 --- a/9.3-jre8/Dockerfile +++ b/9.3-jre8/Dockerfile @@ -46,8 +46,8 @@ RUN set -xe \ && mkdir -p "$JETTY_RUN" "$TMPDIR" \ && chown -R jetty:jetty "$JETTY_RUN" "$TMPDIR" "$JETTY_BASE" -COPY docker-entrypoint.bash / +COPY docker-entrypoint.sh / EXPOSE 8080 -ENTRYPOINT ["/docker-entrypoint.bash"] +ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["java","-Djava.io.tmpdir=/tmp/jetty","-jar","/usr/local/jetty/start.jar"] diff --git a/9.3-jre8/alpine/Dockerfile b/9.3-jre8/alpine/Dockerfile new file mode 100644 index 0000000..9fbef75 --- /dev/null +++ b/9.3-jre8/alpine/Dockerfile @@ -0,0 +1,65 @@ +FROM java:8-jre-alpine + +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +RUN addgroup -S jetty && adduser -D -S -H -G jetty jetty && rm -rf /etc/group- /etc/passwd- /etc/shadow- + +ENV JETTY_HOME /usr/local/jetty +ENV PATH $JETTY_HOME/bin:$PATH +RUN mkdir -p "$JETTY_HOME" +WORKDIR $JETTY_HOME + +ENV JETTY_BASE /var/lib/jetty +RUN mkdir -p "$JETTY_BASE" + +ENV JETTY_VERSION 9.3.8.v20160314 +ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz + +# GPG Keys are personal keys of Jetty committers (see https://dev.eclipse.org/mhonarc/lists/jetty-users/msg05220.html) +ENV JETTY_GPG_KEYS \ + # 1024D/8FB67BAC 2006-12-10 Joakim Erdfelt + B59B67FD7904984367F931800818D9D68FB67BAC \ + # 1024D/D7C58886 2010-03-09 Jesse McConnell (signing key) + 5DE533CB43DAF8BC3E372283E7AE839CD7C58886 +RUN set -xe \ + + # Install required packages for build time. Will be removed when build finishes. + && apk add --no-cache --virtual .build-deps gnupg coreutils curl \ + + && curl -SL "$JETTY_TGZ_URL" -o jetty.tar.gz \ + && curl -SL "$JETTY_TGZ_URL.asc" -o jetty.tar.gz.asc \ + && export GNUPGHOME="$(mktemp -d)" \ + && for key in $JETTY_GPG_KEYS; do \ + gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; done \ + && gpg --batch --verify jetty.tar.gz.asc jetty.tar.gz \ + && rm -r "$GNUPGHOME" \ + && tar -xvzf jetty.tar.gz \ + && mv jetty-distribution-$JETTY_VERSION/* ./ \ + && sed -i '/jetty-logging/d' etc/jetty.conf \ + && rm -fr demo-base javadoc \ + && rm jetty.tar.gz* \ + && rm -fr jetty-distribution-$JETTY_VERSION/ \ + + # Get the list of modules in the default start.ini and build new base with those modules, then add setuid + && cd $JETTY_BASE \ + && modules="$(grep -- ^--module= "$JETTY_HOME/start.ini" | cut -d= -f2 | paste -d, -s)" \ + && java -jar "$JETTY_HOME/start.jar" --add-to-startd="$modules,setuid" \ + + # Remove installed packages and various cleanup + && apk del .build-deps \ + && rm -fr .build-deps \ + && rm -rf /tmp/hsperfdata_root + +WORKDIR $JETTY_BASE + +ENV JETTY_RUN /run/jetty +ENV JETTY_STATE $JETTY_RUN/jetty.state +ENV TMPDIR /tmp/jetty +RUN set -xe \ + && mkdir -p "$JETTY_RUN" "$TMPDIR" \ + && chown -R jetty:jetty "$JETTY_RUN" "$TMPDIR" "$JETTY_BASE" + +COPY docker-entrypoint.sh / + +EXPOSE 8080 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["java","-Djava.io.tmpdir=/tmp/jetty","-jar","/usr/local/jetty/start.jar"] diff --git a/9.3-jre8/docker-entrypoint.bash b/9.3-jre8/alpine/docker-entrypoint.sh similarity index 60% rename from 9.3-jre8/docker-entrypoint.bash rename to 9.3-jre8/alpine/docker-entrypoint.sh index 2f4b81c..7a37c6a 100755 --- a/9.3-jre8/docker-entrypoint.bash +++ b/9.3-jre8/alpine/docker-entrypoint.sh @@ -1,8 +1,16 @@ -#!/bin/bash +#!/bin/sh set -e if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi cat >&2 <<- 'EOWARN' ******************************************************************** WARNING: Use of jetty.sh from this image is deprecated and may @@ -14,7 +22,7 @@ if [ "$1" = jetty.sh ]; then EOWARN fi -if ! type -- "$1" &>/dev/null; then +if ! command -v -- "$1" >/dev/null 2>&1 ; then set -- java -jar "-Djava.io.tmpdir=$TMPDIR" "$JETTY_HOME/start.jar" "$@" fi diff --git a/docker-entrypoint.bash b/9.3-jre8/docker-entrypoint.sh similarity index 60% rename from docker-entrypoint.bash rename to 9.3-jre8/docker-entrypoint.sh index 2f4b81c..7a37c6a 100755 --- a/docker-entrypoint.bash +++ b/9.3-jre8/docker-entrypoint.sh @@ -1,8 +1,16 @@ -#!/bin/bash +#!/bin/sh set -e if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi cat >&2 <<- 'EOWARN' ******************************************************************** WARNING: Use of jetty.sh from this image is deprecated and may @@ -14,7 +22,7 @@ if [ "$1" = jetty.sh ]; then EOWARN fi -if ! type -- "$1" &>/dev/null; then +if ! command -v -- "$1" >/dev/null 2>&1 ; then set -- java -jar "-Djava.io.tmpdir=$TMPDIR" "$JETTY_HOME/start.jar" "$@" fi diff --git a/Makefile b/Makefile index 5fa41ec..bf95be3 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSIONS = $(foreach df,$(wildcard */Dockerfile),$(df:%/Dockerfile=%)) +VERSIONS = $(foreach df,$(wildcard */alpine/Dockerfile */Dockerfile),$(df:%/Dockerfile=%)) all: build @@ -6,7 +6,7 @@ build: $(VERSIONS) define jetty-version $1: - docker build -t jetty:$1 $1 + docker build -t jetty:$(shell echo $1 | sed -e 's/\//-/g') $1 endef $(foreach version,$(VERSIONS),$(eval $(call jetty-version,$(version)))) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100755 index 0000000..7a37c6a --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +set -e + +if [ "$1" = jetty.sh ]; then + if ! command -v bash >/dev/null 2>&1 ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + ERROR: bash not found. Use of jetty.sh requires bash. + ******************************************************************** + EOWARN + exit 1 + fi + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: Use of jetty.sh from this image is deprecated and may + be removed at some point in the future. + + See the documentation for guidance on extending this image: + https://github.com/docker-library/docs/tree/master/jetty + ******************************************************************** + EOWARN +fi + +if ! command -v -- "$1" >/dev/null 2>&1 ; then + set -- java -jar "-Djava.io.tmpdir=$TMPDIR" "$JETTY_HOME/start.jar" "$@" +fi + +exec "$@" diff --git a/generate-stackbrew-library.sh b/generate-stackbrew-library.sh index 82235f0..41e95e6 100755 --- a/generate-stackbrew-library.sh +++ b/generate-stackbrew-library.sh @@ -35,45 +35,54 @@ outputTag() { } for path in "${paths[@]}"; do - echo + for variant in '' alpine; do + echo - commit="$(git log -1 --format='format:%H' -- "$path")" + [ -f "$path${variant:+/$variant}/Dockerfile" ] || continue - suffix="${path#*-}" # "jre7" + commit="$(git log -1 --format='format:%H' -- "$path${variant:+/$variant}")" - version="$(grep -m1 'ENV JETTY_VERSION ' "$path/Dockerfile" | cut -d' ' -f3)" + suffix="${path#*-}" # "jre7" - if [[ "$version" == *.v* ]]; then - # Release version - versionAliases=() - while [[ "$version" == *.* ]]; do - version="${version%.*}" - versionAliases+=("$version") - done - else - # Non-release version - versionAliases=("$version") - fi + version="$(grep -m1 'ENV JETTY_VERSION ' "$path${variant:+/$variant}/Dockerfile" | cut -d' ' -f3)" + + if [[ "$version" == *.v* ]]; then + # Release version + versionAliases=() + while [[ "$version" == *.* ]]; do + version="${version%.*}" + versionAliases+=("$version") + done + else + # Non-release version + versionAliases=("$version") + fi + + # Output ${versionAliases[@]} without suffixes + # e.g. 9.2.10, 9.2, 9, 9.3-alpine + if [ "$suffix" = "$defaultSuffix" ]; then + for va in "${versionAliases[@]}"; do + outputTag "$va${variant:+-$variant}" "$url" "$commit" "$path${variant:+/$variant}" + done + fi - # Output ${versionAliases[@]} without suffixes - # e.g. 9.2.10, 9.2, 9 - if [ "$suffix" = "$defaultSuffix" ]; then + # Output ${versionAliases[@]} with suffixes + # e.g. 9.2.10-jre7, 9.2-jre7, 9-jre7, 9-jre8-alpine for va in "${versionAliases[@]}"; do - outputTag "$va" "$url" "$commit" "$path" + outputTag "$va-$suffix${variant:+-$variant}" "$url" "$commit" "$path${variant:+/$variant}" done - fi - # Output ${versionAliases[@]} with suffixes - # e.g. 9.2.10-jre7, 9.2-jre7, 9-jre7 - for va in "${versionAliases[@]}"; do - outputTag "$va-$suffix" "$url" "$commit" "$path" + # Output custom aliases + # e.g. latest, jre7, jre8, latest-alpine + if [ ${#aliases[$path]} -gt 0 ]; then + for va in ${aliases[$path]}; do + if [ ! -z "$variant" -a "$va" = 'latest' ]; then + va="$variant" + else + va="$va${variant:+-$variant}" + fi + outputTag "$va" "$url" "$commit" "$path${variant:+/$variant}" + done + fi done - - # Output custom aliases - # e.g. latest, jre7, jre8 - if [ ${#aliases[$path]} -gt 0 ]; then - for va in ${aliases[$path]}; do - outputTag "$va" "$url" "$commit" "$path" - done - fi done diff --git a/update.sh b/update.sh index 91eaec7..3adc25e 100755 --- a/update.sh +++ b/update.sh @@ -39,12 +39,15 @@ for path in "${paths[@]}"; do exit 1 fi - ( - set -x - cp docker-entrypoint.bash "$path/" - sed -ri ' - s/^(FROM) .*/\1 '"$baseImage"'/; - s/^(ENV JETTY_VERSION) .*/\1 '"$fullVersion"'/; - ' "$path/Dockerfile" - ) + for variant in alpine ''; do + [ -d "$path/$variant" ] || continue + ( + set -x + cp docker-entrypoint.sh "$path/$variant" + sed -ri ' + s/^(FROM) .*/\1 '"$baseImage${variant:+-$variant}"'/; + s/^(ENV JETTY_VERSION) .*/\1 '"$fullVersion"'/; + ' "$path/$variant/Dockerfile" + ) + done done From b85547d2ddd80593b5ad6833b9610cc9574d8d35 Mon Sep 17 00:00:00 2001 From: JACQUES Francois Date: Fri, 27 May 2016 11:27:59 +0200 Subject: [PATCH 2/2] Update Jetty to 9.3.9 --- 9.3-jre8/Dockerfile | 2 +- 9.3-jre8/alpine/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/9.3-jre8/Dockerfile b/9.3-jre8/Dockerfile index f6185f5..61a0a8a 100644 --- a/9.3-jre8/Dockerfile +++ b/9.3-jre8/Dockerfile @@ -8,7 +8,7 @@ ENV PATH $JETTY_HOME/bin:$PATH RUN mkdir -p "$JETTY_HOME" WORKDIR $JETTY_HOME -ENV JETTY_VERSION 9.3.8.v20160314 +ENV JETTY_VERSION 9.3.9.v20160517 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz # GPG Keys are personal keys of Jetty committers (see https://dev.eclipse.org/mhonarc/lists/jetty-users/msg05220.html) diff --git a/9.3-jre8/alpine/Dockerfile b/9.3-jre8/alpine/Dockerfile index 9fbef75..1a5f3e7 100644 --- a/9.3-jre8/alpine/Dockerfile +++ b/9.3-jre8/alpine/Dockerfile @@ -11,7 +11,7 @@ WORKDIR $JETTY_HOME ENV JETTY_BASE /var/lib/jetty RUN mkdir -p "$JETTY_BASE" -ENV JETTY_VERSION 9.3.8.v20160314 +ENV JETTY_VERSION 9.3.9.v20160517 ENV JETTY_TGZ_URL https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/$JETTY_VERSION/jetty-distribution-$JETTY_VERSION.tar.gz # GPG Keys are personal keys of Jetty committers (see https://dev.eclipse.org/mhonarc/lists/jetty-users/msg05220.html)