Docker安装 Superset

Posted by luoruiqing on July 27, 2020

Docker安装

  • 查找镜像
  • 拉取镜像
  • 启动
  • 初始化数据库
  • 完成

查找镜像

  • hub.docker.com 搜索
  • 命令行
    1
    2
    3
    4
    5
    
      # 选择其中一个镜像(建议STARS最多的), 复制其`NAME`列
      docker search superset
      # NAME                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
      # amancevice/superset            Superset on Debian+Python3                      245                                     [OK]
      # ...
    

拉取镜像

这里选择了 amancevice/superset 镜像, 执行命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
docker pull amancevice/superset
# Using default tag: latest
# latest: Pulling from amancevice/superset
# 90fe46dd8199: Downloading
# 35a4f1977689: Download complete
# bbc37f14aded: Downloading
# 74e27dc593d4: Download complete
# 4352dcff7819: Download complete
# 1847e662e737: Download complete
# 11d40aa4a4d0: Download complete
# 423a225c2f8b: Download complete
# b3cdb3cfe4ca: Download complete
# d84ca76f5ef7: Download complete
# 29605419eaab: Download complete
# 0f21f36b180d: Download complete
# 3e3aea33f6ef: Download complete
# latest: Pulling from amancevice/superset
# 90fe46dd8199: Pull complete
# 35a4f1977689: Pull complete
# bbc37f14aded: Pull complete
# 74e27dc593d4: Pull complete
# 4352dcff7819: Pull complete
# 1847e662e737: Pull complete
# 11d40aa4a4d0: Pull complete
# 423a225c2f8b: Pull complete
# b3cdb3cfe4ca: Pull complete
# d84ca76f5ef7: Pull complete
# 29605419eaab: Pull complete
# 0f21f36b180d: Pull complete
# 3e3aea33f6ef: Pull complete
# Digest: sha256:1f7e88850066141a60feac844834deeee25fe0d8ca8e612144e4c83ca0648e84
# Status: Downloaded newer image for amancevice/superset:latest
# docker.io/amancevice/superset:latest

启动

1
2
# docker run --rm -d  -p <本机端口>:<容器端口>/<协议类型> <镜像名称>:<版本>
docker run --rm -d -p 8088:8088/tcp amancevice/superset:latest

查看容器ID

1
2
3
docker ps -a
# CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                   PORTS                    NAMES
# f39bfa6ed149        amancevice/superset:latest   "gunicorn superset.a…"   4 minutes ago       Up 4 minutes (healthy)   0.0.0.0:8088->8088/tcp   hopeful_leakey

如果容器ID存在, 证明启动成功, 使用浏览器打开 http://localhost:8088

img

初始化数据库

获取容器ID:

1
2
3
4
5
6
# 设置镜像名称变量
IMAGE=amancevice/superset
# 获取镜像ID
CID=`docker ps | grep $IMAGE | awk '{print $1}'`
# 初始化系统并创建管理员
docker exec -it $CID superset-init

完成

输入刚刚执行 superset-init 时候的账户密码

img

映射配置

此步骤是为完成服务数据不丢失和个性化配置, 若不挂载数据卷, 数据将会在容器重启或停止后丢失.

img

根据官方文档, 映射的路径有两个, 任意其中一个都可以, 将容器内 /etc/superset 映射到宿主机(本机)文件夹, 以宿主机的目录 ~/superset 为例, 需要做两件事

  • 创建superset_config.py配置文件
  • 启动时映射目录

配置文件

配置项可以通过 superset 官方文档 查阅修改, 这里只修改一个配置 SQLALCHEMY_DATABASE_URI, 该配置是服务数据库的连接配置, 可以根据需要自行调整.

/etc/superset~/superset 是对应关系, 所以将配置 superset_config.py 写入宿主机 ~/superset 下:

1
SQLALCHEMY_DATABASE_URI = 'sqlite:////etc/superset/superset.db'

挂载数据卷

1
2
3
4
5
6
7
# 创建宿主机的目录
cd ~ && mkdir superset
# 创建 superset_config.py 配置文件
echo "SQLALCHEMY_DATABASE_URI = 'sqlite:////etc/superset/superset.db'" >  ~/superset/superset_config.py
# 启动时映射目录, 对接数据卷
# docker run --rm -d  -p <本机端口>:<容器端口>/<协议类型> -v <宿主机路径/本机路径>:<镜像年路径> <镜像名称>:<版本>
docker run --rm -d -p 8088:8088/tcp -v ~/superset:/etc/superset amancevice/superset:latest

按照上述例子启动后, 容器反复重启数据均不会丢失, 若是第一次挂载数据卷, 此时在宿主机应该出现了 ~/superset/superset.db 文件.

img

使用 navicat 或命令行工具即可访问内部数据

img

综合例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 预设参数
IMAGE=amancevice/superset
PORT=8088
# 自动安装
docker pull $IMAGE
# 是否已经存在
CID=`docker ps | grep $IMAGE | awk '{print $1}'`
# 杀掉存在的容器
docker kill $CID
# 启动容器
docker run --rm -d  -p $PORT:8088/tcp $IMAGE
# 执行初始化
CID=`docker ps | grep $IMAGE | awk '{print $1}'`
# 这里需要输入管理员账号密码
docker exec -it $CID superset-init

端口占用

  • port is already allocated: 端口占用, 若上次启动的容器不需要使用, 则执行下面命令停止
1
docker ps | grep amancevice/superset | awk '{print $1}' | xargs docker kill