前言回顧
在上一篇文章《搭建持久化的 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
: 定義了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 進行本地實驗和開發!