From b31b96f2c30c7b9df42c5568dc3580f15e3aafd3 Mon Sep 17 00:00:00 2001 From: achirazi Date: Tue, 29 Nov 2022 10:50:40 +0200 Subject: [PATCH 1/3] Structure changes for Multi-Stage Docker file - Work in progress (more changes needed) --- Dockerfile | 31 ------------ Dockerfile.assets | 98 +++++++++++++++++++++++++++++++++++++ Dockerfile.assets_builder | 17 ------- Dockerfile.composer | 17 ------- Dockerfile.critical_css | 48 ------------------ Dockerfile.npm | 13 ----- docker-compose.ci.yml | 18 ++++--- docker-compose.override.yml | 23 +++------ docker-compose.yml | 60 +++++++---------------- 9 files changed, 134 insertions(+), 191 deletions(-) delete mode 100644 Dockerfile create mode 100644 Dockerfile.assets delete mode 100644 Dockerfile.assets_builder delete mode 100644 Dockerfile.composer delete mode 100644 Dockerfile.critical_css delete mode 100644 Dockerfile.npm diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 7a0ed1be8..000000000 --- a/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -ARG image_tag=latest -ARG php_version -FROM elifesciences/journal_assets_builder:${image_tag} AS assets -FROM elifesciences/journal_composer:${image_tag} AS composer -FROM elifesciences/php_7.1_fpm:${php_version} - -ENV PROJECT_FOLDER=/srv/journal -ENV PHP_ENTRYPOINT=web/app.php -WORKDIR ${PROJECT_FOLDER} - -USER root -RUN pecl install redis && \ - docker-php-ext-enable redis && \ - rm -rf /tmp/pear/ -RUN mkdir -p build var && \ - chown --recursive elife:elife . && \ - chown --recursive www-data:www-data var - -COPY --chown=elife:elife .docker/smoke_tests.sh ./ -COPY --chown=elife:elife bin/ bin/ -COPY --chown=elife:elife web/ web/ -COPY --chown=elife:elife app/ app/ -COPY --chown=elife:elife build/critical-css/ build/critical-css/ -COPY --from=assets --chown=elife:elife /build/rev-manifest.json build/ -COPY --from=assets --chown=elife:elife /web/ /srv/journal/web/ -COPY --from=composer --chown=elife:elife /app/vendor/ vendor/ -COPY --chown=elife:elife src/ src/ - -USER www-data - -HEALTHCHECK --interval=5s CMD HTTP_HOST=localhost assert_fpm /ping 'pong' diff --git a/Dockerfile.assets b/Dockerfile.assets new file mode 100644 index 000000000..33e347eab --- /dev/null +++ b/Dockerfile.assets @@ -0,0 +1,98 @@ +#Dockerfile.npm + +ARG node_version +FROM node:${node_version} as npm + +RUN apt-get update && apt-get install --no-install-recommends -y \ + nasm \ + libvips-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /srv/journal/ + +RUN npm install + +#Dockerfile.composer + +FROM composer:1.6.4 + +ARG composer_dev_arg + +RUN apk add --no-cache \ + patch + +WORKDIR /srv/journal/ + +RUN composer --no-interaction install ${composer_dev_arg} --ignore-platform-reqs --no-autoloader --no-suggest --prefer-dist + +RUN composer --no-interaction dump-autoload ${composer_dev_arg} --classmap-authoritative + +#Dockerfile.assets-builder + +WORKDIR /srv/journal/ + +RUN apt-get update && apt-get install --no-install-recommends -y \ + libvips \ + && rm -rf /var/lib/apt/lists/* + +RUN node_modules/.bin/gulp assets + +#Dockerfile + +ARG php_version +FROM elifesciences/php_7.1_fpm:${php_version} + +ENV PROJECT_FOLDER=/srv/journal/ +ENV PHP_ENTRYPOINT=web/app.php +WORKDIR ${PROJECT_FOLDER} + +USER root +RUN pecl install redis && \ + docker-php-ext-enable redis && \ + rm -rf /tmp/pear/ +RUN mkdir -p build var && \ + chown --recursive elife:elife . && \ + chown --recursive www-data:www-data var + +USER www-data + +HEALTHCHECK --interval=5s CMD HTTP_HOST=localhost assert_fpm /ping 'pong' + +#Dockerfile.critical_css + +FROM pinterb/jq:0.0.16 AS jq + +# From list at https://developers.google.com/web/tools/puppeteer/troubleshooting#chrome_headless_doesnt_launch +RUN apt-get update && apt-get install --no-install-recommends -y \ + fonts-liberation \ + gconf-service \ + libappindicator1 \ + libasound2 \ + libatk1.0-0 \ + libcups2 \ + libdbus-1-3 \ + libgconf-2-4 \ + libgtk-3-0 \ + libnspr4 \ + libnss3 \ + libvips \ + libx11-xcb1 \ + libxcomposite1 \ + libxcursor1 \ + libxdamage1 \ + libxfixes3 \ + libxi6 \ + libxrandr2 \ + libxss1 \ + libxtst6 \ + locales \ + lsb-release \ + unzip \ + xdg-utils \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /srv/journal/ + +RUN mkdir -p build/critical-css + +CMD node_modules/.bin/gulp critical-css:generate && ./check_critical_css.sh \ No newline at end of file diff --git a/Dockerfile.assets_builder b/Dockerfile.assets_builder deleted file mode 100644 index a03e7fff3..000000000 --- a/Dockerfile.assets_builder +++ /dev/null @@ -1,17 +0,0 @@ -ARG image_tag=latest -ARG node_version -FROM elifesciences/journal_composer:${image_tag} AS composer -FROM elifesciences/journal_npm:${image_tag} as npm -FROM node:${node_version} - -RUN apt-get update && apt-get install --no-install-recommends -y \ - libvips \ - && rm -rf /var/lib/apt/lists/* - -COPY --from=npm /node_modules/ node_modules/ - -COPY assets/images/ assets/images/ -COPY gulpfile.js ./ -COPY --from=composer /app/vendor/elife/patterns/resources/assets/ vendor/elife/patterns/resources/assets/ - -RUN node_modules/.bin/gulp assets diff --git a/Dockerfile.composer b/Dockerfile.composer deleted file mode 100644 index f54e3a3fd..000000000 --- a/Dockerfile.composer +++ /dev/null @@ -1,17 +0,0 @@ -FROM composer:1.6.4 - -ARG composer_dev_arg - -RUN apk add --no-cache \ - patch - -COPY composer.json \ - composer.lock \ - ./ - -RUN composer --no-interaction install ${composer_dev_arg} --ignore-platform-reqs --no-autoloader --no-suggest --prefer-dist - -COPY test/ test/ -COPY src/ src/ - -RUN composer --no-interaction dump-autoload ${composer_dev_arg} --classmap-authoritative diff --git a/Dockerfile.critical_css b/Dockerfile.critical_css deleted file mode 100644 index bf070d450..000000000 --- a/Dockerfile.critical_css +++ /dev/null @@ -1,48 +0,0 @@ -ARG image_tag=latest -ARG node_version -FROM pinterb/jq:0.0.16 AS jq -FROM elifesciences/journal_npm:${image_tag} as npm - -FROM node:${node_version} - -# From list at https://developers.google.com/web/tools/puppeteer/troubleshooting#chrome_headless_doesnt_launch -RUN apt-get update && apt-get install --no-install-recommends -y \ - fonts-liberation \ - gconf-service \ - libappindicator1 \ - libasound2 \ - libatk1.0-0 \ - libcups2 \ - libdbus-1-3 \ - libgconf-2-4 \ - libgtk-3-0 \ - libnspr4 \ - libnss3 \ - libvips \ - libx11-xcb1 \ - libxcomposite1 \ - libxcursor1 \ - libxdamage1 \ - libxfixes3 \ - libxi6 \ - libxrandr2 \ - libxss1 \ - libxtst6 \ - locales \ - lsb-release \ - unzip \ - xdg-utils \ - && rm -rf /var/lib/apt/lists/* - -COPY --from=jq /usr/local/bin/jq /usr/bin/jq - -RUN mkdir -p build/critical-css - -COPY --from=npm /node_modules/ node_modules/ - -COPY check_critical_css.sh \ - critical-css.json \ - gulpfile.js \ - ./ - -CMD node_modules/.bin/gulp critical-css:generate && ./check_critical_css.sh diff --git a/Dockerfile.npm b/Dockerfile.npm deleted file mode 100644 index ac63629e4..000000000 --- a/Dockerfile.npm +++ /dev/null @@ -1,13 +0,0 @@ -ARG node_version -FROM node:${node_version} as npm - -RUN apt-get update && apt-get install --no-install-recommends -y \ - nasm \ - libvips-dev \ - && rm -rf /var/lib/apt/lists/* - -COPY npm-shrinkwrap.json \ - package.json \ - ./ - -RUN npm install diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 5bb6a9765..98bd2465e 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -1,18 +1,15 @@ version: '3' services: - composer: - build: - args: - composer_dev_arg: --no-dev - composer-dev: + assets: build: context: . - dockerfile: Dockerfile.composer + dockerfile: Dockerfile.assets args: composer_dev_arg: - image: elifesciences/journal_composer_dev:${IMAGE_TAG} command: /bin/bash + volumes: + - shared_volume:/srv/journal/ selenium: image: selenium/standalone-chrome${SELENIUM_IMAGE_SUFFIX}:2.53.1 ports: @@ -20,6 +17,7 @@ services: - "5900:5900" # VNC connection for debug images volumes: - /dev/shm:/dev/shm + - shared_volume:/srv/journal/ ci: build: context: . @@ -31,20 +29,24 @@ services: - ./.docker/php.ini:/usr/local/etc/php/conf.d/x-dev.ini - ./.docker/parameters.yml:/srv/journal/app/config/parameters.yml - fixtures:/srv/journal/var/fixtures + - shared_volume:/srv/journal/ environment: - APP_ENV=ci depends_on: - - composer-dev + - assets - app - selenium app: volumes: - fixtures:/srv/journal/var/fixtures + - shared_volume:/srv/journal/ environment: - APP_ENV=ci web: volumes: - ./assets/tests:/srv/journal/web/tests + - shared_volume:/srv/journal/ volumes: + shared_volume: fixtures: diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 53ba018e4..084110d41 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,36 +1,33 @@ version: '3' services: - composer: + assets: build: args: composer_dev_arg: volumes: - - ./composer.json:/app/composer.json - - ./composer.lock:/app/composer.lock + - ./composer.json:/srv/journal/composer.json + - ./composer.lock:/srv/journal/composer.lock - type: volume source: vendor - target: /app/vendor + target: /srv/journal/vendor - type: bind source: ./vendor - target: /app/vendor - npm: - volumes: + target: /srv/journal/vendor - ./npm-shrinkwrap.json:/npm-shrinkwrap.json - ./package.json:/package.json - - node_modules:/node_modules - assets_builder: - volumes: - ./assets/images:/assets/images - assets:/web - build:/build - node_modules:/node_modules - ./gulpfile.js:/gulpfile.js + - critical_css:/build/critical-css + app: environment: - APP_ENV=${APP_ENV} volumes: - - ./:/srv/journal + # - / - ./.docker/php.ini:/usr/local/etc/php/conf.d/x-dev.ini - /srv/journal/var - build:/srv/journal/build @@ -44,10 +41,6 @@ services: web: volumes: - assets:/srv/journal/web - critical_css: - volumes: - - critical_css:/build/critical-css - - node_modules:/node_modules volumes: assets: diff --git a/docker-compose.yml b/docker-compose.yml index 8a064f06f..c4271a4f8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,34 +1,25 @@ version: '3' services: - composer: + api_dummy: + image: elifesciences/api-dummy:${DEPENDENCIES_API_DUMMY} + ports: + - '${JOURNAL_API_DUMMY_PORT}:8080' + assets: build: context: . - dockerfile: Dockerfile.composer + dockerfile: Dockerfile.assets args: composer_dev_arg: ${COMPOSER_DEV_ARG} - image: elifesciences/journal_composer:${IMAGE_TAG} - command: /bin/bash - npm: - build: - context: . - dockerfile: Dockerfile.npm - args: node_version: ${NODE_VERSION} - image: elifesciences/journal_npm:${IMAGE_TAG} + image_tag: ${IMAGE_TAG} + command: /bin/bash + environment: + - CRITICAL_CSS_BASE_URL=http://web:8080 + volumes: + - shared_volume:/srv/journal/ redis: image: redis:6.2-alpine - assets_builder: - build: - context: . - dockerfile: Dockerfile.assets_builder - args: - image_tag: ${IMAGE_TAG} - node_version: ${NODE_VERSION} - image: elifesciences/journal_assets_builder:${IMAGE_TAG} - depends_on: - - composer - - npm app: build: context: . @@ -41,10 +32,9 @@ services: - SYMFONY__API_KEY=${API_KEY} image: elifesciences/journal:${IMAGE_TAG} volumes: - - ./.docker/parameters.yml:/srv/journal/app/config/parameters.yml + - shared_volume:/srv/journal/ depends_on: - - assets_builder - - composer + - assets - redis web: build: @@ -57,21 +47,7 @@ services: - '${JOURNAL_PORT}:80' depends_on: - app - api_dummy: - image: elifesciences/api-dummy:${DEPENDENCIES_API_DUMMY} - ports: - - '${JOURNAL_API_DUMMY_PORT}:8080' - critical_css: - build: - context: . - dockerfile: Dockerfile.critical_css - args: - image_tag: ${IMAGE_TAG} - node_version: ${NODE_VERSION} - environment: - - CRITICAL_CSS_BASE_URL=http://web:8080 - image: elifesciences/journal_critical_css:${IMAGE_TAG} - depends_on: - - npm - - web - - api_dummy + + +volumes: + shared_volume: \ No newline at end of file From b82af95498fca88a418efa4c081a4d225f05af2d Mon Sep 17 00:00:00 2001 From: achirazi Date: Thu, 12 Jan 2023 15:33:06 +0200 Subject: [PATCH 2/3] Switch to single multi-stage dockerfile --- Dockerfile | 169 ++++++++++++++++++++++++++++++++++++ Dockerfile.assets | 98 --------------------- Dockerfile.ci | 26 ------ Dockerfile.web | 6 -- Jenkinsfile | 2 +- docker-compose.ci.yml | 28 +++--- docker-compose.override.yml | 22 ++--- docker-compose.yml | 59 ++++++++----- 8 files changed, 229 insertions(+), 181 deletions(-) create mode 100644 Dockerfile delete mode 100644 Dockerfile.assets delete mode 100644 Dockerfile.ci delete mode 100644 Dockerfile.web diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..a3d513dd1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,169 @@ +ARG node_version +ARG composer_dev_arg +ARG php_version +ARG image_tag=latest + +# NPM + +FROM node:${node_version} as npm + +RUN apt-get update && apt-get install --no-install-recommends -y \ + nasm \ + libvips-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY npm-shrinkwrap.json \ + package.json \ + ./ + +RUN npm install + +# Composer + +FROM composer:1.6.4 as composer + +RUN apk add --no-cache \ + patch + +COPY composer.json \ + composer.lock \ + ./ + +RUN composer --no-interaction install ${composer_dev_arg} --ignore-platform-reqs --no-autoloader --no-suggest --prefer-dist + +COPY test/ test/ +COPY src/ src/ + +RUN composer --no-interaction dump-autoload ${composer_dev_arg} --classmap-authoritative + +# Assets-builder + +FROM composer +FROM npm AS assets + +RUN apt-get update && apt-get install --no-install-recommends -y \ + libvips \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=npm /node_modules/ node_modules/ + +COPY assets/images/ assets/images/ +COPY gulpfile.js ./ +COPY --from=composer /app/vendor/elife/patterns/resources/assets/ vendor/elife/patterns/resources/assets/ + +RUN node_modules/.bin/gulp assets + +# Dockerfile + +FROM assets +FROM composer +FROM elifesciences/php_7.1_fpm:${php_version} as app + +ENV PROJECT_FOLDER=/srv/journal/ +ENV PHP_ENTRYPOINT=web/app.php +WORKDIR ${PROJECT_FOLDER} + +USER root +RUN pecl install redis && \ + docker-php-ext-enable redis && \ + rm -rf /tmp/pear/ +RUN mkdir -p build var && \ + chown --recursive elife:elife . && \ + chown --recursive www-data:www-data var + +COPY --chown=elife:elife .docker/smoke_tests.sh ./ +COPY --chown=elife:elife bin/ bin/ +COPY --chown=elife:elife web/ web/ +COPY --chown=elife:elife app/ app/ +COPY --chown=elife:elife build/critical-css/ build/critical-css/ +COPY --from=assets --chown=elife:elife /build/rev-manifest.json build/ +COPY --from=assets --chown=elife:elife /web/ /srv/journal/web/ +COPY --from=composer --chown=elife:elife /app/vendor/ vendor/ +COPY --chown=elife:elife src/ src/ + +USER www-data + +HEALTHCHECK --interval=5s CMD HTTP_HOST=localhost assert_fpm /ping 'pong' + +# Critical_css + +FROM pinterb/jq:0.0.16 as jq +FROM npm as critical_css + +# From list at https://developers.google.com/web/tools/puppeteer/troubleshooting#chrome_headless_doesnt_launch +RUN apt-get update && apt-get install --no-install-recommends -y \ + fonts-liberation \ + gconf-service \ + libappindicator1 \ + libasound2 \ + libatk1.0-0 \ + libcups2 \ + libdbus-1-3 \ + libgconf-2-4 \ + libgtk-3-0 \ + libnspr4 \ + libnss3 \ + libvips \ + libx11-xcb1 \ + libxcomposite1 \ + libxcursor1 \ + libxdamage1 \ + libxfixes3 \ + libxi6 \ + libxrandr2 \ + libxss1 \ + libxtst6 \ + locales \ + lsb-release \ + unzip \ + xdg-utils \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=jq /usr/local/bin/jq /usr/bin/jq + +RUN mkdir -p build/critical-css + +COPY --from=npm /node_modules/ node_modules/ + +COPY check_critical_css.sh \ + critical-css.json \ + gulpfile.js \ + ./ + +CMD node_modules/.bin/gulp critical-css:generate && ./check_critical_css.sh + +# CI + +FROM jq +FROM composer +FROM app as ci + +USER root +RUN mkdir -p build/ci var/fixtures && \ + chown --recursive www-data:www-data build/ci var/fixtures + +COPY --from=jq /usr/local/bin/jq /usr/bin/jq + +COPY --from=composer /usr/bin/composer /usr/bin/composer + +COPY --chown=elife:elife \ + behat.yml.dist \ + phpunit.xml.dist \ + phpcs.xml.dist \ + ./ +COPY --chown=elife:elife .ci/ .ci/ +COPY --chown=elife:elife assets/tests/ assets/tests/ +COPY --chown=elife:elife composer.json composer.lock ./ +COPY --from=composer --chown=elife:elife /app/vendor/ vendor/ +COPY --chown=elife:elife features/ features/ +COPY --chown=elife:elife test/ test/ + +USER www-data + +# Web + +FROM app +FROM nginx:1.13.12-alpine as web + +COPY .docker/nginx-default.conf /etc/nginx/conf.d/default.conf +COPY --from=app /srv/journal/web/ /srv/journal/web/ diff --git a/Dockerfile.assets b/Dockerfile.assets deleted file mode 100644 index 33e347eab..000000000 --- a/Dockerfile.assets +++ /dev/null @@ -1,98 +0,0 @@ -#Dockerfile.npm - -ARG node_version -FROM node:${node_version} as npm - -RUN apt-get update && apt-get install --no-install-recommends -y \ - nasm \ - libvips-dev \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /srv/journal/ - -RUN npm install - -#Dockerfile.composer - -FROM composer:1.6.4 - -ARG composer_dev_arg - -RUN apk add --no-cache \ - patch - -WORKDIR /srv/journal/ - -RUN composer --no-interaction install ${composer_dev_arg} --ignore-platform-reqs --no-autoloader --no-suggest --prefer-dist - -RUN composer --no-interaction dump-autoload ${composer_dev_arg} --classmap-authoritative - -#Dockerfile.assets-builder - -WORKDIR /srv/journal/ - -RUN apt-get update && apt-get install --no-install-recommends -y \ - libvips \ - && rm -rf /var/lib/apt/lists/* - -RUN node_modules/.bin/gulp assets - -#Dockerfile - -ARG php_version -FROM elifesciences/php_7.1_fpm:${php_version} - -ENV PROJECT_FOLDER=/srv/journal/ -ENV PHP_ENTRYPOINT=web/app.php -WORKDIR ${PROJECT_FOLDER} - -USER root -RUN pecl install redis && \ - docker-php-ext-enable redis && \ - rm -rf /tmp/pear/ -RUN mkdir -p build var && \ - chown --recursive elife:elife . && \ - chown --recursive www-data:www-data var - -USER www-data - -HEALTHCHECK --interval=5s CMD HTTP_HOST=localhost assert_fpm /ping 'pong' - -#Dockerfile.critical_css - -FROM pinterb/jq:0.0.16 AS jq - -# From list at https://developers.google.com/web/tools/puppeteer/troubleshooting#chrome_headless_doesnt_launch -RUN apt-get update && apt-get install --no-install-recommends -y \ - fonts-liberation \ - gconf-service \ - libappindicator1 \ - libasound2 \ - libatk1.0-0 \ - libcups2 \ - libdbus-1-3 \ - libgconf-2-4 \ - libgtk-3-0 \ - libnspr4 \ - libnss3 \ - libvips \ - libx11-xcb1 \ - libxcomposite1 \ - libxcursor1 \ - libxdamage1 \ - libxfixes3 \ - libxi6 \ - libxrandr2 \ - libxss1 \ - libxtst6 \ - locales \ - lsb-release \ - unzip \ - xdg-utils \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR /srv/journal/ - -RUN mkdir -p build/critical-css - -CMD node_modules/.bin/gulp critical-css:generate && ./check_critical_css.sh \ No newline at end of file diff --git a/Dockerfile.ci b/Dockerfile.ci deleted file mode 100644 index 8bd2b29c5..000000000 --- a/Dockerfile.ci +++ /dev/null @@ -1,26 +0,0 @@ -ARG image_tag=latest -FROM pinterb/jq:0.0.16 AS jq -FROM elifesciences/journal_composer_dev:${image_tag} AS composer -FROM elifesciences/journal:${image_tag} - -USER root -RUN mkdir -p build/ci var/fixtures && \ - chown --recursive www-data:www-data build/ci var/fixtures - -COPY --from=jq /usr/local/bin/jq /usr/bin/jq - -COPY --from=composer /usr/bin/composer /usr/bin/composer - -COPY --chown=elife:elife \ - behat.yml.dist \ - phpunit.xml.dist \ - phpcs.xml.dist \ - ./ -COPY --chown=elife:elife .ci/ .ci/ -COPY --chown=elife:elife assets/tests/ assets/tests/ -COPY --chown=elife:elife composer.json composer.lock ./ -COPY --from=composer --chown=elife:elife /app/vendor/ vendor/ -COPY --chown=elife:elife features/ features/ -COPY --chown=elife:elife test/ test/ - -USER www-data diff --git a/Dockerfile.web b/Dockerfile.web deleted file mode 100644 index fe9fcc1f0..000000000 --- a/Dockerfile.web +++ /dev/null @@ -1,6 +0,0 @@ -ARG image_tag=latest -FROM elifesciences/journal:${image_tag} AS app -FROM nginx:1.13.12-alpine - -COPY .docker/nginx-default.conf /etc/nginx/conf.d/default.conf -COPY --from=app /srv/journal/web/ /srv/journal/web/ diff --git a/Jenkinsfile b/Jenkinsfile index f5ac8f6ee..ca4727849 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -53,7 +53,7 @@ elifePipeline { def tagName = branchName.replaceAll("/", "_") image.tag(tagName).push() } - + elifeMainlineOnly { image.push() } diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 98bd2465e..176b1daf3 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -1,15 +1,19 @@ -version: '3' +version: '3.4' services: - assets: + composer: + build: + args: + composer_dev_arg: --no-dev + composer-dev: build: context: . - dockerfile: Dockerfile.assets + dockerfile: Dockerfile + target: composer args: composer_dev_arg: + node_version: ${NODE_VERSION} command: /bin/bash - volumes: - - shared_volume:/srv/journal/ selenium: image: selenium/standalone-chrome${SELENIUM_IMAGE_SUFFIX}:2.53.1 ports: @@ -17,36 +21,32 @@ services: - "5900:5900" # VNC connection for debug images volumes: - /dev/shm:/dev/shm - - shared_volume:/srv/journal/ ci: build: context: . - dockerfile: Dockerfile.ci + dockerfile: Dockerfile + target: ci args: - image_tag: ${IMAGE_TAG} - image: elifesciences/journal_ci:${IMAGE_TAG} + node_version: ${NODE_VERSION} + php_version: ${PHP_VERSION} volumes: - ./.docker/php.ini:/usr/local/etc/php/conf.d/x-dev.ini - ./.docker/parameters.yml:/srv/journal/app/config/parameters.yml - fixtures:/srv/journal/var/fixtures - - shared_volume:/srv/journal/ environment: - APP_ENV=ci depends_on: - - assets + - composer-dev - app - selenium app: volumes: - fixtures:/srv/journal/var/fixtures - - shared_volume:/srv/journal/ environment: - APP_ENV=ci web: volumes: - ./assets/tests:/srv/journal/web/tests - - shared_volume:/srv/journal/ volumes: - shared_volume: fixtures: diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 084110d41..b99125418 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,4 +1,4 @@ -version: '3' +version: '3.4' services: assets: @@ -8,12 +8,7 @@ services: volumes: - ./composer.json:/srv/journal/composer.json - ./composer.lock:/srv/journal/composer.lock - - type: volume - source: vendor - target: /srv/journal/vendor - - type: bind - source: ./vendor - target: /srv/journal/vendor + - ./vendor:/srv/journal/vendor - ./npm-shrinkwrap.json:/npm-shrinkwrap.json - ./package.json:/package.json - ./assets/images:/assets/images @@ -27,24 +22,21 @@ services: environment: - APP_ENV=${APP_ENV} volumes: - # - / - ./.docker/php.ini:/usr/local/etc/php/conf.d/x-dev.ini - /srv/journal/var - build:/srv/journal/build - critical_css:/srv/journal/build/critical-css - - type: volume - source: vendor - target: /srv/journal/vendor - - type: bind - source: ./vendor - target: /srv/journal/vendor + - ./vendor:/srv/journal/vendor web: volumes: - assets:/srv/journal/web + critical_css: + volumes: + - critical_css:/build/critical-css + - node_modules:/node_modules volumes: assets: build: critical_css: node_modules: - vendor: diff --git a/docker-compose.yml b/docker-compose.yml index c4271a4f8..ece0e3c91 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,53 +1,70 @@ -version: '3' +version: '3.4' services: - api_dummy: - image: elifesciences/api-dummy:${DEPENDENCIES_API_DUMMY} - ports: - - '${JOURNAL_API_DUMMY_PORT}:8080' + composer: + build: + context: . + dockerfile: Dockerfile + target: composer + args: + node_version: ${NODE_VERSION} + composer_dev_arg: ${COMPOSER_DEV_ARG} + command: /bin/bash assets: build: context: . - dockerfile: Dockerfile.assets + dockerfile: Dockerfile + target: assets args: composer_dev_arg: ${COMPOSER_DEV_ARG} node_version: ${NODE_VERSION} - image_tag: ${IMAGE_TAG} command: /bin/bash - environment: - - CRITICAL_CSS_BASE_URL=http://web:8080 - volumes: - - shared_volume:/srv/journal/ redis: image: redis:6.2-alpine app: build: context: . + dockerfile: Dockerfile + target: app args: - image_tag: ${IMAGE_TAG} + node_version: ${NODE_VERSION} php_version: ${PHP_VERSION} environment: - SYMFONY__API_URL=${API_URL} - SYMFONY__API_URL_PUBLIC=${API_URL_PUBLIC} - SYMFONY__API_KEY=${API_KEY} - image: elifesciences/journal:${IMAGE_TAG} volumes: - - shared_volume:/srv/journal/ + - ./.docker/parameters.yml:/srv/journal/app/config/parameters.yml depends_on: - assets - redis web: build: context: . - dockerfile: Dockerfile.web + dockerfile: Dockerfile + target: web args: - image_tag: ${IMAGE_TAG} - image: elifesciences/journal_web:${IMAGE_TAG} + node_version: ${NODE_VERSION} + php_version: ${PHP_VERSION} ports: - '${JOURNAL_PORT}:80' depends_on: - app - - -volumes: - shared_volume: \ No newline at end of file + api_dummy: + image: elifesciences/api-dummy:${DEPENDENCIES_API_DUMMY} + ports: + - '${JOURNAL_API_DUMMY_PORT}:8080' + critical_css: + build: + context: . + dockerfile: Dockerfile + target: critical_css + args: + node_version: ${NODE_VERSION} + php_version: ${PHP_VERSION} + environment: + - CRITICAL_CSS_BASE_URL=http://web:8080 + depends_on: + - assets + - web + - api_dummy \ No newline at end of file From 419813c82fd53e6bd4100d29566508e996624253 Mon Sep 17 00:00:00 2001 From: achirazi Date: Mon, 30 Jan 2023 14:03:55 +0200 Subject: [PATCH 3/3] Removed volumes for npm and altered Jenkins pipe --- Dockerfile | 9 +++------ Jenkinsfile | 2 +- README.md | 14 +++++++++++--- docker-compose.ci.yml | 13 +++++++++++++ docker-compose.override.yml | 8 +++----- docker-compose.yml | 2 +- 6 files changed, 32 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index a3d513dd1..eca882967 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,6 @@ RUN composer --no-interaction dump-autoload ${composer_dev_arg} --classmap-autho # Assets-builder -FROM composer FROM npm AS assets RUN apt-get update && apt-get install --no-install-recommends -y \ @@ -55,8 +54,6 @@ RUN node_modules/.bin/gulp assets # Dockerfile -FROM assets -FROM composer FROM elifesciences/php_7.1_fpm:${php_version} as app ENV PROJECT_FOLDER=/srv/journal/ @@ -85,6 +82,9 @@ USER www-data HEALTHCHECK --interval=5s CMD HTTP_HOST=localhost assert_fpm /ping 'pong' +FROM app as app_tests +COPY --chown=elife:elife test/ test/ + # Critical_css FROM pinterb/jq:0.0.16 as jq @@ -134,8 +134,6 @@ CMD node_modules/.bin/gulp critical-css:generate && ./check_critical_css.sh # CI -FROM jq -FROM composer FROM app as ci USER root @@ -162,7 +160,6 @@ USER www-data # Web -FROM app FROM nginx:1.13.12-alpine as web COPY .docker/nginx-default.conf /etc/nginx/conf.d/default.conf diff --git a/Jenkinsfile b/Jenkinsfile index ca4727849..3ce0866a2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -22,7 +22,7 @@ elifePipeline { dockerComposeSmokeTests(commit, [ 'services': [ - 'app': './smoke_tests.sh', + 'app_t': './smoke_tests.sh', ], 'blackbox': [ './smoke_tests.sh localhost 8080', diff --git a/README.md b/README.md index 9764d8cab..6f7929856 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,17 @@ When using Windows to bypass the main errors we recommend to follow the next : Docker Installation - Running the site locally ---------------------------------------------- -1. Run `composer install` to generate vendor files locally -2. Run `docker-compose up --build` -3. Open `http://localhost:8080` in your browser. +
+In order to sync vendor files with local + 1. Add `./` between `-` and `vendor` in docker-compose.override.yml at lines 11 and 28 +
+ 2. Erase `vendor` volume from docker-compose.override.yml +
+ 3. Run `composer install` to generate vendor files locally +
+ +1. Run `docker-compose up --build` +2. Open `http://localhost:8080` in your browser. To start/restart the containers use these commands: `docker-compose down --volumes --remove-orphans && docker-compose up --build` diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 176b1daf3..52bf8bd43 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -38,12 +38,25 @@ services: depends_on: - composer-dev - app + - app_t - selenium app: volumes: - fixtures:/srv/journal/var/fixtures environment: - APP_ENV=ci + app_t: + build: + context: . + dockerfile: Dockerfile + target: app_tests + args: + node_version: ${NODE_VERSION} + php_version: ${PHP_VERSION} + volumes: + - fixtures:/srv/journal/var/fixtures + environment: + - APP_ENV=ci web: volumes: - ./assets/tests:/srv/journal/web/tests diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 0c4b1edc1..3e2db9973 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -8,9 +8,7 @@ services: volumes: - ./composer.json:/app/composer.json - ./composer.lock:/app/composer.lock - - ./vendor:/app/vendor - npm: - volumes: + - vendor:/app/vendor - ./npm-shrinkwrap.json:/npm-shrinkwrap.json - ./package.json:/package.json - ./assets/images:/assets/images @@ -19,7 +17,6 @@ services: - node_modules:/node_modules - ./gulpfile.js:/gulpfile.js - critical_css:/build/critical-css - app: environment: - APP_ENV=${APP_ENV} @@ -28,7 +25,7 @@ services: - /srv/journal/var - build:/srv/journal/build - critical_css:/srv/journal/build/critical-css - - ./vendor:/srv/journal/vendor + - vendor:/srv/journal/vendor web: volumes: - assets:/srv/journal/web @@ -42,3 +39,4 @@ volumes: build: critical_css: node_modules: + vendor: diff --git a/docker-compose.yml b/docker-compose.yml index ece0e3c91..5b397703f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -67,4 +67,4 @@ services: depends_on: - assets - web - - api_dummy \ No newline at end of file + - api_dummy