この記事のポイント
- OpenSearch 2.17.1(Elasticsearch 互換の完全 OSS)を Ubuntu 24.04 + Docker で構築できます
- セキュリティプラグイン無効のシングルノード構成なら
docker run1コマンドで起動。実測では起動完了まで69.8秒かかりました - REST API でインデックス作成・文書投入・全文検索まで実際にコマンドで完結することを確認しました(match 検索スコア
0.677) - ブラウザで使える
OpenSearch Dashboardsも Docker で同時に起動でき、Dev Tools で curl なしに API を叩けます - k-NN・ML・Neural Search を含む
23本のプラグインがデフォルトでバンドルされており、Elasticsearch には無い機能が最初から使えます
Elasticsearch の代替として注目を集めている OpenSearch を、Ubuntu 24.04 LTS 環境に Docker で構築する手順を解説します。
本記事では opensearchproject/opensearch:2.17.1 の公式 Docker イメージを使い、実際にコンテナを起動して API を叩いた実測データをもとに書いています。数字はすべて手元で計測した値です。
正直、「Elasticsearch の代替」と聞くと難しそうに感じるかもしれませんが、Docker があればローカルに本番相当の環境を作れます。
この記事では初学者が最初に詰まりやすい「起動まで時間がかかる」「セキュリティ設定のエラー」「Dashboards が繋がらない」といったポイントも、実際に踏んだうえで解説します。
OpenSearch とは — Elasticsearch との違い
OpenSearch は Amazon が 2021 年に Elasticsearch 7.10 のフォークとして公開した、完全オープンソースの全文検索エンジンです。
Elasticsearch が商用ライセンスに移行した後も Apache 2.0 ライセンスで提供し続けており、個人開発から本番運用まで無償で使えます。
実際にコンテナを起動して GET / を叩いたところ、minimum_wire_compatibility_version が 7.10.0 と返ってきました。
これは Elasticsearch 7.10 系のクライアントやツールがそのまま使えることを意味します。移行コストが小さいのが OpenSearch の強みです。
| 項目 | OpenSearch | Elasticsearch |
|---|---|---|
| ライセンス | Apache 2.0(完全 OSS) | Elastic License 2.0(商用制限あり) |
| 本記事の検証版 | 2.17.1(2024-09-26 ビルド) | 8.x 系 |
| Wire 互換性 | Elasticsearch 7.10.0 以降と互換 | — |
| バンドルプラグイン | 23本(k-NN・ML・Neural Search 等) | 有料プランでのみ提供される機能あり |
| ダッシュボード | OpenSearch Dashboards(OSS) | Kibana(商用ライセンス) |
| 開発主体 | Amazon Web Services + コミュニティ | Elastic N.V. |
まずは実測で確認したイメージ構成とビルド情報をまとめておきます。

注目したいのがバンドルプラグインの充実度です。
2026-06-14 の実測で GET /_cat/plugins を叩いたところ、骨格ドラフトで想定していた「19本」ではなく 実際には23本のプラグインが返ってきました。
Elasticsearch では有料プランが必要な k-NN(ベクトル類似度検索)や Neural Search(セマンティック検索)が、OpenSearch では最初から全部入っています。

動作確認済み環境
注意
本記事のコマンドは Ubuntu 24.04 LTS + Docker 20.10.12 環境で検証しています。
OpenSearch はメモリを多く使うため、実行環境は最低 2GB RAM を推奨します(検証は JVM ヒープ -Xmx512m で安定動作しました)。
- OS:Ubuntu 24.04 LTS(Docker公式イメージ
ubuntu:24.04、実測ではUbuntu 24.04.4 LTS) - Docker:20.10.12
- OpenSearch:2.17.1(
opensearchproject/opensearch:2.17.1、イメージサイズ約 1.06GB) - OpenSearch Dashboards:2.17.1(
opensearchproject/opensearch-dashboards:2.17.1) - 同梱 JVM:OpenJDK 21.0.4
- 検証日:2026-06-14
インストール手順
手順1:Docker 環境を確認する
OpenSearch は Java アプリケーションのため、直接 apt でインストールするより Docker を使うほうが依存関係の管理がシンプルです。
まず Docker が使える状態か確認します。
Docker version 20.10.12, build e91ed57
$ docker info –format ‘{{.ServerVersion}}’
20.10.12
Docker が入っていない場合は、Ubuntu 24.04 では apt-cache policy docker.io で候補版を確認できます。実測では 29.1.3-0ubuntu3~24.04.2 が候補でした。
sudo apt install docker.io でインストールできます。詳しい手順は を参照してください。
手順2:OpenSearch イメージを取得する
Docker Hub から公式イメージを取得します。
イメージサイズは実測で約 1.06GB(1,058MB)あるため、初回のダウンロードに数分かかります。
2.17.1: Pulling from opensearchproject/opensearch
…
Status: Downloaded newer image for opensearchproject/opensearch:2.17.1
$ docker pull opensearchproject/opensearch-dashboards:2.17.1
Status: Downloaded newer image for opensearchproject/opensearch-dashboards:2.17.1
手順3:シングルノードで OpenSearch を起動する
学習・開発目的ではシングルノード構成が最もシンプルです。
DISABLE_SECURITY_PLUGIN=true でセキュリティプラグインを無効化し、TLS 証明書の設定なしに HTTP で使えます。
注意
DISABLE_SECURITY_PLUGIN=true は学習・開発環境向けの設定です。
本番環境ではセキュリティプラグインを有効化し、TLS と認証を必ず設定してください。
–name opensearch-node1 \
-e discovery.type=single-node \
-e DISABLE_SECURITY_PLUGIN=true \
-e “OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m” \
-p 9200:9200 -p 9600:9600 \
opensearchproject/opensearch:2.17.1
d6bffedc529b…(コンテナID)
-Xms512m -Xmx512m は JVM のヒープサイズ上限です。実測では GET /_nodes/_local/jvm でこの 512MB が反映されていることと、同梱 JVM が OpenJDK 21.0.4 であることを確認しました。
RAM が 4GB 未満の環境では 512m から始めて、余裕があれば 1g に上げてください。
ここだけは順番を間違えると動きません — 起動してから API を叩けるまで実測で 69.8 秒かかりました。最低でも 60〜90 秒は待ってください。
手順4:起動を確認する
起動ログに started が出たら、GET / でバージョン情報を確認します。以下は実測の応答そのものです。
$ docker logs -f opensearch-node1 2>&1 | grep “started”
[o.o.n.Node] [d6bffedc529b] started
# API で確認
$ curl -s http://localhost:9200/
{
“name” : “d6bffedc529b”,
“cluster_name” : “docker-cluster”,
“version” : {
“distribution” : “opensearch”,
“number” : “2.17.1”,
“build_date” : “2024-09-26T21:59:52Z”,
“lucene_version” : “9.11.1”,
“minimum_wire_compatibility_version” : “7.10.0”
},
“tagline” : “The OpenSearch Project: https://opensearch.org/”
}
クラスタヘルスの確認
起動直後に必ずクラスタの健康状態を確認します。
status: green であれば正常です。
{
“status” : “green”,
“number_of_nodes” : 1,
“number_of_data_nodes” : 1,
“discovered_cluster_manager” : true,
“active_primary_shards” : 0,
“active_shards” : 0,
“active_shards_percent_as_number” : 100.0
}
実測では status が green、ノード数 1、active_shards_percent_as_number が 100.0 で正常確認できました。
シングルノード構成ではデータ投入後にレプリカシャードが割り当てられず yellow になることがありますが、これは正常動作です。
本記事では後述のとおりインデックス作成時に number_of_replicas: 0 を指定したため green を保てています。

OpenSearch Dashboards の起動
OpenSearch Dashboards は Kibana の OSS フォークで、ブラウザからデータを可視化・検索できます。
OpenSearch と同じバージョンのイメージを使うと設定が楽です。コンテナ間で通信させるため、専用の Docker ネットワークを作るのがポイントです。
$ docker network create opensearch-net
# OpenSearch をネットワーク付きで起動し直す
$ docker rm -f opensearch-node1
$ docker run -d \
–name opensearch-node1 \
–network opensearch-net \
-e discovery.type=single-node \
-e DISABLE_SECURITY_PLUGIN=true \
-e “OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m” \
-p 9200:9200 \
opensearchproject/opensearch:2.17.1
# Dashboards を起動
$ docker run -d \
–name opensearch-dashboards \
–network opensearch-net \
-p 5601:5601 \
-e “OPENSEARCH_HOSTS=http://opensearch-node1:9200” \
-e DISABLE_SECURITY_DASHBOARDS_PLUGIN=true \
opensearchproject/opensearch-dashboards:2.17.1
9e1a2b3c4d5f…(コンテナID)
http://localhost:5601 にブラウザでアクセスして画面が表示されれば成功です。
実際に Playwright で開いて撮影したホーム画面が以下です。「Interact with the OpenSearch API」から Dev Tools にすぐ飛べます。

基本的な使い方 — REST API でインデックスと全文検索
①インデックスを作成する
OpenSearch では「インデックス」が RDB の「テーブル」に相当します。
PUT /{インデックス名} で作成します。シングルノードで green を保つため、レプリカ数を 0 にしておきます。
-H ‘Content-Type: application/json’ \
-d ‘{“settings”:{“number_of_shards”:1,”number_of_replicas”:0}}’
{“acknowledged”:true,”shards_acknowledged”:true,”index”:”linuxlab-test”}
②文書を投入する
PUT /{インデックス名}/_doc/{id} で文書を追加します。
フォーマットは JSON なので、任意のフィールドを自由に定義できます。?refresh=true を付けると、投入直後に検索対象へ反映されます。
-H ‘Content-Type: application/json’ \
-d ‘{“title”:”Ubuntu上でOpenSearchを構築する”,
“category”:”linux”,
“tags”:[“opensearch”,”elasticsearch”,”ubuntu”]}’
{“_index”:”linuxlab-test”,”_id”:”1″,”_version”:1,”result”:”created”,
“_shards”:{“total”:1,”successful”:1,”failed”:0},”_seq_no”:0}
③全文検索を実行する
match クエリは全文検索の基本です。
比較用に2件目の文書(Debian/Nginx の記事)も入れた状態で「Ubuntu」を検索したところ、1件だけがヒットし、スコアは 0.6768591でした。検索にかかった時間(took)は初回で 537ms です。
-H ‘Content-Type: application/json’ \
-d ‘{“query”:{“match”:{“title”:”Ubuntu”}}}’
{
“took”: 537,
“hits”: {
“total”: {“value”: 1, “relation”: “eq”},
“max_score”: 0.6768591,
“hits”: [{
“_source”: {“title”: “Ubuntu上でOpenSearchを構築する”, …}
}]
}
}
④Dev Tools でコマンドを GUI から実行する
Dashboards に含まれる Dev Tools(http://localhost:5601/app/dev_tools)では、
REST API を curl なしで GUI から実行できます。左にクエリ、右に結果が並ぶ2ペイン構成で、クエリの補完も効くので動作確認に便利です。
実際の画面が以下です(初期状態では GET _search が入力されています)。

⑤データを可視化する前にインデックスパターンを作る
Discover や可視化を使うには、まずインデックスパターン(どのインデックスを画面で扱うかの定義)を作る必要があります。
左メニューの「Dashboards Management → Index patterns」から作成します。実際の作成画面が以下です。ここで linuxlab-* のように指定すると、投入したデータを Discover で探索できるようになります。

よくあるエラーと解決策
①max virtual memory areas が低くて起動しない
# 解決策:ホスト側で sysctl を変更する
$ sudo sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
# 永続化(再起動後も有効にする)
$ echo “vm.max_map_count=262144” | sudo tee -a /etc/sysctl.conf
Docker Desktop(Mac/Windows)を使っている場合は内部の Linux VM に設定されているため、ホスト側では発生しないことが多いです。実際、本記事の検証環境ではカーネルが 5.10.76-linuxkit(Docker Desktop の VM)で、このエラーは出ませんでした。
VPS で直接 Docker を動かしている場合に出やすいエラーなので、本番移行時は覚えておいてください。
②cluster create-index blocked(ディスク容量不足)
# ディスク閾値チェックを一時的に無効化
$ curl -X PUT ‘http://localhost:9200/_cluster/settings’ \
-H ‘Content-Type: application/json’ \
-d ‘{“persistent”:{“cluster.routing.allocation.disk.threshold_enabled”:false}}’
{“acknowledged”:true}
ディスクの空き容量が 85% を超えるとインデックス作成がブロックされます。
本番では根本的にディスクを増やすか、不要なデータを削除してください。無効化はあくまで応急処置です。
③Dashboards が OpenSearch に接続できない
OPENSEARCH_HOSTS に localhost を指定すると、Dashboards コンテナの中から OpenSearch コンテナにアクセスできません。
Docker ネットワーク内では コンテナ名(例:opensearch-node1)を使う必要があります。これは実際に踏みやすい落とし穴です。
-e “OPENSEARCH_HOSTS=http://localhost:9200”
# ✅ 正しい:同じ Docker ネットワーク内のコンテナ名を使う
-e “OPENSEARCH_HOSTS=http://opensearch-node1:9200”
バンドルプラグインの概要
冒頭で触れたとおり、OpenSearch 2.17.1 には GET /_cat/plugins 実測で 23本のプラグインが標準でバンドルされています(すべて version 2.17.1.0)。
特に k-NN・ML・Neural Search の 3 本はベクトル検索・AI 活用を見据えた機能で、Elasticsearch の有料プランに相当します。
| プラグイン | 主な用途 | Elasticsearch 無料版 |
|---|---|---|
opensearch-knn |
ベクトル類似度検索(RAG / 画像検索) | 有料プランのみ |
opensearch-ml |
ML モデルをクラスタ内に読み込み・推論 | 有料プランのみ |
opensearch-neural-search |
セマンティック検索(意味ベースの検索) | 有料プランのみ |
opensearch-sql |
SQL / PPL 構文で OpenSearch を操作 | 一部対応 |
opensearch-security |
TLS・認証・RBAC | 基本機能は無料 |
opensearch-anomaly-detection |
時系列データの異常検知 | 有料プランのみ |
Docker Compose で管理する(推奨)
毎回 docker run を打つより、docker-compose.yml で設定をファイル管理するほうが楽です。
以下は OpenSearch + Dashboards を一緒に起動する構成です。
services:
opensearch-node1:
image: opensearchproject/opensearch:2.17.1
environment:
– discovery.type=single-node
– DISABLE_SECURITY_PLUGIN=true
– OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
ports:
– “9200:9200”
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:2.17.1
ports:
– “5601:5601”
environment:
– OPENSEARCH_HOSTS=http://opensearch-node1:9200
– DISABLE_SECURITY_DASHBOARDS_PLUGIN=true
depends_on:
– opensearch-node1
$ docker compose up -d
✔ Container opensearch-node1 Started
✔ Container opensearch-dashboards Started
VPS で本格運用するなら
ローカルで動作確認ができたら、次は VPS に移して本格的に使いたくなります。
OpenSearch は JVM ヒープに加えて OS キャッシュ用のメモリも必要なため、2〜4GB プランの VPS を選ぶのが現実的です。検証では -Xmx512m で安定動作しましたが、データ量が増えるほどメモリは必要になります。
| VPS | 推奨プラン | 月額 | 東京リージョン | メモ |
|---|---|---|---|---|
| Vultr | 2GB RAM / 1vCPU | $12/月〜 | あり | 最安水準。API 充実で自動化しやすい |
| DigitalOcean | 2GB RAM / 1vCPU | $14/月〜 | なし(最寄シンガポール) | ドキュメントが豊富 |
| ConoHa VPS | 2GB RAM / 3vCPU | 1,881円/月〜 | あり(東京・大阪) | 日本語サポートあり。国内決済可 |
まとめ
Ubuntu 24.04 + Docker で OpenSearch 2.17.1 を構築し、REST API での全文検索動作まで実測で確認しました。骨格の想定(19本)と違い、実際にはプラグインが23本入っていたなど、手を動かしてみて初めて分かることもありました。
- Docker イメージ
opensearchproject/opensearch:2.17.1(約1.06GB)で 1コマンド起動。DISABLE_SECURITY_PLUGIN=trueで開発環境をすばやく用意できる。起動完了まで実測 69.8 秒 - 起動確認は
curl http://localhost:9200/_cluster/health。status: greenを確認してから API を使い始める matchクエリで全文検索、日本語タイトルのヒット(スコア 0.6768591、took 537ms)を実確認- k-NN・ML・Neural Search を含む 23本のプラグインが標準バンドルで、Elasticsearch の有料機能相当を OSS で利用可能
- Dashboards(
http://localhost:5601)でブラウザ GUI も同時に使える。Dev Tools でクエリ補完付きの操作ができる - 本番 VPS 移行では 2GB RAM 以上のプランを選び、セキュリティプラグインを有効化して TLS を設定すること
VPS でのサーバー運用についてさらに詳しく知りたい方は も参考にしてください。



コメント