手动构建一个Apache Superset镜像

现在要构建出一个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
如果没有的情况下会显示如下警告:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTo7TnBz-1600958328541)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p1204)]

然后在执行

RUN cd /app/superset-frontend \
        && npm run ${BUILD_CMD} \
        && rm -rf node_modules

中的npm run build的时候,会报错,所以在构建前需要设置一下 Docker 的资源。

  • 在Docker 的设置中做如下设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDBo4j5V-1600958328543)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p1205)]

然后就是漫长的等待了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值