Optimize Docker image for Directus (#6081)

This commit is contained in:
Pascal Jufer
2021-06-04 18:47:38 +02:00
committed by GitHub
parent 91253a241d
commit ae65918d1e
2 changed files with 59 additions and 40 deletions

View File

@@ -1,3 +1,23 @@
# Builder image
FROM alpine:latest AS builder
ARG VERSION
ARG REPOSITORY=directus/directus
# Get runtime dependencies from optional dependencies
# defined in package.json of Directus API package
WORKDIR /directus
RUN apk add --no-cache jq \
&& wget -O directus-api-package.json "https://raw.githubusercontent.com/${REPOSITORY}/${VERSION}/api/package.json" \
&& jq '{ \
name: "directus-project", \
version: "1.0.0", \
description: "Directus Project", \
dependencies: .optionalDependencies \
}' \
directus-api-package.json > package.json
# Directus image
FROM node:14-alpine
ARG VERSION
@@ -6,6 +26,8 @@ ARG REPOSITORY=directus/directus
LABEL directus.version="${VERSION}"
LABEL org.opencontainers.image.source https://github.com/${REPOSITORY}
# Default environment variables
# (see https://docs.directus.io/reference/environment-variables/)
ENV \
PORT="8055" \
PUBLIC_URL="/" \
@@ -31,41 +53,54 @@ ENV \
EMAIL_SENDMAIL_NEW_LINE="unix" \
EMAIL_SENDMAIL_PATH="/usr/sbin/sendmail"
# Copy rootfs files
COPY ./rootfs /
# Install system dependencies
# - 'bash' for entrypoint script
# - 'ssmtp' to be able to send mails
RUN \
apk upgrade --no-cache && \
apk add --no-cache bash ssmtp util-linux && \
# Install global node dependencies
npm install -g yargs pino pino-colada && \
# prepare for user space
chown -R node:node /directus
# Install system dependencies
# - 'bash' for entrypoint script
# - 'ssmtp' to be able to send mails
# - 'util-linux' not sure if this is required
apk upgrade --no-cache && apk add --no-cache \
bash \
ssmtp \
util-linux \
# Install global node dependencies
&& npm install -g \
yargs \
pino \
pino-colada \
# Create directory for Directus with corresponding ownership
# (can be omitted on newer Docker versions since WORKDIR below will do the same)
&& mkdir /directus && chown node:node /directus
# Switch to user 'node'
# Switch to user 'node' and directory '/directus'
USER node
WORKDIR /directus
# Install Directus (retry if it fails for some reason) and runtime dependencies
RUN \
for i in $(seq 10); do npm install "directus@${VERSION}" && break || sleep 30; done && \
npm install && \
# Create directories
mkdir -p extensions/displays && \
mkdir -p extensions/interfaces && \
mkdir -p extensions/layouts && \
mkdir -p extensions/modules && \
mkdir -p database && \
mkdir -p uploads
# Get package.json from builder image
COPY --from=builder --chown=node:node /directus/package.json .
RUN \
# Install Directus and runtime dependencies
# (retry if it fails for some reason, e.g. release not published yet)
for i in $(seq 10); do npm install "directus@${VERSION}" && break || sleep 30; done && \
npm install \
# Create data directories
&& mkdir -p \
database \
extensions/displays \
extensions/interfaces \
extensions/layouts \
extensions/modules \
uploads
# Expose data directories as volumes
VOLUME \
/directus/database \
/directus/extensions \
/directus/uploads
# Copy rootfs files
COPY ./rootfs /
EXPOSE 8055
SHELL ["/bin/bash", "-c"]
ENTRYPOINT ["entrypoint"]

View File

@@ -1,16 +0,0 @@
{
"name": "directus-project",
"version": "1.0.0",
"description": "Directus Project",
"dependencies": {
"@keyv/redis": "^2.1.2",
"ioredis": "^4.27.2",
"keyv-memcache": "^1.2.5",
"memcached": "^2.2.2",
"tedious": "^11.0.8",
"mysql": "^2.18.1",
"oracledb": "^5.0.0",
"pg": "^8.6.0",
"sqlite3": "^5.0.2"
}
}