diff --git a/.travis.yml b/.travis.yml index be3d462..c63efc3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,7 @@ env: - DOCKERFILE_DIR=rabbitmq - DOCKERFILE_DIR=perl - DOCKERFILE_DIR=php + - DOCKERFILE_DIR=php-fpm - DOCKERFILE_DIR=postgres - DOCKERFILE_DIR=python - DOCKERFILE_DIR=redis diff --git a/php-fpm/Dockerfile b/php-fpm/Dockerfile new file mode 100644 index 0000000..7b95fe5 --- /dev/null +++ b/php-fpm/Dockerfile @@ -0,0 +1,71 @@ +FROM clearlinux:latest AS builder +MAINTAINER sophia.gong@intel.com + +ARG swupd_args +# Move to latest Clear Linux release to ensure +# that the swupd command line arguments are +# correct +RUN swupd update --no-boot-update $swupd_args + +# Grab os-release info from the minimal base image so +# that the new content matches the exact OS version +COPY --from=clearlinux/os-core:latest /usr/lib/os-release / + +# Install additional content in a target directory +# using the os version from the minimal base +RUN source /os-release && \ + mkdir /install_root \ + && swupd os-install -V ${VERSION_ID} \ + --path /install_root --statedir /swupd-state \ + --bundles=os-core-update,php-basic --no-scripts + +# For some Host OS configuration with redirect_dir on, +# extra data are saved on the upper layer when the same +# file exists on different layers. To minimize docker +# image size, remove the overlapped files before copy. +RUN mkdir /os_core_install +COPY --from=clearlinux/os-core:latest / /os_core_install/ +RUN cd / && \ + find os_core_install | sed -e 's/os_core_install/install_root/' | xargs rm -d || true + + +FROM clearlinux/os-core:latest + +COPY --from=builder /install_root / + +RUN set -ex \ + mkdir -p /var/www/html \ + && cd /usr/share/defaults/php \ + && { \ + echo '[global]'; \ + echo 'error_log = /proc/self/fd/2'; \ + echo; echo '; https://github.com/docker-library/php/pull/725#issuecomment-443540114'; echo 'log_limit = 8192'; \ + echo; \ + echo '[www]'; \ + echo '; if we send this to /proc/self/fd/1, it never appears'; \ + echo 'access.log = /proc/self/fd/2'; \ + echo; \ + echo 'clear_env = no'; \ + echo; \ + echo '; Ensure worker stdout and stderr are sent to the main error log.'; \ + echo 'catch_workers_output = yes'; \ + echo 'decorate_workers_output = no'; \ + } | tee php-fpm.d/docker.conf \ + && { \ + echo '[global]'; \ + echo 'daemonize = no'; \ + echo; \ + echo '[www]'; \ + echo 'listen = 9000'; \ + } | tee php-fpm.d/zz-docker.conf + +WORKDIR /var/www/html + +COPY docker-php-entrypoint /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-php-entrypoint +ENTRYPOINT ["docker-php-entrypoint"] + +STOPSIGNAL SIGQUIT + +EXPOSE 9000 +CMD ["php-fpm"] diff --git a/php-fpm/README.md b/php-fpm/README.md new file mode 100644 index 0000000..645f7f8 --- /dev/null +++ b/php-fpm/README.md @@ -0,0 +1,37 @@ +php-fpm +========== +This provides a Clear Linux* php-fpm instance. + +Build +----- +``` +docker build -t clearlinux/php-fpm . +``` + +Or just pull it from Dockerhub +--------------------------- +``` +docker pull clearlinux/php-fpm +``` + +start a php-fpm instance +----------------------- +``` +docker run --name some-php-fpm clearlinux/php-fpm +``` + +Test +----------------------- +``` +docker exec -it some-php-fpm bash +php-fpm -t +``` + +More typical, php-fpm works with nginx, mariadb, for example in wordpress use case. For details, please refer to clearlinux wordpress micro service. + + +Extra Build ARGs +---------------- +- ``swupd_args`` Specifies [SWUPD](https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst#options) flags + +Default build args in Docker are on: https://docs.docker.com/engine/reference/builder/#arg diff --git a/php-fpm/docker-php-entrypoint b/php-fpm/docker-php-entrypoint new file mode 100644 index 0000000..86343d8 --- /dev/null +++ b/php-fpm/docker-php-entrypoint @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" +fi + +exec "$@"