前言回顾

在上一篇文章《搭建持久化的 INFINI Console 与 Easysearch 容器环境》中,我们详细介绍了如何使用基础的 docker run 命令,手动启动和配置 INFINI Console (1.29.6) 和 INFINI Easysearch (1.13.0) 容器,并实现了关键数据的持久化,解决了重启后配置丢失的问题。

手动操作虽然能让我们深入理解 Docker 的核心机制,但在管理多个容器、网络和卷时,命令会变得冗长且容易出错。这时,Docker Compose 就派上了用场。它允许我们使用一个 YAML 文件来定义和运行多容器 Docker 应用程序。

本篇文章将演示如何将上一篇的手动步骤转换为使用 Docker Compose,让你更轻松地管理和维护这套本地开发测试环境。

Docker Compose 的优势

使用 Docker Compose 带来了诸多好处:

  • 声明式配置:在一个 docker-compose.yml 文件中定义所有服务、网络和卷,清晰明了。
  • 一键式管理:使用简单的命令(如 docker compose up, docker compose down)即可启动、停止和重建整个应用环境。
  • 简化网络和服务连接:Compose 会自动处理服务间的网络设置和依赖关系。
  • 易于共享和版本控制docker-compose.yml 文件可以轻松地与团队共享并通过版本控制系统(如 Git)进行管理。

准备工作

与上一篇类似,你需要:

  • 操作系统: macOS (本文示例)
  • Docker 环境: OrbStack (https://orbstack.dev/) 或 Docker Desktop for Mac。
  • 确保 Docker Compose V2 (docker compose) 或 V1 (docker-compose) 已安装并可用。

查看 docker compose 版本

docker compose version
Docker Compose version v2.24.5

步骤一:项目目录结构

我们将继续使用上一篇文章中创建的目录结构。如果你还没有创建,或者想重新开始,可以在你的项目根目录(例如 ~/infini_compose_lab)下创建如下结构:

# 1. 创建项目根目录
mkdir -p ~/infini_compose_lab
cd ~/infini_compose_lab# 2. 为 Console 和 Easysearch 创建持久化子目录
# 这些目录将用于存储配置、数据和日志
mkdir -p console/config console/data console/logs
mkdir -p easysearch/config easysearch/data easysearch/logs

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

这一步与上一篇完全相同。你在首次启动时使用从镜像中提取的默认配置,请执行以下操作。如果这些目录中已存在配置文件(例如从上一篇博客的操作中保留下来的),Docker Compose 在挂载时会直接使用它们。

1. INFINI Console (1.29.6) 初始配置
(容器内配置路径: /config)

# 确保在 ~/infini_compose_lab 目录下
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) 初始配置
(容器内配置路径: /app/easysearch/config,初始密码: INFINILabs01)

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

# 确保在 ~/infini_compose_lab 目录下
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/"

步骤三:创建 docker-compose.yml 文件

这是核心步骤。在你的项目根目录 ~/infini_compose_lab 下,创建一个名为 docker-compose.yml 的文件,并填入以下内容。这个文件定义了我们的服务、它们如何运行以及它们如何交互。

cat <<EOF > docker-compose.yml
services:easysearch:image: infinilabs/easysearch:1.13.0container_name: infini-easysearchenvironment:- cluster.name=infini_compose_cluster- node.name=node-01- cluster.initial_master_nodes=node-01- "ES_JAVA_OPTS=-Xms1g -Xmx1g"- EASYSEARCH_INITIAL_ADMIN_PASSWORD=INFINILabs01ports:- "9200:9200"- "9300:9300"volumes:- ./easysearch/config:/app/easysearch/config- ./easysearch/data:/app/easysearch/data- ./easysearch/logs:/app/easysearch/logsulimits:memlock: {soft: -1, hard: -1}nofile: {soft: 65536, hard: 65536}networks:- infini_app_netconsole:image: infinilabs/console:1.29.6container_name: infini-consoleports:- "9000:9000"volumes:- ./console/config:/config- ./console/data:/data- ./console/logs:/lognetworks:- infini_app_netnetworks:infini_app_net:driver: bridge
EOF

docker-compose.yml 文件关键点:

  • services: 定义了 easysearchconsole 两个服务。
  • image: 指定了每个服务使用的 Docker 镜像和版本。
  • container_name: 为容器指定一个易于识别的名称。
  • environment: 设置容器的环境变量。
  • Easysearch 单节点配置: 注意 cluster.initial_master_nodes 设置为节点自身的名称。
  • ports: 将容器的端口映射到宿主机的端口。
  • volumes: 实现持久化的核心。将宿主机当前目录 (./) 下的 console/*easysearch/* 子目录分别映射到容器内对应的路径。
  • networks: 将两个服务都连接到我们定义的 infini_app_net 网络。这使得 console 服务可以通过服务名 easysearch (例如 https://easysearch:9200) 来访问 easysearch 服务。

步骤四:使用 Docker Compose 启动环境

现在,所有配置都在 docker-compose.yml 文件中了。启动整个环境只需要一条命令。
~/infini_compose_lab 目录下(包含 docker-compose.yml 文件),执行:

docker compose up -d
  • docker compose (V2) 或 docker-compose (V1)。
  • up: 创建并启动在 docker-compose.yml 中定义的所有服务。
  • -d: 后台模式运行。

首次运行时,如果本地没有对应的镜像,Docker Compose 会自动拉取。

常用 Docker Compose 命令:

  • 查看服务状态:
docker compose ps
  • 查看所有服务的实时日志:
docker compose logs -f
  • 查看特定服务的日志:
docker compose logs -f console
docker compose logs -f easysearch
  • 停止所有服务(保留数据):
docker compose stop
  • 停止并移除所有容器、网络和匿名卷(保留通过 volumes 映射的本地数据):
docker compose down

步骤五:验证和使用

  1. 访问 Console: 浏览器打开 http://localhost:9000
  2. 进行配置: 在 Console 中连接 Easysearch (https://easysearch:9200,因为它们在同一个 Docker 网络中,可以直接使用服务名),创建用户,查看监控等。
  3. 测试持久化:
docker compose down # 停止并移除容器
# 稍等片刻
docker compose up -d # 重新启动

再次访问 http://localhost:9000,你会发现之前的配置都还在!

操作截图

彻底清理,包括删除命名卷(如果使用了的话)和本地数据(可选)

# -v 移除命名卷
docker compose down -v
# 然后手动删除本地持久化目录
rm -rf ~/infini_compose_lab/console
rm -rf ~/infini_compose_lab/easysearch

总结

通过 Docker Compose,我们用一个简洁的 docker-compose.yml 文件取代了之前冗长的 docker run 命令,极大地简化了 INFINI Console 和 Easysearch 本地环境的搭建和管理过程。同时,通过正确的卷挂载配置,我们依然确保了数据的持久化,解决了重启后配置丢失的问题。

对于开发、测试和快速原型验证,Docker Compose 无疑是一个强大而高效的工具。希望本教程能帮助你更轻松地使用 INFINI Console 进行本地实验和开发!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88242.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88242.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88242.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word 怎么让段落对齐,行与行之间宽一点?

我们来分两步解决&#xff1a;段落对齐 和 调整行距。 这两个功能都集中在Word顶部的【开始】选项卡里的【段落】区域。 第一步&#xff1a;让段落对齐 “对齐”指的是段落的左右边缘如何排列。通常有四种方式。 操作方法&#xff1a;将鼠标光标点在你想修改的那个段落里的任意…

Attention机制完全解析:从原理到ChatGPT实战

一、Attention的本质与计算步骤 1.1 核心思想 动态聚焦&#xff1a;Attention是一种信息分配机制&#xff0c;让模型在处理输入时动态关注最重要的部分。类比&#xff1a;像人类阅读时用荧光笔标记关键句子。 1.2 计算三步曲&#xff08;以"吃苹果"为例&#xff09; …

2025年3月青少年电子学会等级考试 中小学生python编程等级考试三级真题答案解析(判断题)

博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解

HTML5 新特性详解:从语义化到多媒体的全面升级

很多小伙伴本都好奇&#xff1a;HTML5有什么功能是以前的HTML没有的&#xff1f; 今天就给大家说道说道 HTML5 作为 HTML 语言的新一代标准&#xff0c;带来了诸多革命性的新特性。这些特性不仅简化了前端开发流程&#xff0c;还大幅提升了网页的用户体验和功能性。本文将深入…

mac安装docker

1、下载docker-desktop https://www.docker.com/products/docker-desktop/2、安装&#xff0c;双击安装 3、优化docker配置 默认配置 cat ~/Library/Group\ Containers/group.com.docker/settings-store.json {"AutoStart": false,"DockerAppLaunchPath": …

mapbox进阶,绘制不随地图旋转的矩形,保证矩形长宽沿屏幕xy坐标方位

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️line线图层样式1.4 ☘️circle点图层样…

${project.basedir}延申出来的Maven内置的一些常用属性

如&#xff1a;${project.basedir} 是 Maven 的内置属性&#xff0c;可以被 pom.xml 直接识别。它表示当前项目的根目录&#xff08;即包含 pom.xml 文件的目录&#xff09;。 Maven 内置的一些常用属性&#xff1a; 项目相关&#xff1a; ${project.basedir} <!-- 项…

[特殊字符] Python 批量生成词云:读取词频 Excel + 自定义背景 + Excel to.png 流程解析

本文展示如何用 Python 从之前生成的词频 Excel 文件中读取词频数据&#xff0c;结合 wordcloud 和背景图&#xff0c;批量生成直观美观的词云图。适用于文本分析、内容展示、报告可视化等场景。 &#x1f4c2; 第一步&#xff1a;读取所有 Excel 词频文件 import os from ope…

模拟网络请求的C++类设计与实现

在C开发中&#xff0c;理解和模拟网络请求是学习客户端-服务器通信的重要一步。本文将详细介绍一个模拟HTTP网络请求的C类库设计&#xff0c;帮助开发者在不涉及实际网络编程的情况下&#xff0c;理解网络请求的核心概念和工作流程。 整体架构设计 这个模拟网络请求的类库主要由…

移动机器人的认知进化:Deepoc大模型重构寻迹本质

统光电寻迹技术已逼近物理极限。当TCRT5000传感器在强烈环境光下失效率超过37%&#xff0c;当PID控制器在路径交叉口产生63%的决策崩溃&#xff0c;工业界逐渐意识到&#xff1a;导引线束缚的不仅是车轮&#xff0c;更是机器智能的演化可能性。 ​技术破局点出现在具身认知架构…

记录一次pip安装错误OSError: [WinError 32]的解决过程

因为要使用 PaddleOCR&#xff0c;需要安装依赖。先通过 conda新建了虚拟环境&#xff0c;然后安装 PaddlePaddle&#xff0c;继续安装 PaddleOCR&#xff0c;上述过程我是在 VSCode的终端中处理&#xff0c;结果报错如下&#xff1a;Downloading multidict-6.6.3-cp312-cp312-…

后端id设置long类型时,传到前端,超过19位最后两位为00

文章目录一、前言二、问题描述2.1、问题背景2.2、问题示例三、解决方法3.1、将ID转换为字符串3.2、使用JsonSerialize注解3.3、使用JsonFormat注解一、前言 在后端开发中&#xff0c;我们经常会遇到需要将ID作为标识符传递给前端的情况。当ID为long类型时&#xff0c;如果该ID…

SpringAI学习笔记-MCP客户端简单示例

MCP客户端是AI与外部世界交互的桥梁。在AI系统中&#xff0c;大模型虽然具备强大的认知能力&#xff0c;却常常受限于数据孤岛问题&#xff0c;无法直接访问外部工具和数据源。MCP协议应运而生&#xff0c;作为标准化接口解决这一核心挑战。该协议采用客户端-服务端架构&#x…

postgresql|数据库|系统性能监控视图pg_stat与postgresql数据库的调优(备忘)

一、 写作初衷 通常,我们使用navicat这样的数据库图形管理工具,只能看到用户层面的表,视图,而系统层面的表,视图,函数是无法看到的,这些表,视图和函数好像也可以称之为内模式;而这些视图,函数的作用是非常大的,其中pg_stat 族系统视图可以得到数据库的详细运行信息…

网络安全护网实战:攻击手段解析与防御策略

在网络安全领域&#xff0c;护网行动中对各类攻击方式和漏洞原理的掌握至关重要。本文将详细解析常见的攻击方式及其背后的漏洞原理&#xff0c;帮助大家提升护网技能。一、常见攻击方式及漏洞原理1. SQL注入漏洞• 定义&#xff1a;将恶意的数据库语句注入到后台数据库去执行&…

使用alist+RaiDrive+webdav将百度夸克网盘变为本地电脑磁盘方法教程

由于每天都要操作网盘不下十几次&#xff0c;频繁启动网盘比较麻烦。 使用百度夸克网盘的webdav服务可以将百度夸克网盘挂载到本地电脑上&#xff0c;就像操作本地电脑硬盘一样操作网盘&#xff0c;非常方便。我们以alistraidrive为例演示。 首先打开百度网盘pan.baidu.com&a…

C# 入门学习教程(二)

文章目录一、操作符详解1、操作符概览2、操作符的本质3、操作符的优先级4、同级操作符的运算顺序5、 各类操作符的示例二、表达式&#xff0c;语句详解1. 表达式的定义2. 各类表达式概览3. 语句的定义4. 语句详解一、操作符详解 C# 中的操作符是用于执行程序代码运算的符号&am…

Linux内核深度解析:IPv4策略路由的核心实现与fib_rules.c源码剖析

深入探索Linux网络栈的规则引擎,揭秘策略路由如何通过多级路由表实现复杂流量控制 在Linux网络栈中,路由决策远不止简单的目的地址匹配。策略路由(Policy Routing)允许根据源地址、TOS值、端口等复杂条件选择不同的路由路径。本文将深入剖析实现这一功能的核心源码——net/…

【UE5】虚幻引擎的运行逻辑

UE5的运行逻辑可以分为引擎启动流程和游戏运行流程两个部分。引擎启动流程一、平台入口&引擎主流程初始化1、系统入口不同的平台会有不同的入口。在Windows平台&#xff0c;入口是Launch模块下的\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp文件中的W…

大数据学习1:Hadoop单机版环境搭建

1.基础知识介绍 Flume采集日志。Sqoop采集结构化数据&#xff0c;比如采集数据库。 存储到HDFS上。 YARN资源调度&#xff0c;每台服务器上分配多少资源。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;提供SQL查询功能&#xff0c;能将SQL语句转变成MapReduce任务来执行…