2.5 KiB
2.5 KiB
Docker 构建和运行
镜像结构
镜像使用三个构建阶段
oven/bun:1.3.14-debian负责编译 Web 静态资源rust:1.97.1-trixie负责构建 Rust 和 RocksDBdebian:trixie-slim只保留运行所需的二进制静态资源和 C++ 运行库
最终容器只运行一个非 root dht-search 进程
构建
在仓库根目录执行
docker build --platform linux/amd64 -t dht-search:dev .
构建会复用 Cargo registry Git 和 target BuildKit 缓存
可以使用以下命令检查镜像
docker image inspect dht-search:dev
docker run --rm --entrypoint id dht-search:dev
docker run --rm --entrypoint ldd dht-search:dev /dht-search/dht-search
Compose 运行
在仓库根目录执行
docker compose up -d --build
docker compose logs -f
容器内应用统一位于 /dht-search
/dht-search/
├── dht-search
├── config.toml
├── web/
└── data/
Compose 将仓库根目录的 config.toml 直接映射到 /dht-search/config.toml 网页保存配置时会同步修改宿主机文件
Compose 只创建一个 dht-search-data 命名卷并挂载到 /dht-search/data
RocksDB Tantivy SQLite 日志和检查点全部位于该数据卷
配置保存通常使用临时文件原子替换 在 Docker 单文件挂载环境中会自动改用同步覆盖写入
本地配置保留 127.0.0.1:8080 src/web/dist 和文件日志方便直接运行 容器启动参数会覆盖监听地址和静态目录并将日志切换到容器标准输出
HTTP 默认只发布到宿主机回环地址 UDP DHT 端口默认公开 如果端口冲突可以临时覆盖
$env:DHT_HTTP_BIND = "127.0.0.1:18080"
$env:DHT_UDP_PORT = "22313"
docker compose up -d
验证
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/ready
docker compose logs -f
浏览器访问 http://127.0.0.1:8080
公网访问 Web 应使用反向代理或 SSH 通道
停止和重启
docker compose stop
docker compose start
更新镜像或重新创建容器时执行 docker compose up -d --build 即可复用根配置和数据卷
docker compose down 只删除容器和网络 不删除数据卷
不要执行 docker compose down --volumes 除非已经确认 RocksDB 权威数据和其他运行数据都不再需要
远程设备
远程设备是 x86_64 时构建 linux/amd64
需要导出镜像时执行
docker save dht-search:dev -o dht-search-dev.tar
将文件复制到远程设备后执行
docker load -i dht-search-dev.tar