From 3c51135f9a2029989ec74809ce531fa4aa521fa7 Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Wed, 14 Feb 2018 23:13:05 +0100 Subject: [PATCH] docker: introduce multi-stage image build (master, latest) Relates to https://github.com/shaarli/Shaarli/issues/755 Relates to https://github.com/shaarli/Shaarli/pull/1072 See: - https://docs.docker.com/develop/develop-images/multistage-build/ - https://hub.docker.com/r/library/composer/ - https://github.com/composer/docker - https://github.com/docker-library/docs/tree/master/composer Signed-off-by: VirtualTam --- docker/alpine/Dockerfile.latest | 26 ++++++++++++++------------ docker/alpine/Dockerfile.master | 26 +++++++++++++++----------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/docker/alpine/Dockerfile.latest b/docker/alpine/Dockerfile.latest index dd4a173c..e9015c13 100644 --- a/docker/alpine/Dockerfile.latest +++ b/docker/alpine/Dockerfile.latest @@ -1,9 +1,19 @@ +# Stage 1: +# - Get Shaarli sources +# - Resolve PHP dependencies with Composer +FROM composer:latest as composer +RUN curl -L https://github.com/shaarli/Shaarli/archive/latest.tar.gz | tar xzf - \ + && mv Shaarli-latest shaarli \ + && cd shaarli \ + && composer --prefer-dist --no-dev install + +# Stage 2: +# - Shaarli image FROM alpine:3.6 -MAINTAINER Shaarli Community +LABEL maintainer="Shaarli Community" RUN apk --update --no-cache add \ ca-certificates \ - curl \ nginx \ php7 \ php7-ctype \ @@ -15,7 +25,6 @@ RUN apk --update --no-cache add \ php7-json \ php7-mbstring \ php7-openssl \ - php7-phar \ php7-session \ php7-xml \ php7-zlib \ @@ -25,22 +34,15 @@ COPY nginx.conf /etc/nginx/nginx.conf COPY php-fpm.conf /etc/php7/php-fpm.conf COPY services.d /etc/services.d -RUN curl -sS https://getcomposer.org/installer | php7 -- --install-dir=/usr/local/bin --filename=composer \ - && rm -rf /etc/php7/php-fpm.d/www.conf \ +RUN rm -rf /etc/php7/php-fpm.d/www.conf \ && sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php7/php.ini \ && sed -i 's/upload_max_filesize.*/upload_max_filesize = 10M/' /etc/php7/php.ini WORKDIR /var/www -RUN curl -L https://github.com/shaarli/Shaarli/archive/latest.tar.gz | tar xzf - \ - && mv Shaarli-latest shaarli \ - && cd shaarli \ - && composer --prefer-dist --no-dev install \ - && rm -rf ~/.composer \ - && chown -R nginx:nginx . +COPY --from=composer /app/shaarli shaarli VOLUME /var/www/shaarli/data - EXPOSE 80 ENTRYPOINT ["/bin/s6-svscan", "/etc/services.d"] diff --git a/docker/alpine/Dockerfile.master b/docker/alpine/Dockerfile.master index 58f7c6e7..9cb4dec4 100644 --- a/docker/alpine/Dockerfile.master +++ b/docker/alpine/Dockerfile.master @@ -1,9 +1,19 @@ +# Stage 1: +# - Get Shaarli sources +# - Resolve PHP dependencies with Composer +FROM composer:latest as composer +RUN curl -L https://github.com/shaarli/Shaarli/archive/master.tar.gz | tar xzf - \ + && mv Shaarli-master shaarli \ + && cd shaarli \ + && composer --prefer-dist --no-dev install + +# Stage 2: +# - Shaarli image FROM alpine:3.6 -MAINTAINER Shaarli Community +LABEL maintainer="Shaarli Community" RUN apk --update --no-cache add \ ca-certificates \ - curl \ nginx \ php7 \ php7-ctype \ @@ -15,7 +25,6 @@ RUN apk --update --no-cache add \ php7-json \ php7-mbstring \ php7-openssl \ - php7-phar \ php7-session \ php7-xml \ php7-zlib \ @@ -25,20 +34,15 @@ COPY nginx.conf /etc/nginx/nginx.conf COPY php-fpm.conf /etc/php7/php-fpm.conf COPY services.d /etc/services.d -RUN curl -sS https://getcomposer.org/installer | php7 -- --install-dir=/usr/local/bin --filename=composer \ - && rm -rf /etc/php7/php-fpm.d/www.conf \ +RUN rm -rf /etc/php7/php-fpm.d/www.conf \ && sed -i 's/post_max_size.*/post_max_size = 10M/' /etc/php7/php.ini \ && sed -i 's/upload_max_filesize.*/upload_max_filesize = 10M/' /etc/php7/php.ini WORKDIR /var/www -RUN curl -L https://github.com/shaarli/Shaarli/archive/master.tar.gz | tar xzf - \ - && mv Shaarli-master shaarli \ - && cd shaarli \ - && composer --prefer-dist --no-dev install \ - && rm -rf ~/.composer \ - && chown -R nginx:nginx . +COPY --from=composer /app/shaarli shaarli +RUN chown -R nginx:nginx . VOLUME /var/www/shaarli/data EXPOSE 80