现在要构建出一个Apache Superset版本是3.7.2的Docker 镜像。
下载 Superset 3.7.2版本源码
https://github.com/apache/incubator-superset/tree/0.37.2rc2
- 这里选择版本为:0.37.2rc2
修改Dockerfile
在代码仓库的根目录中,有一个Dockerfile,但是这个这个Dockerfile 中使用的 Python 镜像版本和nodejs 的镜像版本较低,并且对于pip
没有换源(使用aliyun),所以将其修改为:
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/*
COPY ./requirements.txt /app/
RUN cd /app \
&& pip install -i https://mirrors.aliyun.com/pypi/simple --upgrade pip \
&& pip install -i https://mirrors.aliyun.com/pypi/simple --no-cache -r requirements.txt
FROM node:12 AS superset-node
ARG NPM_BUILD_CMD="build"
ENV BUILD_CMD=${NPM_BUILD_CMD}
RUN mkdir -p /app/superset-frontend
RUN mkdir -p /app/superset/assets
COPY ./docker/frontend-mem-nag.sh /
COPY ./superset-frontend/package* /app/superset-frontend/
RUN /frontend-mem-nag.sh \
&& cd /app/superset-frontend \
&& npm ci
COPY ./superset-frontend /app/superset-frontend
RUN cd /app/superset-frontend \
&& npm run ${BUILD_CMD} \
&& rm -rf node_modules
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/
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
COPY superset /app/superset
COPY setup.py MANIFEST.in README.md /app/
RUN cd /app \
&& chown -R superset:superset * \
&& pip install -i https://mirrors.aliyun.com/pypi/simple -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"]
执行构建
执行命令
docker build -f Dockerfile -t superset:20200924 .
- 需要注意
在执行
RUN /frontend-mem-nag.sh \
&& cd /app/superset-frontend \
&& npm ci
会检测内存是否有3GB
。
如果没有的情况下会显示如下警告:
然后在执行
RUN cd /app/superset-frontend \
&& npm run ${BUILD_CMD} \
&& rm -rf node_modules
中的npm run build
的时候,会报错,所以在构建前需要设置一下 Docker 的资源。
- 在Docker 的设置中做如下设置
然后就是漫长的等待了。