前置重置:在windows 上安裝好Docker Desktop
superset 在用戶和權限管理的設計,基于flask-appbuild框架,因此如果需要修改配置,可參考Flask-AppBuilder項目的配置方式(config.py文件)。
Flask-AppBuilder
一、流程步驟
1、拉取Superset鏡像
docker pull apache/superset
之后可以用命令 docker images查看容器
2、構(gòu)建容器
docker run -d -p 8080:8088 --name superset apache/superset
-d:后臺運行,先不直接進入容器,是因為要修改superset配置
-p:將superset的8088端口映射到主機的8088端口
--name:給容器起個別名 superset,方便后續(xù)操作【這里我隨便起的】
之后可以用 docker ps 命令查看容器
3、修改superset配置(修改數(shù)據(jù)源)
由于superset的容器內(nèi)沒有vi命令,無法在容器內(nèi)直接修改配置文件,
因此需要將配置文件復制出來外面修改,之后再復制回去。
3.1、從容器中復制配置文件到主機
在宿主機命令窗口(PowerShell)執(zhí)行下面命令
docker cp superset:/app/superset/config.py E:\DockerHouse\test
冒號前的superset是容器名,這里也可以使用容器id
/app/superset/config.py是superset的配置文件
E:\DockerHouse\test是主機的文件夾
通過上面命令將容器的配置文件config.py復制到宿主機,執(zhí)行完命令后
宿主機E:\DockerHouse\test文件夾就有config.py文件了
3.2、直接修改config.py配置
superset后端用的是Flask AppBuilder,這里大家可以根據(jù)自身需要修改配置。
Base Configuration — Flask AppBuilder
FAB默認用的數(shù)據(jù)源是sqlite,我手動將其改為mysql,如下:
# The SQLAlchemy connection string.
# SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
# SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
# SQLALCHEMY_DATABASE_URI = 'postgresql://root:password@localhost/myapp'
SQLALCHEMY_DATABASE_URI = 'mysql://root:root@host.docker.internal:3307/superset?charset=utf8'
host.docker.internal:這是宿主機的訪問地址,我另外有創(chuàng)建了個mysql的容器(創(chuàng)建過程過于簡單這里就不寫了),mysql容器端口映射到宿主機的3307端口,所以這里superset容器可以訪問mysql數(shù)據(jù)庫,此外,我mysql的數(shù)據(jù)庫叫做superset,切記要創(chuàng)建數(shù)據(jù)庫。
3.3、將config.py 配置文件復制回容器
在宿主機命令窗口(PowerShell)執(zhí)行下面命令
docker cp E:\DockerHouse\test\config.py superset:/app/superset
后續(xù)進入容器后,可以使用cat /app/superset/config.py命令檢查下配置是否修改完成。
4、重啟容器、進入容器
docker restart superset
docker exec -it superset /bin/bash
重啟容器后,容器檢查到數(shù)據(jù)庫為空時,會自動在數(shù)據(jù)庫創(chuàng)建一些用戶和權限相關的表(基于flask-appbuild框架,有興趣可以看下)
后面步驟的命令都容器中執(zhí)行。
5、在容器內(nèi)創(chuàng)建管理員賬號(Flask AppBuilder)
superset fab create-admin
按提示創(chuàng)建管理員賬號即可
6、更新superset的相關數(shù)據(jù)模型(即在數(shù)據(jù)庫生成superset的數(shù)據(jù)表)
superset db upgrade
7、導入superset的案例(要梯子的,可以忽略此步驟)
superset load_examples
8、初始化superset(視圖權限,即各個角色的訪問權限)
superset init
9、宿主機訪問superset
http://127.0.0.1:8080/
在步驟2構(gòu)建容器時,我們映射到宿主機的端口就是8080