From d7ec6aee4dbf990fba8a1f59d758b2a6e06074c6 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Sun, 11 Apr 2021 19:00:06 +0200 Subject: [PATCH] Refactor Dockerfiles for better cacheability --- api/{dev.Dockerfile => Dockerfile} | 2 -- api/fpm.Dockerfile | 25 ----------------- api/rr.Dockerfile | 25 ----------------- docker-compose.yml | 6 ++-- docker/{php => api}/.env | 0 docker/api/fpm.Dockerfile | 29 +++++++++++++++++++ docker/{php => api}/log.conf | 0 docker/api/rr.Dockerfile | 37 ++++++++++++++++++++++++ docker/worker/Dockerfile | 45 ++++++++++++++++++++++++++++++ docker/worker/supervisord.conf | 2 ++ front/Dockerfile | 2 ++ 11 files changed, 118 insertions(+), 55 deletions(-) rename api/{dev.Dockerfile => Dockerfile} (99%) delete mode 100644 api/fpm.Dockerfile delete mode 100644 api/rr.Dockerfile rename docker/{php => api}/.env (100%) create mode 100644 docker/api/fpm.Dockerfile rename docker/{php => api}/log.conf (100%) create mode 100644 docker/api/rr.Dockerfile create mode 100644 docker/worker/Dockerfile create mode 100644 docker/worker/supervisord.conf diff --git a/api/dev.Dockerfile b/api/Dockerfile similarity index 99% rename from api/dev.Dockerfile rename to api/Dockerfile index 2e8e9d7..acf47c7 100644 --- a/api/dev.Dockerfile +++ b/api/Dockerfile @@ -3,8 +3,6 @@ FROM php:7.4-fpm-alpine ENV DATABASE_URL="sqlite:///var/db/app.db" COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ - -# Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer RUN install-php-extensions bcmath intl opcache zip sockets xdebug-^3.0; diff --git a/api/fpm.Dockerfile b/api/fpm.Dockerfile deleted file mode 100644 index f5955a5..0000000 --- a/api/fpm.Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM php:7.4-fpm-alpine - -ENV APP_ENV=prod -ENV DATABASE_URL="sqlite:////var/db/app.db" -ENV PATH=$PATH:/usr/src/app/bin - -RUN apk add --no-cache autoconf openssl-dev g++ make pcre-dev icu-dev zlib-dev libzip-dev git && \ - docker-php-ext-install bcmath intl opcache zip sockets && \ - apk del --purge autoconf g++ make; - -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -COPY . . - -RUN composer install --no-dev --no-scripts --no-plugins --prefer-dist --no-progress --no-interaction && \ - composer dump-autoload --optimize && \ - composer check-platform-reqs && \ - php bin/console cache:warmup - -# Timezone -RUN ln -snf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime && - echo "date.timezone = Europe/Warsaw" >> /usr/local/etc/php/conf.d/datetime.ini; - -WORKDIR /var/www - -CMD ["./bin/docker-init.sh", "php-fpm"] diff --git a/api/rr.Dockerfile b/api/rr.Dockerfile deleted file mode 100644 index 56fa7e2..0000000 --- a/api/rr.Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM php:7.4-alpine - -ENV APP_ENV=prod -ENV DATABASE_URL="sqlite:////var/db/app.db" -ENV PATH=$PATH:/usr/src/app/bin - -RUN apk add --no-cache autoconf openssl-dev g++ make pcre-dev icu-dev zlib-dev libzip-dev git && \ - docker-php-ext-install bcmath intl opcache zip sockets && \ - apk del --purge autoconf g++ make - -WORKDIR /usr/src/app - -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -COPY . . - -RUN composer install --no-dev --no-scripts --no-plugins --prefer-dist --no-progress --no-interaction -RUN ./vendor/bin/rr get-binary --location /usr/local/bin - -RUN composer dump-autoload --optimize && \ - composer check-platform-reqs && \ - php bin/console cache:warmup - -EXPOSE 8080 - -CMD ["./bin/docker-init.sh", "rr", "serve"] diff --git a/docker-compose.yml b/docker-compose.yml index 7fe3baa..f16cebd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,12 +13,12 @@ services: api: build: context: ./api - dockerfile: dev.Dockerfile + dockerfile: Dockerfile env_file: - - ./docker/php/.env + - ./docker/api/.env volumes: - ./api:/var/www:cached - - ./docker/php/log.conf:/usr/local/etc/php-fpm.d/zz-log.conf + - ./docker/api/log.conf:/usr/local/etc/php-fpm.d/zz-log.conf frontend: image: node:15.2.1 diff --git a/docker/php/.env b/docker/api/.env similarity index 100% rename from docker/php/.env rename to docker/api/.env diff --git a/docker/api/fpm.Dockerfile b/docker/api/fpm.Dockerfile new file mode 100644 index 0000000..d683658 --- /dev/null +++ b/docker/api/fpm.Dockerfile @@ -0,0 +1,29 @@ +FROM php:7.4-fpm-alpine + +LABEL maintainer="Kacper Donat " + +COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +WORKDIR /var/www + +RUN install-php-extensions bcmath intl opcache zip sockets; + +COPY composer.json composer.lock ./ + +RUN apk add git && \ + composer install --no-dev --no-scripts --no-plugins --prefer-dist --no-progress --no-interaction && \ + composer dump-autoload --optimize && \ + composer check-platform-reqs && \ + composer clear-cache && \ + apk del --purge git + +COPY . . + +ENV APP_ENV=prod +ENV DATABASE_URL="sqlite:////var/db/app.db" +ENV PATH=$PATH:/var/www/bin + +RUN composer run-script post-install-cmd + +CMD ["./bin/docker-init.sh", "php-fpm"] diff --git a/docker/php/log.conf b/docker/api/log.conf similarity index 100% rename from docker/php/log.conf rename to docker/api/log.conf diff --git a/docker/api/rr.Dockerfile b/docker/api/rr.Dockerfile new file mode 100644 index 0000000..2fc23a0 --- /dev/null +++ b/docker/api/rr.Dockerfile @@ -0,0 +1,37 @@ +FROM php:7.4-alpinpe + +LABEL maintainer="Kacper Donat " + +COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +WORKDIR /var/www + +RUN install-php-extensions bcmath intl opcache zip sockets; + +COPY composer.json composer.lock ./ + +RUN apk add git && \ + composer install --no-dev --no-scripts --no-plugins --prefer-dist --no-progress --no-interaction && \ + composer dump-autoload --optimize && \ + composer check-platform-reqs && \ + composer clear-cache && \ + apk del --purge git + +# this touch is needed because get-binary calls the autoloader +RUN mkdir -p ./src/Functions && \ + touch src/Functions/index.php && \ + ./vendor/bin/rr get-binary --location /usr/local/bin + +COPY . . + +ENV APP_ENV=prod +ENV DATABASE_URL="sqlite:////var/db/app.db" +ENV PATH=$PATH:/var/www/bin + +RUN composer run-script post-install-cmd +RUN mkdir /var/db + +EXPOSE 8080 + +CMD ["./bin/docker-init.sh", "rr", "serve"] diff --git a/docker/worker/Dockerfile b/docker/worker/Dockerfile new file mode 100644 index 0000000..058edf9 --- /dev/null +++ b/docker/worker/Dockerfile @@ -0,0 +1,45 @@ +FROM php:7.4-cli-alpine + +LABEL maintainer="Kacper Donat " + +COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/ +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +RUN apk add supervisor && \ + { \ + echo '[supervisord]'; \ + echo 'nodaemon=true'; \ + echo ; \ + echo '[program:messenger-consumer]'; \ + echo 'command=php /var/www/bin/console messenger:consume main -vv --time-limit=86400 --limit=10'; \ + echo 'startsecs=0'; \ + echo 'start=true'; \ + echo 'autorestart=true'; \ + echo 'stdout_logfile=/dev/stdout'; \ + echo 'stderr_logfile=/dev/stderr'; \ + echo 'stdout_logfile_maxbytes=0'; \ + echo 'stderr_logfile_maxbytes=0'; \ + } | tee /etc/supervisord.conf; + +WORKDIR /var/www + +RUN install-php-extensions bcmath intl opcache zip sockets; + +COPY composer.json composer.lock ./ + +RUN apk add git && \ + composer install --no-dev --no-scripts --no-plugins --prefer-dist --no-progress --no-interaction && \ + composer dump-autoload --optimize && \ + composer check-platform-reqs && \ + composer clear-cache && \ + apk del --purge git + +COPY . . + +ENV APP_ENV=prod +ENV DATABASE_URL="sqlite:////var/db/app.db" +ENV PATH=$PATH:/var/www/bin + +RUN composer run-script post-install-cmd + +CMD ["supervisord", "-c", "/etc/supervisord.conf"] diff --git a/docker/worker/supervisord.conf b/docker/worker/supervisord.conf new file mode 100644 index 0000000..54296b8 --- /dev/null +++ b/docker/worker/supervisord.conf @@ -0,0 +1,2 @@ +[supervisord] +nodaemon=true diff --git a/front/Dockerfile b/front/Dockerfile index f7a57df..4231ba4 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -23,6 +23,8 @@ RUN yarn install --production FROM node:15.2.1-slim +LABEL maintainer="Kacper Donat " + WORKDIR /app COPY --from=build /app/build/ build