搭建持久化的 INFINI Console 与 Easysearch 容器环境

背景介绍

许多用户在使用 Docker 部署 INFINI Console(本文使用 1.29.6 版本)时,可能会遇到一个常见问题:重启容器后,之前在 INFINI Console 中所连接的系统集群配置会丢失。这个问题通常源于未能正确配置 Docker 的数据持久化。原本通过 Docker 运行 INFINI Console 只是一个简单的测试示例,并未考虑多次重启使用,现官方文档也进行了更新,参考:容器部署

接下来我们本地测试一下。

理解核心问题:Docker 容器与数据持久化

默认情况下,Docker 容器的文件系统是临时的。当容器被停止并删除后,容器内部所做的任何未被持久化的更改都会丢失。INFINI Console 的配置存储在其容器内部的特定目录中。为了在容器重启或重建后保留这些信息,我们必须将这些关键目录映射到宿主机(你的电脑)上的持久化存储位置。

准备工作

  • 操作系统: macOS (本文示例)
  • Docker 环境 : OrbStack (orbstack.dev/) 或 Docker Desktop for Mac。

请确保 Docker 服务已启动并正常运行。你可以通过在终端执行 docker --version 来验证。

bash 复制代码
docker --version
Docker version 25.0.5, build 5dc9bcc

步骤一:创建本地持久化目录和自定义 Docker 网络

首先,在宿主机上为 Console 和 Easysearch 创建用于存储配置、数据和日志的目录。同时,创建一个自定义 Docker 网络,以便容器之间可以通过名称进行通信。

bash 复制代码
# 1. 创建项目根目录和各个服务的持久化子目录
mkdir -p ~/infini_manual_setup/console/config ~/infini_manual_setup/console/data ~/infini_manual_setup/console/logs
mkdir -p ~/infini_manual_setup/easysearch/config ~/infini_manual_setup/easysearch/data ~/infini_manual_setup/easysearch/logs
cd ~/infini_manual_setup

# 2. 创建一个自定义的 Docker 桥接网络
docker network create infini_app_net
  • infini_app_net 是我们为这两个容器创建的自定义网络名称。

步骤二:提取初始配置文件

为了方便首次启动和后续自定义,我们需要从官方 Docker 镜像中提取默认的配置文件到我们本地创建的持久化目录中。

1. INFINI Console (1.29.6) 初始配置 根据 INFINI Console 官方 Docker 文档,其容器内配置文件位于 /config

bash 复制代码
docker pull infinilabs/console:1.29.6
docker run --rm \
    -v $PWD/console/config:/temp_host_config \
    infinilabs/console:1.29.6 \
    sh -c "cp -a /config/. /temp_host_config/ && chmod -R ugo+rw /temp_host_config/"

2. INFINI Easysearch (1.13.0) 初始配置 INFINI Easysearch 镜像内部的配置文件位于 /app/easysearch/config,并且需要初始管理员密码 INFINILabs01

重要提示:请务必为 Easysearch 设置安全的密码。

bash 复制代码
docker pull infinilabs/easysearch:1.13.0
docker run --rm \
    -e EASYSEARCH_INITIAL_ADMIN_PASSWORD="INFINILabs01" \
    -v $PWD/easysearch/config:/temp_host_config \
    infinilabs/easysearch:1.13.0 \
    sh -c "cp -a /app/easysearch/config/. /temp_host_config/ && chmod -R ugo+rw /temp_host_config/"

现在,你的本地 console/configeasysearch/config 目录应该包含了初始配置文件。

检查目录如下

bash 复制代码
tree -L 3 .
.
├── console
│   ├── config
│   │   ├── install_agent.tpl
│   │   ├── permission.json
│   │   ├── setup
│   │   └── system_config.tpl
│   ├── data
│   └── logs
└── easysearch
    ├── config
    │   ├── admin.crt
    │   ├── admin.key
    │   ├── analysis-ik
    │   ├── ca.crt
    │   ├── ca.key
    │   ├── easysearch.yml
    │   ├── easysearch.yml.example
    │   ├── instance.crt
    │   ├── instance.key
    │   ├── jvm.options
    │   ├── jvm.options.d
    │   ├── log4j2.properties
    │   └── security
    ├── data
    └── logs

步骤三:手动运行 INFINI Easysearch 容器

使用 docker run 命令启动 Easysearch,并配置端口映射、环境变量和最重要的------卷挂载。

bash 复制代码
docker run -d \
--name easysearch01 \
--network infini_app_net \
-p 9200:9200 \
-p 9300:9300 \
-e cluster.name="infini_local_cluster" \
-e node.name="easysearch-node01" \
-e cluster.initial_master_nodes="easysearch-node01" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
-e EASYSEARCH_INITIAL_ADMIN_PASSWORD="INFINILabs01" \
-v $PWD/easysearch/config:/app/easysearch/config \
-v $PWD/easysearch/data:/app/easysearch/data \
-v $PWD/easysearch/logs:/app/easysearch/logs \
--ulimit memlock=-1:-1 \
--ulimit nofile=65536:65536 \
infinilabs/easysearch:1.13.0

关键参数解释:

  • --name easysearch01: 为容器指定一个名称。
  • --network infini_app_net: 连接到自定义网络。
  • -p HOST_PORT:CONTAINER_PORT: 端口映射。
  • -e VARIABLE=VALUE: 设置环境变量。
  • -v $PWD/host/path:/container/path: 实现持久化的核心 。将宿主机当前工作目录 ($PWD) 下的子目录映射到容器内的指定路径。

步骤四:手动运行 INFINI Console 容器

现在启动 Console 容器,同样配置网络、端口、环境变量和卷挂载。

bash 复制代码
docker run -d \
--name console01 \
--network infini_app_net \
-p 9000:9000 \
-v $PWD/console/config:/config \
-v $PWD/console/data:/data \
-v $PWD/console/logs:/log \
infinilabs/console:1.29.6

查看日志

bash 复制代码
docker logs -f easysearch01
docker logs -f console01

步骤五:验证服务和持久化

  1. 检查容器状态 : docker ps (应能看到 easysearch01console01)。
  2. 访问 Console : 浏览器打开 http://localhost:9000
  3. 在 Console 中进行初始化配置
  4. 测试持久化 (重启 Console 容器):
bash 复制代码
docker stop console01
docker rm console01
# 重新运行步骤四中启动 Console 的 docker run 命令 (确保所有参数一致)

操作截图

再次访问 Console : 打开 http://localhost:9000。如果一切正常,证明持久化成功。

步骤六:停止和清理(可选)

  • 停止容器: docker stop console01 easysearch01
  • 移除容器: docker rm console01 easysearch01
  • 移除网络: docker network rm infini_app_net
  • 移除本地持久化数据 (如果不再需要):
bash 复制代码
rm -rf ~/infini_manual_setup/console
rm -rf ~/infini_manual_setup/easysearch

总结

通过 docker run 命令并仔细配置卷挂载,我们成功地为 INFINI Console 和 Easysearch 构建了一个具有持久化能力的本地容器环境,有效解决了重启后配置丢失的问题。虽然手动操作参数较多,但它能让你更清晰地理解 Docker 的核心机制。

在后续的文章中,我们将探讨如何使用 Docker Compose 来简化这一过程。

相关推荐
我的offer在哪里8 小时前
Redis
数据库·redis·缓存
点灯小铭8 小时前
基于单片机的多模式自动洗衣机设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计
潜心编码8 小时前
基于python的仓库管理系统
数据库
herinspace8 小时前
如何设置电脑分辨率和显示缩放
服务器·数据库·智能手机·电脑
biubiubiu07068 小时前
Ubuntu中定时任务测试
数据库·postgresql
程序新视界9 小时前
在MySQL中,一条SQL语句的执行全流程是怎样的?
数据库·后端·mysql
todoitbo10 小时前
我用 TRAE 做了一个不一样的 MySQL MCP
数据库·mysql·adb·ai工具·mcp·trae·mysql-mcp
CodeJourney.10 小时前
Python开发可视化音乐播放器教程(附代码)
数据库·人工智能·python
呆呆小金人10 小时前
SQL入门:正则表达式-高效文本匹配全攻略
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师