ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

在 Laradock 中运行 Tarantool:内存数据库与 Lua 应用服务器的容器化实战指南

在 Laradock 中运行 Tarantool:内存数据库与 Lua 应用服务器的容器化实战指南 后端开发工具DevOps【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址https://gitcode.com/gh_mirrors/la/laradock点击查看免费下载Tarantool 是一个将内存数据库与嵌入式 Lua 应用服务器合二为一的计算平台适合承载高吞吐的键值存储、关系型风格负载以及用 Lua 编写的自定义服务端逻辑。本文以 Laradock 仓库中 tarantool 服务文档 为骨架结合 tarantool/compose.yml、tarantool/Dockerfile 等真实配置与源码完整讲解如何在 Laradock 中启动、停止、配置、管理、备份与恢复 Tarantool并配以tarantool-adminWeb 管理面板与跨项目连接的实战方案。读完本文你将能够用两条命令拉起一个带持久化存储的 Tarantool 实例通过交互式控制台执行 Lua 与查询语句并掌握一套可复制的数据备份/恢复流程。Tarantool 是什么Tarantool 是一个开源的内存计算平台它把高性能的数据库引擎与嵌入式 Lua 应用服务器集成在同一个进程里。数据主要驻留内存以获得极低延迟同时通过快照snapshot与预写日志write-ahead log持久化到磁盘因此既能承载快速的键值读写也能胜任关系型风格的表结构负载还允许你在服务端直接编写 Lua 业务逻辑减少网络往返。在 Laradock 中Tarantool 由两个服务组成tarantoolTarantool 服务端本体镜像基于官方tarantool/tarantool:3见 tarantool/Dockerfiletarantool-admin浏览器端的 Web 管理面板镜像来自quay.io/basis-company/tarantool-admin见 tarantool-admin/Dockerfile用于浏览 space、执行查询、观察服务器状态无需进入 Lua 控制台。启动 TarantoolLaradock 的每个服务都可以通过两种等价方式启动项目自带的laradockCLI 脚本或直接使用 Docker Compose 命令。# 方式一Laradock CLI ./laradock start tarantool # 方式二Docker Compose docker compose up -d tarantool首次启动时Tarantool 会在挂载的数据卷中初始化数据之后每次重启都会保留这些数据。你可以在同一行命令里列出多个服务让它们一起启动例如同时拉起 Tarantool 及其管理面板./laradock start tarantool tarantool-admin从源码看tarantool服务在 tarantool/compose.yml 中的定义非常精简它通过build: ./tarantool构建镜像将两个目录挂载进容器并把宿主端口映射到容器内 Tarantool 默认的二进制协议端口3301services: tarantool: build: ./tarantool volumes: - ${DATA_PATH_HOST}/tarantool:/var/lib/tarantool - ./tarantool/lua:/opt/tarantool ports: - ${TARANTOOL_PORT}:3301 networks: - backend这个文件并不是直接被 docker compose 读取的——Laradock 通过 docker-compose.yml 顶部的 include 机制第 323–328 行将tarantool/compose.yml与tarantool-admin/compose.yml合并进主编排文件并为每个服务加载对应的defaults.env作为环境变量默认值。因此本文出现的所有./laradock ...与docker compose ...命令在 Laradock 根目录下执行的效果完全一致。停止与移除容器停止容器只是暂停进程数据不会丢失# Laradock CLI ./laradock stop tarantool # Docker Compose docker compose stop tarantool如果你想把容器本身也删除磁盘上的数据依然保留它位于DATA_PATH_HOST目录下# Laradock CLI ./laradock remove tarantool # Docker Compose docker compose rm -sf tarantool对比tarantool-admin面板自身不保存任何数据所有数据都在tarantool容器中因此任何时候移除tarantool-admin容器都是安全的详见 tarantool-admin 文档。配置项说明Tarantool 的全部配置集中在 tarantool/defaults.env目前只有一个变量变量默认值作用TARANTOOL_PORT3301Tarantool 在宿主侧发布的端口映射格式为host:container即${TARANTOOL_PORT}:3301如果需要修改端口只需在你的项目根目录.env文件中加入同一行并覆盖默认值.env中DATA_PATH_HOST~/.laradock/data的写法同样来自 .env.example 第 35 行所有服务的宿主数据路径都以此为基准。修改后重启服务即可生效./laradock restart tarantool此外你放置在宿主tarantool/lua目录下的 Lua 脚本会被挂载进容器内的/opt/tarantool见 tarantool/compose.yml 第二段 volumes。也就是说你可以在宿主侧用熟悉的编辑器维护 Lua 脚本容器内立即可见——但要注意挂载本身不会自动执行脚本你的初始化逻辑需要主动从这个路径加载它们。使用交互式控制台Tarantool 提供了console这个子命令进入后可以执行 Lua 代码和数据库查询# Laradock CLI ./laradock exec tarantool console # Docker Compose docker compose exec tarantool console在控制台内你可以直接调用 Tarantool 的box模块 API。一个典型的完整流程是先创建 space表再为它建立索引然后插入并读取数据-- 创建名为 users 的 space临时存储 box.schema.space.create(users, { if_not_exists true }) -- 为字段 0主键建立 TREE 索引 box.space.users:create_index(primary, { parts {1, unsigned}, if_not_exists true }) -- 写入一条记录 box.space.users:insert{1, Alice} -- 按主键读取 box.space.users:get(1) -- 遍历全部记录 box.space.users:select()详细的数据查询与 Lua 脚本编写参考请查阅 Tarantool 官方文档本文不替代官方参考手册。使用 Admin Web 管理面板tarantool-admin是一个独立的 Web UI可以在浏览器里浏览 space、运行查询并观察服务器状态。启用步骤如下连同 admin 容器一起启动./laradock start tarantool tarantool-admin在浏览器打开 http://localhost:8002或你自定义的TARANTOOL_ADMIN_PORT其默认值 8002 定义在 tarantool-admin/defaults.env在面板中把Hostname设置为tarantool即 Tarantool 服务的容器名数据就会出现在面板中。从 tarantool-admin/compose.yml 可以看到admin 容器将宿主端口映射到容器内部固定的80端口并与tarantool处于同一个backendDocker 网络services: tarantool-admin: build: ./tarantool-admin ports: - ${TARANTOOL_ADMIN_PORT}:80 networks: - backend正因为两者同处一个网络admin 容器内必须使用tarantool这个容器名而不是localhost才能解析到服务端——这也解释了为什么面板的 Hostname 字段要显式填写tarantool。修改面板端口时TARANTOOL_ADMIN_PORT只影响宿主侧映射容器内部始终监听80因此无需重建镜像重启容器即可生效./laradock restart tarantool-admin备份与恢复Tarantool 将内存中的数据以两种文件持久化到磁盘快照文件.snap某一时刻数据的完整镜像预写日志文件.xlog自上次快照以来所有写操作的增量日志。这两类文件位于容器内的/var/lib/tarantool在 tarantool/compose.yml 中被映射到宿主的${DATA_PATH_HOST}/tarantool目录。备份的本质就是强制生成一份最新快照然后把整个目录复制走。备份步骤第一步进入交互式控制台./laradock exec tarantool console第二步在控制台内强制执行快照让磁盘文件反映当前内存状态box.snapshot()第三步复制数据目录完成备份cp -r ${DATA_PATH_HOST:-~/.laradock/data}/tarantool ./tarantool-backup恢复步骤恢复时先停止容器用备份替换数据目录再重新启动# 停止容器Laradock CLI / Docker Compose 任选其一 ./laradock stop tarantool # 或docker compose stop tarantool # 用备份替换当前数据目录 rm -rf ${DATA_PATH_HOST:-~/.laradock/data}/tarantool cp -r ./tarantool-backup ${DATA_PATH_HOST:-~/.laradock/data}/tarantool # 重新启动 ./laradock start tarantool # 或docker compose up -d tarantool完全重置清空所有数据如果你想彻底推倒重来让 Tarantool 从一个干净的空状态开始可以依次执行停止、移除容器、删除数据目录、再启动。⚠️ 这会永久删除该容器内的所有快照与日志文件请务必先完成上一节的备份# Laradock CLI ./laradock stop tarantool ./laradock remove tarantool rm -rf ${DATA_PATH_HOST:-~/.laradock/data}/tarantool ./laradock start tarantool # 或 Docker Compose 等价命令 docker compose stop tarantool docker compose rm -sf tarantool rm -rf ${DATA_PATH_HOST:-~/.laradock/data}/tarantool docker compose up -d tarantool这里的DATA_PATH_HOST就是你在.env中设置的值默认~/.laradock/data因此.../tarantool文件夹正是 Tarantool 数据在你机器上的实际存放位置。删除它就等于删掉了这个容器全部的持久化数据。与其他 Laradock 项目互通默认情况下每个 Laradock 项目都运行在各自独立的 Docker 网络中因此第二个项目的容器无法直接通过容器名tarantool访问本项目的 Tarantool。最简单的解决办法是发布端口——这已经由TARANTOOL_PORT完成了让另一个项目连接宿主机的地址而不是tarantool容器名。例如在 Docker Desktop 环境下使用host.docker.internal端口使用本项目的TARANTOOL_PORT如果两个项目同时运行请确保它们使用不同的TARANTOOL_PORT值避免宿主端口冲突。常见问题排查Admin 面板显示无数据面板必须把 Hostname 显式设置为tarantool容器名而不是localhost因为它运行在另一个容器内部localhost指向的是它自己。应用连不上但容器在运行确认客户端使用tarantool作为主机名不要用localhost或127.0.0.1——这两个地址只在本机宿主侧有效容器内部无法解析到 Tarantool 服务。宿主端口被占用本地可能已有一个 Tarantool 或另一个 Laradock 项目占用了3301。在.env中修改TARANTOOL_PORT后重启./laradock restart tarantool。tarantool/lua下的脚本没生效该目录挂载在容器内的/opt/tarantool请确认你的初始化逻辑确实从这个路径加载脚本挂载不会自动执行。关联资源Tarantool Admin 服务文档Web 管理面板的独立使用说明tarantool/compose.yml服务编排定义数据卷、端口、网络tarantool/defaults.env端口配置默认值tarantool/Dockerfile基于tarantool/tarantool:3的基础镜像docker-compose.yml主编排文件通过 include 机制合并各服务还不熟悉 Laradock从 Getting Started 开始。赞分享后端开发工具DevOps【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址https://gitcode.com/gh_mirrors/la/laradock点击查看免费下载相关推荐在 Laradock 上运行 Yii 应用NGINX PHP-FPM MySQL 全容器化开发实战指南在 Laradock 上运行 Yii 应用NGINX PHP FPM MySQL 全容器化开发实战指南 本篇指南以 Laradock 仓库中 yii后端开发工具DevOps7个步骤在Obsidian中完美嵌入B站视频的完整指南7个步骤在Obsidian中完美嵌入B站视频的完整指南 还在为学习笔记和B站视频内容分离而苦恼吗Media Extended B站插件mx bili pl后端开发工具DevOpsSquirrel中的容器化在Docker中运行Go数据库应用Squirrel中的容器化在Docker中运行Go数据库应用 为什么需要容器化Go数据库应用 传统Go数据库应用部署常面临环境依赖复杂、版本冲突、部署流程繁琐后端数据库上一篇华硕笔记本屏幕色彩发灰G-Helper色彩配置文件恢复指南下一篇RDP Wrapper与元宇宙虚拟办公环境中的远程协作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表