前言回顧
在上一篇文章《搭建持久化的 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: 定義了easysearch和console兩個服務。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
步驟五:驗證和使用
- 訪問 Console: 瀏覽器打開
http://localhost:9000。 - 進行配置: 在 Console 中連接 Easysearch (
https://easysearch:9200,因為它們在同一個 Docker 網絡中,可以直接使用服務名),創建用户,查看監控等。 - 測試持久化:
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 進行本地實驗和開發!