使用 Docker 安装
构建并运行 Lavik 0.1.0-beta.1 容器,使用持久化存储。
开始之前
使用原生 Linux/amd64 或 Linux/arm64,Linux 内核至少为 6.1,并启用 io_uring。Docker Desktop 使用 Linux 虚拟机;本示例请为虚拟机至少分配 2 个 CPU 和 2 GiB 内存。ARM Mac 上不要通过 x86 模拟运行 io_uring。示例使用 Minimal beta.1 发布包构建本地镜像,采用内核 TCP 和 io_uring。
示例预分配 512 MiB 数据文件,并将保留内存上限设为 512 MiB。首次启动前按工作负载选择容量;绝不要截断已有数据文件。命名卷保存数据和日志。删除卷会删除数据库,备份应另行保存。
宿主端口绑定 127.0.0.1。本地评估示例未设置密码,不要公开暴露端口。seccomp:unconfined 允许使用默认 Docker 策略可能禁止的 io_uring,同时放宽系统调用过滤。容器仍以非 root 用户运行、移除 capabilities 并禁止提权。共享或生产主机应使用经过审查且支持 io_uring 的 seccomp 策略,并在允许远程连接之前配置认证和 TLS。
创建镜像文件
创建新的工作目录,将下面两个文件保存为 Dockerfile 和 start.sh。构建过程选择原生架构,并校验发布包的 SHA-256。这是本地构建的镜像。
Dockerfile
FROM ubuntu:24.04@sha256:b3cc40b72b93588182b5410f723c7aaf142363311c2aa993d8a453ddcbb3ae15
ARG TARGETARCH
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl libnuma1 libuuid1 redis-tools \
&& rm -rf /var/lib/apt/lists/*
RUN set -eu; \
case "$TARGETARCH" in \
arm64) arch=aarch64; checksum=819df5f9f6c534f0fa988d1a9ec3531f1e6b0651527591a54e7235688bf8d984 ;; \
amd64) arch=x86_64; checksum=8a3e66f313e7112a3a9dff7b1a0d67ae34e988dfa51f5c310e860d0b3f2daa77 ;; \
*) echo 'Use native linux/amd64 or linux/arm64' >&2; exit 1 ;; \
esac; \
curl -fL "https://github.com/eloqdata/lavik/releases/download/v0.1.0-beta.1/lavik-v0.1.0-beta.1-linux-${arch}-minimal.tar.gz" -o /tmp/lavik.tar.gz; \
echo "$checksum /tmp/lavik.tar.gz" | sha256sum -c -; \
mkdir /opt/lavik; tar -xzf /tmp/lavik.tar.gz --strip-components=1 -C /opt/lavik; \
rm /tmp/lavik.tar.gz; chmod -R a+rX /opt/lavik; \
install -d -o 65532 -g 65532 /var/lib/lavik
COPY start.sh /usr/local/bin/start-lavik
RUN chmod 755 /usr/local/bin/start-lavik
USER 65532:65532
EXPOSE 6379 9100
ENTRYPOINT ["/usr/local/bin/start-lavik"]start.sh
#!/bin/sh
set -eu
# A named volume keeps this data file across container replacement.
# Allocate only on the first start; never truncate existing data.
if [ ! -e /var/lib/lavik/data ]; then
fallocate -l 512M /var/lib/lavik/data
fi
exec /opt/lavik/lavik --bind 0.0.0.0 --port 6379 --metrics-port 9100 \
--network kernel --storage uring --threads 2 --no-pin-workers \
--registered-buffer-mb-per-worker 64 --max-memory 512MiB \
--shutdown-checkpoint --data-file /var/lib/lavik/data \
--log-dir /var/lib/lavik/logs "$@"构建与启动
在包含这两个文件的目录执行。lavik-beta1 和 lavik-beta1-data 不能属于其他部署。启动完成前首次 PING 可能失败;查看 docker logs 并重试,直到返回 PONG,再执行 SET 和 GET。预期依次返回 PONG、OK、hello from Lavik。
docker-run.sh
docker build -t lavik-local:0.1.0-beta.1 .
docker run -d --name lavik-beta1 \
-p 127.0.0.1:6379:6379 -p 127.0.0.1:9100:9100 \
--mount source=lavik-beta1-data,target=/var/lib/lavik \
--ulimit memlock=536870912:536870912 \
--memory 1g --cpus 2 --read-only --tmpfs /tmp \
--cap-drop ALL --security-opt no-new-privileges:true \
--security-opt seccomp:unconfined --stop-timeout 60 \
lavik-local:0.1.0-beta.1
docker logs lavik-beta1
docker exec lavik-beta1 redis-cli PING
docker exec lavik-beta1 redis-cli SET greeting 'hello from Lavik'
docker exec lavik-beta1 redis-cli GET greeting日志、指标与重启
使用 docker logs lavik-beta1 查看启动日志。指标地址为 http://127.0.0.1:9100/metrics。执行 docker stop --time 60 lavik-beta1,再执行 docker start lavik-beta1,可保留数据卷重启。启动后 GET greeting 应返回已保存的值。如仅需移除容器,请先停止,再执行 docker rm lavik-beta1;保留 lavik-beta1-data,在下次 docker run 时复用。