Skip to content

Commit

Permalink
feat: Dockerfile optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
regisb committed May 25, 2023
1 parent 804b70e commit 803894a
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions tutordiscovery/templates/discovery/build/discovery/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,30 @@ RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/var/cache/apt,shari
build-essential libcairo2 libffi-dev libmysqlclient-dev libxml2-dev libxslt-dev libjpeg-dev libssl-dev
ENV LC_ALL en_US.UTF-8

###### Git-clone course-discovery repo
FROM minimal as code
ARG DISCOVERY_REPOSITORY=https://github.com/openedx/course-discovery.git
ARG DISCOVERY_VERSION='{{ OPENEDX_COMMON_VERSION }}'
RUN mkdir -p /openedx/discovery && \
git clone $DISCOVERY_REPOSITORY --branch $DISCOVERY_VERSION --depth 1 /openedx/discovery

##### Empty layer with just the repo at the root.
# This is useful when overriding the build context with a host repo:
# docker build --build-context course-discovery=/path/to/course-discovery
FROM scratch as discovery
COPY --from=code /openedx/discovery /

##### Production layer
FROM minimal as production

# Create app user
ARG APP_USER_ID=1000
RUN if [ "$APP_USER_ID" = 0 ]; then echo "app user may not be root" && false; fi
RUN useradd --home-dir /openedx --create-home --shell /bin/bash --uid ${APP_USER_ID} app
USER ${APP_USER_ID}

ARG DISCOVERY_REPOSITORY=https://github.com/edx/course-discovery.git
ARG DISCOVERY_VERSION='{{ OPENEDX_COMMON_VERSION }}'
RUN mkdir -p /openedx/discovery && \
git clone $DISCOVERY_REPOSITORY --branch $DISCOVERY_VERSION --depth 1 /openedx/discovery
# Copy repo
COPY --chown=app:app --from=discovery / /openedx/discovery
WORKDIR /openedx/discovery

# Setup empty yml config file, which is required by production settings
Expand All @@ -40,6 +55,10 @@ RUN pip install nodeenv==1.7.0
# nodejs version picked from https://github.com/openedx/course-discovery/blob/master/Dockerfile
RUN nodeenv /openedx/nodeenv --node=16.14.2 --prebuilt
ENV PATH /openedx/nodeenv/bin:${PATH}
# Install npm/bower requirements
ARG NPM_REGISTRY='{{ NPM_REGISTRY }}'
RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/openedx/.npm/,sharing=shared,uid=${APP_USER_ID} {% endif %}npm clean-install --no-audit --registry=$NPM_REGISTRY --production
RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/openedx/.cache/bower/,sharing=shared,uid=${APP_USER_ID} {% endif %}./node_modules/.bin/bower install --allow-root --production

# Install python and nodejs requirements
# This is identical to "make production-requirements" but it was split in multiple
Expand All @@ -49,12 +68,6 @@ RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/openedx/.cache/pip,
{% for extra_requirement in DISCOVERY_EXTRA_PIP_REQUIREMENTS %}RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/openedx/.cache/pip,sharing=shared {% endif %}pip install '{{ extra_requirements }}'
{% endfor %}

ARG NPM_REGISTRY='{{ NPM_REGISTRY }}'
USER root
RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/openedx/.npm/,sharing=shared {% endif %}npm install --verbose --no-audit --registry=$NPM_REGISTRY --production
RUN ./node_modules/.bin/bower install --allow-root --production
USER ${APP_USER_ID}

# Install extra requirements
RUN {% if is_buildkit_enabled() %}--mount=type=cache,target=/openedx/.cache/pip,sharing=shared {% endif %}pip install \
# Use redis as a django cache https://pypi.org/project/django-redis/
Expand Down

0 comments on commit 803894a

Please sign in to comment.