From c17e1d820d16b43976bb5e224ce2febb3bdebffb Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Wed, 30 Sep 2015 20:45:23 +0530 Subject: [PATCH 1/6] created `rootfs/` directory structure --- bitnami/apache/Dockerfile | 3 +-- bitnami/apache/{ => rootfs}/entrypoint.sh | 0 .../opt/bitnami/apache/conf.defaults}/vhosts/node.conf.example | 0 .../bitnami/apache/conf.defaults}/vhosts/php-fpm.conf.example | 0 .../opt/bitnami/apache/conf.defaults}/vhosts/ruby.conf.example | 0 5 files changed, 1 insertion(+), 2 deletions(-) rename bitnami/apache/{ => rootfs}/entrypoint.sh (100%) rename bitnami/apache/{ => rootfs/opt/bitnami/apache/conf.defaults}/vhosts/node.conf.example (100%) rename bitnami/apache/{ => rootfs/opt/bitnami/apache/conf.defaults}/vhosts/php-fpm.conf.example (100%) rename bitnami/apache/{ => rootfs/opt/bitnami/apache/conf.defaults}/vhosts/ruby.conf.example (100%) diff --git a/bitnami/apache/Dockerfile b/bitnami/apache/Dockerfile index 5263fc60d904..76a009bc6ba6 100644 --- a/bitnami/apache/Dockerfile +++ b/bitnami/apache/Dockerfile @@ -10,12 +10,11 @@ ENV BITNAMI_APP_VOL_PREFIX=/bitnami/$BITNAMI_APP_NAME \ PATH=$BITNAMI_APP_DIR/bin:$PATH RUN sh $BITNAMI_PREFIX/install.sh -COPY vhosts/* $BITNAMI_APP_DIR/conf.defaults/vhosts/ +COPY rootfs/ / EXPOSE 80 443 VOLUME ["$BITNAMI_APP_VOL_PREFIX/conf", "$BITNAMI_APP_VOL_PREFIX/logs", "/app"] -COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["httpd"] diff --git a/bitnami/apache/entrypoint.sh b/bitnami/apache/rootfs/entrypoint.sh similarity index 100% rename from bitnami/apache/entrypoint.sh rename to bitnami/apache/rootfs/entrypoint.sh diff --git a/bitnami/apache/vhosts/node.conf.example b/bitnami/apache/rootfs/opt/bitnami/apache/conf.defaults/vhosts/node.conf.example similarity index 100% rename from bitnami/apache/vhosts/node.conf.example rename to bitnami/apache/rootfs/opt/bitnami/apache/conf.defaults/vhosts/node.conf.example diff --git a/bitnami/apache/vhosts/php-fpm.conf.example b/bitnami/apache/rootfs/opt/bitnami/apache/conf.defaults/vhosts/php-fpm.conf.example similarity index 100% rename from bitnami/apache/vhosts/php-fpm.conf.example rename to bitnami/apache/rootfs/opt/bitnami/apache/conf.defaults/vhosts/php-fpm.conf.example diff --git a/bitnami/apache/vhosts/ruby.conf.example b/bitnami/apache/rootfs/opt/bitnami/apache/conf.defaults/vhosts/ruby.conf.example similarity index 100% rename from bitnami/apache/vhosts/ruby.conf.example rename to bitnami/apache/rootfs/opt/bitnami/apache/conf.defaults/vhosts/ruby.conf.example From 228c72eea65ea508a094d6c80343fb20c2a48064 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Wed, 30 Sep 2015 20:57:51 +0530 Subject: [PATCH 2/6] configure apache to start as a s6 service --- bitnami/apache/Dockerfile | 5 +---- .../cont-init.d/01-bitnami-apache} | 13 ++----------- bitnami/apache/rootfs/etc/services.d/apache/finish | 1 + bitnami/apache/rootfs/etc/services.d/apache/run | 8 ++++++++ 4 files changed, 12 insertions(+), 15 deletions(-) rename bitnami/apache/rootfs/{entrypoint.sh => etc/cont-init.d/01-bitnami-apache} (50%) create mode 120000 bitnami/apache/rootfs/etc/services.d/apache/finish create mode 100755 bitnami/apache/rootfs/etc/services.d/apache/run diff --git a/bitnami/apache/Dockerfile b/bitnami/apache/Dockerfile index 76a009bc6ba6..1033f906647d 100644 --- a/bitnami/apache/Dockerfile +++ b/bitnami/apache/Dockerfile @@ -14,7 +14,4 @@ COPY rootfs/ / EXPOSE 80 443 VOLUME ["$BITNAMI_APP_VOL_PREFIX/conf", "$BITNAMI_APP_VOL_PREFIX/logs", "/app"] - -ENTRYPOINT ["/entrypoint.sh"] - -CMD ["httpd"] +ENTRYPOINT ["/init"] diff --git a/bitnami/apache/rootfs/entrypoint.sh b/bitnami/apache/rootfs/etc/cont-init.d/01-bitnami-apache similarity index 50% rename from bitnami/apache/rootfs/entrypoint.sh rename to bitnami/apache/rootfs/etc/cont-init.d/01-bitnami-apache index 2bc7f0cf03a9..489b23bbc592 100755 --- a/bitnami/apache/rootfs/entrypoint.sh +++ b/bitnami/apache/rootfs/etc/cont-init.d/01-bitnami-apache @@ -1,20 +1,11 @@ -#!/bin/bash +#!/usr/bin/with-contenv bash set -e source $BITNAMI_PREFIX/bitnami-utils.sh print_welcome_page + generate_conf_files if [ ! "$(ls -A /app)" ]; then cp -r $BITNAMI_APP_DIR/htdocs.defaults/* $BITNAMI_APP_DIR/htdocs fi - -# Remove zombie pidfile -rm -f $BITNAMI_APP_DIR/logs/httpd.pid - -if [[ "$@" = 'httpd' ]]; then - exec $@ -DFOREGROUND -f $BITNAMI_APP_DIR/conf/httpd.conf -else - exec "$@" -fi - diff --git a/bitnami/apache/rootfs/etc/services.d/apache/finish b/bitnami/apache/rootfs/etc/services.d/apache/finish new file mode 120000 index 000000000000..63b10de42114 --- /dev/null +++ b/bitnami/apache/rootfs/etc/services.d/apache/finish @@ -0,0 +1 @@ +/bin/true \ No newline at end of file diff --git a/bitnami/apache/rootfs/etc/services.d/apache/run b/bitnami/apache/rootfs/etc/services.d/apache/run new file mode 100755 index 000000000000..3410d3ed78b2 --- /dev/null +++ b/bitnami/apache/rootfs/etc/services.d/apache/run @@ -0,0 +1,8 @@ +#!/usr/bin/with-contenv bash +set -e +source $BITNAMI_PREFIX/bitnami-utils.sh + +# Remove zombie pidfile +rm -f $BITNAMI_APP_DIR/logs/httpd.pid + +exec httpd -DFOREGROUND -f $BITNAMI_APP_DIR/conf/httpd.conf From 720912dab1faca36bcbc1f82043bdbcfb978b56d Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Wed, 30 Sep 2015 21:30:02 +0530 Subject: [PATCH 3/6] do not start apache if user specifies a command --- bitnami/apache/Dockerfile | 2 +- bitnami/apache/rootfs/entrypoint.sh | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100755 bitnami/apache/rootfs/entrypoint.sh diff --git a/bitnami/apache/Dockerfile b/bitnami/apache/Dockerfile index 1033f906647d..b368a6b5e2f7 100644 --- a/bitnami/apache/Dockerfile +++ b/bitnami/apache/Dockerfile @@ -14,4 +14,4 @@ COPY rootfs/ / EXPOSE 80 443 VOLUME ["$BITNAMI_APP_VOL_PREFIX/conf", "$BITNAMI_APP_VOL_PREFIX/logs", "/app"] -ENTRYPOINT ["/init"] +ENTRYPOINT ["/entrypoint.sh"] diff --git a/bitnami/apache/rootfs/entrypoint.sh b/bitnami/apache/rootfs/entrypoint.sh new file mode 100755 index 000000000000..fa7f178cdbd9 --- /dev/null +++ b/bitnami/apache/rootfs/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ -n "${1}" ]; then + touch /etc/services.d/$BITNAMI_APP_NAME/down +fi + +exec /init "$@" From b6d6568e8d69f45c448c97f059de3958cbedbc56 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Wed, 30 Sep 2015 21:31:29 +0530 Subject: [PATCH 4/6] allow users to pass arguments to `httpd` --- bitnami/apache/rootfs/entrypoint.sh | 8 ++++++++ bitnami/apache/rootfs/etc/services.d/apache/run | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bitnami/apache/rootfs/entrypoint.sh b/bitnami/apache/rootfs/entrypoint.sh index fa7f178cdbd9..bfefa45eebcf 100755 --- a/bitnami/apache/rootfs/entrypoint.sh +++ b/bitnami/apache/rootfs/entrypoint.sh @@ -1,5 +1,13 @@ #!/bin/bash +if [ "${1:0:1}" = '-' ]; then + export EXTRA_OPTIONS="$@" + set -- +elif [ "${1}" == "httpd" -o "${1}" == "$(which httpd)" ]; then + export EXTRA_OPTIONS="${@:2}" + set -- +fi + if [ -n "${1}" ]; then touch /etc/services.d/$BITNAMI_APP_NAME/down fi diff --git a/bitnami/apache/rootfs/etc/services.d/apache/run b/bitnami/apache/rootfs/etc/services.d/apache/run index 3410d3ed78b2..bd7fbc1a358d 100755 --- a/bitnami/apache/rootfs/etc/services.d/apache/run +++ b/bitnami/apache/rootfs/etc/services.d/apache/run @@ -5,4 +5,4 @@ source $BITNAMI_PREFIX/bitnami-utils.sh # Remove zombie pidfile rm -f $BITNAMI_APP_DIR/logs/httpd.pid -exec httpd -DFOREGROUND -f $BITNAMI_APP_DIR/conf/httpd.conf +exec httpd -DFOREGROUND -f $BITNAMI_APP_DIR/conf/httpd.conf ${EXTRA_OPTIONS:+"$EXTRA_OPTIONS"} From 10b77e2c028a841a2f2341bb632530dafeebb84b Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Wed, 30 Sep 2015 21:37:44 +0530 Subject: [PATCH 5/6] added circuit breaker logic for frequent and repeated failures --- .../rootfs/etc/services.d/apache/finish | 22 ++++++++++++++++++- .../apache/rootfs/etc/services.d/apache/run | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) mode change 120000 => 100755 bitnami/apache/rootfs/etc/services.d/apache/finish diff --git a/bitnami/apache/rootfs/etc/services.d/apache/finish b/bitnami/apache/rootfs/etc/services.d/apache/finish deleted file mode 120000 index 63b10de42114..000000000000 --- a/bitnami/apache/rootfs/etc/services.d/apache/finish +++ /dev/null @@ -1 +0,0 @@ -/bin/true \ No newline at end of file diff --git a/bitnami/apache/rootfs/etc/services.d/apache/finish b/bitnami/apache/rootfs/etc/services.d/apache/finish new file mode 100755 index 000000000000..9f54f1ccfc16 --- /dev/null +++ b/bitnami/apache/rootfs/etc/services.d/apache/finish @@ -0,0 +1,21 @@ +#!/usr/bin/with-contenv bash + +failcount=0 +if [ -f $BITNAMI_APP_DIR/tmp/failcount ]; then + failcount=$(cat $BITNAMI_APP_DIR/tmp/failcount) +fi + +start=$(cat $BITNAMI_APP_DIR/tmp/start) +stop=`date '+%d%H%M%S'` +interval=`expr $stop - $start` +if test $interval -lt 30 ; then + failcount=`expr $failcount + 1` +else + failcount=0 +fi +echo -n $failcount > $BITNAMI_APP_DIR/tmp/failcount + +# bring down container on frequent failures. something is definitely wrong +if test $failcount -ge 3 ; then + s6-svscanctl -t /var/run/s6/services +fi diff --git a/bitnami/apache/rootfs/etc/services.d/apache/run b/bitnami/apache/rootfs/etc/services.d/apache/run index bd7fbc1a358d..aeb8a3f9bb57 100755 --- a/bitnami/apache/rootfs/etc/services.d/apache/run +++ b/bitnami/apache/rootfs/etc/services.d/apache/run @@ -5,4 +5,6 @@ source $BITNAMI_PREFIX/bitnami-utils.sh # Remove zombie pidfile rm -f $BITNAMI_APP_DIR/logs/httpd.pid +mkdir -p $BITNAMI_APP_DIR/tmp +date '+%d%H%M%S' > $BITNAMI_APP_DIR/tmp/start exec httpd -DFOREGROUND -f $BITNAMI_APP_DIR/conf/httpd.conf ${EXTRA_OPTIONS:+"$EXTRA_OPTIONS"} From 3d3ad8fe622782a04eef9a5dc77f5f338d555d69 Mon Sep 17 00:00:00 2001 From: Sameer Naik Date: Wed, 30 Sep 2015 21:39:03 +0530 Subject: [PATCH 6/6] tests: add `--noproxy apache` argument to `curl` --- bitnami/apache/test.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bitnami/apache/test.sh b/bitnami/apache/test.sh index 1fe5336229eb..bd20b47e5328 100644 --- a/bitnami/apache/test.sh +++ b/bitnami/apache/test.sh @@ -36,29 +36,29 @@ add_vhost() { @test "We can connect to the port 80 and 443" { create_container - run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i http://apache:80 + run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i --noproxy apache http://apache:80 [[ "$output" =~ "200 OK" ]] [ $status = 0 ] - run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i -k https://apache:443 + run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i --noproxy apache -k https://apache:443 [[ "$output" =~ "200 OK" ]] [ $status = 0 ] } @test "Returns default page" { create_container - run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i http://apache:80 + run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i --noproxy apache http://apache:80 [[ "$output" =~ "It works!" ]] [ $status = 0 ] - run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i -k https://apache:443 + run docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i --noproxy apache -k https://apache:443 [[ "$output" =~ "It works!" ]] [ $status = 0 ] } @test "Logs to stdout" { create_container - docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i http://apache:80 + docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i --noproxy apache http://apache:80 run docker logs $CONTAINER_NAME [[ "$output" =~ "GET / HTTP/1.1" ]] [ $status = 0 ] @@ -77,7 +77,7 @@ add_vhost() { add_vhost docker restart $CONTAINER_NAME sleep $SLEEP_TIME - docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i http://apache:81 | { + docker run --link $CONTAINER_NAME:apache --rm bitnami/apache curl -L -i --noproxy apache http://apache:81 | { run grep "405 Method Not Allowed" [ $status = 0 ] }