博客 / 詳情

返回

使用 Docker Compose 簡化 INFINI Console 與 Easysearch 環境搭建

前言回顧

在上一篇文章《搭建持久化的 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.0
    container_name: infini-easysearch
    environment:
      - cluster.name=infini_compose_cluster
      - node.name=node-01
      - cluster.initial_master_nodes=node-01
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - EASYSEARCH_INITIAL_ADMIN_PASSWORD=INFINILabs01
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - ./easysearch/config:/app/easysearch/config
      - ./easysearch/data:/app/easysearch/data
      - ./easysearch/logs:/app/easysearch/logs
    ulimits:
      memlock: {soft: -1, hard: -1}
      nofile: {soft: 65536, hard: 65536}
    networks:
      - infini_app_net

  console:
    image: infinilabs/console:1.29.6
    container_name: infini-console
    ports:
      - "9000:9000"
    volumes:
      - ./console/config:/config
      - ./console/data:/data
      - ./console/logs:/log
    networks:
      - infini_app_net

networks:
  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 進行本地實驗和開發!

user avatar bd_68bd40c5df395 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.