Created
April 4, 2020 00:13
-
-
Save timesking/5fdda4051309f5dd58eb8b19b8b2ee2c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# Licensed to the Apache Software Foundation (ASF) under one or more | |
# contributor license agreements. See the NOTICE file distributed with | |
# this work for additional information regarding copyright ownership. | |
# The ASF licenses this file to You under the Apache License, Version 2.0 | |
# (the "License"); you may not use this file except in compliance with | |
# the License. You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
# | |
###################################################################### | |
# PY stage that simply does a pip install on our requirements | |
###################################################################### | |
ARG PY_VER=3.6.9 | |
FROM python:${PY_VER} AS superset-py | |
RUN mkdir /app \ | |
&& apt-get update -y \ | |
&& apt-get install -y --no-install-recommends \ | |
build-essential \ | |
default-libmysqlclient-dev \ | |
libpq-dev \ | |
&& rm -rf /var/lib/apt/lists/* | |
# First, we just wanna install requirements, which will allow us to utilize the cache | |
# in order to only build if and only if requirements change | |
COPY ./requirements.txt /app/ | |
RUN cd /app \ | |
&& pip install --no-cache -r requirements.txt | |
###################################################################### | |
# Node stage to deal with static asset construction | |
###################################################################### | |
FROM node:10-jessie AS superset-node | |
# NPM ci first, as to NOT invalidate previous steps except for when package.json changes | |
RUN mkdir -p /app/superset-frontend | |
RUN mkdir -p /app/superset/assets | |
COPY ./superset-frontend/package* /app/superset-frontend/ | |
RUN cd /app/superset-frontend \ | |
&& npm ci | |
# Next, copy in the rest and let webpack do its thing | |
COPY ./superset-frontend /app/superset-frontend | |
# This is BY FAR the most expensive step (thanks Terser!) | |
RUN cd /app/superset-frontend \ | |
&& npm run build \ | |
&& rm -rf node_modules | |
###################################################################### | |
# Final lean image... | |
###################################################################### | |
ARG PY_VER=3.6.9 | |
FROM python:${PY_VER} AS lean | |
ENV LANG=C.UTF-8 \ | |
LC_ALL=C.UTF-8 \ | |
FLASK_ENV=production \ | |
FLASK_APP="superset.app:create_app()" \ | |
PYTHONPATH="/app/pythonpath" \ | |
SUPERSET_HOME="/app/superset_home" \ | |
SUPERSET_PORT=8080 | |
RUN useradd --user-group --no-create-home --no-log-init --shell /bin/bash superset \ | |
&& mkdir -p ${SUPERSET_HOME} ${PYTHONPATH} \ | |
&& apt-get update -y \ | |
&& apt-get install -y --no-install-recommends \ | |
build-essential \ | |
default-libmysqlclient-dev \ | |
libpq-dev \ | |
&& rm -rf /var/lib/apt/lists/* | |
COPY --from=superset-py /usr/local/lib/python3.6/site-packages/ /usr/local/lib/python3.6/site-packages/ | |
# Copying site-packages doesn't move the CLIs, so let's copy them one by one | |
COPY --from=superset-py /usr/local/bin/gunicorn /usr/local/bin/celery /usr/local/bin/flask /usr/bin/ | |
COPY --from=superset-node /app/superset/static/assets /app/superset/static/assets | |
COPY --from=superset-node /app/superset-frontend /app/superset-frontend | |
## Lastly, let's install superset itself | |
COPY superset /app/superset | |
COPY setup.py MANIFEST.in README.md /app/ | |
RUN cd /app \ | |
&& chown -R superset:superset * \ | |
&& pip install -e . | |
COPY ./docker/docker-entrypoint.sh /usr/bin/ | |
WORKDIR /app | |
USER superset | |
HEALTHCHECK CMD ["curl", "-f", "http://localhost:8088/health"] | |
EXPOSE ${SUPERSET_PORT} | |
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] | |
###################################################################### | |
# Dev image... | |
###################################################################### | |
FROM lean AS dev | |
COPY ./requirements-dev.txt ./docker/requirements-extra.txt /app/ | |
USER root | |
RUN cd /app \ | |
&& pip install --no-cache -r requirements-dev.txt -r requirements-extra.txt | |
USER superset |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment