From 7620e1564d8fb46b5ca5a7e1f7c7416c5d08d06c Mon Sep 17 00:00:00 2001 From: Markus Opolka Date: Wed, 2 Oct 2019 09:48:27 +0200 Subject: [PATCH 1/3] Extend .dockerignore file to make image smaller --- .dockerignore | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index b512c09d..c81bbd22 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,9 @@ -node_modules \ No newline at end of file +node_modules/ +docs/ +Dockerfile +*.md +.git +.gitignore +.gitmodules +docker-compose.yml +docker-compose-local.yml \ No newline at end of file From 77e7df7b83fb73a31b8263887fc1a2baa2a0d1ae Mon Sep 17 00:00:00 2001 From: Markus Opolka Date: Wed, 2 Oct 2019 10:56:50 +0200 Subject: [PATCH 2/3] Add more mysql database parameters to entrypoint --- docker-entrypoint.sh | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 52c6ff1e..17d361de 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -12,6 +12,9 @@ Optional parameters: --mongoHost XXX - sets mongo host (default: mongo) --redisHost XXX - sets redis host (default: redis) --mySqlHost XXX - sets mysql host (default: mysql) + --mySqlDatabase XXX - sets mysql database (default: mailtrain) + --mySqlUser XXX - sets mysql user (default: mailtrain) + --mySqlPassword XXX - sets mysql password (default: mailtrain) --withLdap - use if you want to enable LDAP authentication --ldapHost XXX - LDAP Host for authentication (default: ldap) --ldapPort XXX - LDAP port (default: 389) @@ -43,6 +46,9 @@ ldapUidTag="" mongoHost=mongo redisHost=redis mySqlHost=mysql +mySqlDatabase=mailtrain +mySqlUser=mailtrain +mySqlPassword=mailtrain while [ $# -gt 0 ]; do case "$1" in @@ -77,6 +83,18 @@ while [ $# -gt 0 ]; do mySqlHost="$2" shift 2 ;; + --mySqlDatabase) + mySqlDatabase="$2" + shift 2 + ;; + --mySqlUser) + mySqlUser="$2" + shift 2 + ;; + --mySqlPassword) + mySqlPassword="$2" + shift 2 + ;; --withLdap) withLdap=true shift 1 @@ -156,6 +174,9 @@ www: mysql: host: $mySqlHost + database: $mySqlDatabase + user: $mySqlUser + password: $mySqlPassword redis: enabled: true @@ -198,4 +219,5 @@ while ! nc -z $redisHost 6379; do sleep 1; done while ! nc -z $mongoHost 27017; do sleep 1; done cd server -NODE_ENV=production node index.js \ No newline at end of file +NODE_ENV=production node index.js + From 12210a1bf514d138d5371033bec207a859007f1d Mon Sep 17 00:00:00 2001 From: Markus Opolka Date: Wed, 2 Oct 2019 12:02:24 +0200 Subject: [PATCH 3/3] Update Dockerfile to make image smaller - Added multistaged build - Moved production depedencies to final stage - Added more verbose output during build --- Dockerfile | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 337be331..ecaf69d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,12 @@ -FROM node:10.14-alpine +# Mutistaged Node.js Build +FROM node:10-alpine as builder -RUN apk add --update pwgen netcat-openbsd python make gcc git g++ bash imagemagick +# Install system dependencies +RUN set -ex; \ + apk add --update --no-cache \ + make gcc g++ git -# First install dependencies +# Copy package.json dependencies COPY server/package.json /app/server/package.json COPY server/package-lock.json /app/server/package-lock.json COPY client/package.json /app/client/package.json @@ -14,13 +18,29 @@ COPY zone-mta/package-lock.json /app/zone-mta/package-lock.json WORKDIR /app/ -RUN for idx in client shared server zone-mta; do (cd $idx && npm install); done +# Install dependencies in each directory +RUN set -ex; \ + for idx in client shared server zone-mta; do (cd $idx && npm install); done # Later, copy the app files. That improves development speed as buiding the Docker image will not have # to download and install all the NPM dependencies every time there's a change in the source code COPY . /app -RUN cd client && npm run build +RUN set -ex; \ + cd client && \ + npm run build + +# Final Image +FROM node:10-alpine + +WORKDIR /app/ + +# Install system dependencies +RUN set -ex; \ + apk add --update --no-cache \ + pwgen netcat-openbsd bash imagemagick + +COPY --from=builder /app/ /app/ EXPOSE 3000 3003 3004 ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"]