-
Notifications
You must be signed in to change notification settings - Fork 724
容器运行时配置
Hikyuu是一个基于C++/Python的开源量化交易研究框架,用于策略分析及回测。本指南详细说明如何正确启动Hikyuu的Docker容器,包括配置持久化、数据共享、端口映射、环境变量设置和资源限制等关键运行时配置。
Section sources
- readme.md
Hikyuu项目提供了多个Dockerfile用于构建不同的镜像,以满足不同用户的需求。这些Dockerfile位于docker/目录下,主要包括:
- Dockerfile_dev: 基于Ubuntu 24.04的开发环境,包含完整的编译工具链和依赖
- Dockerfile_dev_debian: 基于Debian trixie的开发环境
- Dockerfile_dev_fedora: 基于Fedora最新版的开发环境
- Dockerfile_miniconda: 基于Ubuntu 24.04的轻量级运行环境,仅包含Miniconda和Hikyuu包
用户可以根据自己的需求选择合适的Dockerfile进行镜像构建。对于生产环境,推荐使用Dockerfile_miniconda以获得更小的镜像体积和更快的启动速度。
Section sources
- Dockerfile_dev
- Dockerfile_dev_debian
- Dockerfile_dev_fedora
- Dockerfile_miniconda
使用docker run命令启动Hikyuu容器的基本语法如下:
docker run -it --name hikyuu-container hikyuu-image以下是一个完整的docker run命令示例,包含了所有关键参数:
docker run -it \
--name hikyuu-jupyter \
-p 8888:8888 \
-p 8080:8080 \
-v /path/to/local/test_data:/app/test_data \
-v /path/to/local/hikyuu/config:/app/hikyuu/config \
-v /path/to/local/workspace:/workspace \
-e PYTHONPATH=/app/hikyuu \
-e TZ=Asia/Shanghai \
--memory=4g \
--cpus=2 \
hikyuu:latestSection sources
- Dockerfile_dev
- Dockerfile_miniconda
为了实现配置持久化和数据共享,需要正确设置卷挂载。Hikyuu的关键数据目录包括:
test_data/目录包含测试数据和配置文件,是最重要的持久化目录之一。挂载示例:
-v /path/to/local/test_data:/app/test_data该目录包含:
-
block/: 板块配置文件 -
hikyuu_linux.ini: Linux环境配置文件 -
hikyuu_win.ini: Windows环境配置文件 -
logger.properties: 日志配置文件
hikyuu/config/目录包含框架的配置文件,特别是板块配置文件。挂载示例:
-v /path/to/local/hikyuu/config:/app/hikyuu/config建议挂载一个本地目录作为工作空间,用于保存用户创建的脚本、笔记和输出文件:
-v /path/to/local/workspace:/workspaceSection sources
- test_data/hikyuu_linux.ini
- hikyuu/config/block/dybk.ini
Hikyuu支持多种数据库后端,包括MySQL、SQLite和ClickHouse。在容器内访问这些数据库服务需要正确配置。
Hikyuu的数据库配置主要在hikyuu_linux.ini或hikyuu_win.ini文件中定义,关键配置段包括:
- [baseinfo]: 基础信息存储配置
- [kdata]: K线数据存储配置
- [block]: 板块信息存储配置
要使用MySQL作为数据后端,需在配置文件中设置:
[baseinfo]
type = mysql
host = mysql-host
port = 3306
usr = username
pwd = password
[kdata]
type = mysql
host = mysql-host
port = 3306
usr = username
pwd = passwordSQLite是默认的轻量级数据库选项,配置简单:
[baseinfo]
type = sqlite3
db = ./test_data/stock.db
[kdata]
type = hdf5
sh_day = ./test_data/sh_day.h5
sz_day = ./test_data/sz_day.h5对于大规模数据处理,可以使用ClickHouse:
[baseinfo]
type = clickhouse
host = clickhouse-host
port = 9000
usr = username
pwd = password
[kdata]
type = clickhouse
host = clickhouse-host
port = 9000
usr = username
pwd = passwordSection sources
- test_data/hikyuu_linux.ini
- hikyuu/data/hku_config_template.py
Hikyuu容器可能需要暴露多个端口以支持不同服务。
如果容器内运行Jupyter Notebook或JupyterLab,需要映射Jupyter的默认端口:
-p 8888:8888如果使用Hikyuu的GUI服务,可能需要映射相应的端口:
-p 8080:8080Hikyuu使用IPC(进程间通信)进行数据交换,配置文件中指定了IPC路径:
quotation_server = ipc:///tmp/hikyuu_real.ipc在容器环境中,可能需要通过卷挂载共享IPC文件:
-v /tmp/hikyuu_ipc:/tmpSection sources
- test_data/hikyuu_linux.ini
- hikyuu/data/hku_config_template.py
正确设置环境变量对Hikyuu容器的正常运行至关重要。
必须设置PYTHONPATH以确保Python能够找到Hikyuu模块:
-e PYTHONPATH=/app/hikyuu设置正确的时区对中国股市数据处理非常重要:
-e TZ=Asia/Shanghai对于基于Miniconda的镜像,还需要确保conda环境正确激活:
-e CONDA_DEFAULT_ENV=baseSection sources
- Dockerfile_dev
- Dockerfile_miniconda
为了合理分配系统资源,建议为容器设置资源限制。
根据数据规模设置适当的内存限制:
--memory=4g对于大规模数据处理,可能需要更多内存:
--memory=8g限制容器使用的CPU核心数:
--cpus=2Hikyuu会使用临时目录存储缓存文件,建议挂载一个高性能的临时目录:
-v /tmp/hikyuu_tmp:/app/test_data/tmpSection sources
- Dockerfile_dev
- test_data/hikyuu_linux.ini
不同的Dockerfile构建的镜像在运行时有显著的行为差异,用户需要了解这些差异以正确使用。
基于Dockerfile_dev、Dockerfile_dev_debian和Dockerfile_dev_fedora构建的镜像:
- 包含完整的编译工具链(gcc, make等)
- 包含xmake构建系统
- 从源码克隆并安装Hikyuu
- 体积较大,适合开发和调试
- 启动时会自动激活conda base环境
基于Dockerfile_miniconda构建的镜像:
- 仅包含Miniconda和Hikyuu包
- 体积较小,适合生产环境
- 使用多阶段构建,运行时环境精简
- 需要额外安装某些Python包时,必须进入容器手动安装
- 启动命令为
bash -l,会加载.bashrc并激活conda环境
Miniconda镜像可能需要额外的包安装步骤:
# 进入运行中的容器
docker exec -it hikyuu-container bash
# 安装额外的Python包
conda install -y pandas numpy matplotlib
# 或
pip install pandas numpy matplotlibSection sources
- Dockerfile_dev
- Dockerfile_dev_debian
- Dockerfile_dev_fedora
- Dockerfile_miniconda