KongGateway

Kong Gateway 3.4.0 を Docker Compose で本番環境に安全デプロイする方法

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

1. 前提条件とインフラ要件

Kong をコンテナ化して稼働させる前に、ホスト側の Docker エンジンと Compose のバージョン、ネットワーク構成を整えておく必要があります。これらが推奨レベルに満たない場合、イメージが提供する機能(ヘルスチェックやリソース制限)が正しく動作しないことがあります。

1.1 Docker Engine のバージョン

Docker Engine は 20.10 以降 を推奨します。2026 年現在の最新版は 24.x 系です。以下コマンドでバージョンを確認し、古い場合は公式インストーラかパッケージマネージャで更新してください。

1.2 Docker Compose のバージョン

Compose v2 系 を必ず使用します。v1 はプラグインやリソース制限の記述が非推奨となっており、将来的にサポートが終了します。

1.3 ネットワークとポート要件

項目 推奨設定
Docker ネットワーク カスタムブリッジネットワーク(例: kong-net)を作成し、すべてのコンテナを同一に接続
公開ポート 8000 (HTTP), 8443 (HTTPS), 8001 (Admin API) をホスト側で公開
DB 用ポート PostgreSQL は内部ネットワークだけで 5432 を利用(外部からは遮断)
ファイアウォール 8001 は管理者 IP のみ許可し、一般クライアントからのアクセスはブロック

ポイント:上記条件が整っていれば、公式イメージに組み込まれたヘルスチェックやリソース制限をそのまま利用できます。


2. Kong 公式 Docker イメージの取得とタグ選択

Kong の公式イメージは Docker Hub に kong:<version> として公開されています。タグごとの特徴と、本ガイドで推奨するイメージを確認してください。

2.1 推奨タグと取得コマンド

タグ 内容 本番での推奨度
latest 最新安定版(2026‑06 時点では 3.5 系) テスト環境専用
3.4.0-alpine Alpine Linux ベース、サイズ小 軽量化が必須でプラグイン依存が少ない場合
enterprise-3.4.0 Kong Enterprise(有料)機能付き 商用サポートが必要なケース

ポイント:OSS の kong:3.4.0(Debian ベース)は、プラグインのライブラリ依存が少なく、安定性が最も高いと評価されています。


3. DB‑less モードでのデプロイ手順

DB‑less は Declarative Config(宣言的設定)だけで Kong を起動できるシンプル構成です。外部データベースを持たないため、永続化やマイグレーションの管理が不要になります。

3.1 Declarative Config の正しいパス確認

公式イメージでは KONG_DECLARATIVE_CONFIG に指定するファイルはコンテナ内部の任意パスで構いませんが、デフォルト例として /usr/local/kong/declarative/kong.yaml がよく使われます。実際に使用するイメージのバージョンやベース OS により異なる場合があるため、以下コマンドでコンテナ内にファイルを配置した後に確認してください。

存在しない場合は KONG_DECLARATIVE_CONFIG に自分がマウントするパス(例:/etc/kong/kong.yaml)を設定すれば問題ありません。

3.2 ヘルスチェック URL の選定

Kong 3.x 系では Admin API のヘルスエンドポイントは /status が非推奨となり、代わりに /health(v1)または /v2/status が提供されています。使用しているバージョンで利用可能なエンドポイントを公式ドキュメントで確認し、Compose ファイルの healthcheck に反映させましょう。

3.3 docker‑compose.yml(DB‑less)

起動手順と確認

ポイント:DB‑less は外部 DB を持たないため、リソース制限や read‑only コンテナと相性が良く、本番環境での軽量運用に適しています。


4. PostgreSQL バックエンド(永続化)モード

大規模・長期運用では設定・プラグイン情報を永続化できる PostgreSQL が推奨されます。Compose 内で DB コンテナと Kong を同時に起動し、depends_on とヘルスチェックで起動順序を保証します。

4.1 PostgreSQL のシークレット管理

記事中の平文パスワードは 実運用では絶対に使用しない ことが前提です。Docker Compose が提供する secrets 機能、あるいは外部シークレットストア(HashiCorp Vault, AWS Secrets Manager 等)と組み合わせて安全に供給しましょう。

4.2 docker‑compose.yml(PostgreSQL)

起動手順

ポイントdepends_on + healthcheck により、PostgreSQL が正常に起動・待機した後に Kong が接続を試みるため、接続失敗による再起動ループを防げます。


5. プラグイン有効化と read‑only コンテナ

Kong の拡張性はプラグインにありますが、デフォルトイメージには bundled(標準搭載)プラグインしか組み込まれていません。追加のサードパーティ・カスタムプラグインを利用する場合は KONG_PLUGINS 環境変数でロード対象を明示します。

5.1 KONG_PLUGINS の役割と例

設定例 説明
KONG_PLUGINS=bundled デフォルトの標準プラグインのみ使用(推奨)
KONG_PLUGINS=bundled,rate-limiting,jwt 標準に加えて rate‑limitingjwt を有効化
KONG_PLUGINS=custom,my-plugin カスタムプラグイン(ローカルビルドイメージ)をロード

注意:カスタムプラグインはビルド時に Kong のベースイメージへ組み込む必要があります。Dockerfile で luarocks install <plugin> 等の手順を追加してください。

5.2 Declarative Config におけるプラグイン定義

kong.yaml(Declarative Config)にプラグイン情報を書くだけで自動的にロードされます。以下は代表的な設定例です。

プラグイン変更時のリロード方法

  1. kong.yaml を編集
  2. コンテナ内部で Admin API/admin/v1/configPOST するか、コンテナを再起動
    bash
    docker exec kong curl -X POST http://localhost:8001/admin/v1/config

5.3 read‑only コンテナの設定

本番環境では read‑only にしてファイルシステム改ざんリスクを低減します。書き込みが必要なディレクトリは tmpfs またはボリュームで例外化します。

ポイントread_only: true にすると /usr/local/kong/ への書き込みが禁止されます。Kong が起動時に必要とする一時領域は tmpfs(上記例)で確保してください。


6. 本番環境ベストプラクティスとトラブルシューティング

6.1 ヘルスチェック・リソース制限の正しい扱い

  • 注意点deploy.resources は Docker Swarm や Kubernetes にデプロイした場合にのみ有効です。単体の docker compose 環境では CPU・メモリ制限は適用されません。そのため、ローカルテスト時は OS の cgroup 設定や外部ツールで制御してください。

6.2 TLS 終端とネットワーク分離

  1. TLS:証明書と鍵を certs/ ディレクトリに置き、環境変数でパスを渡す。
    yaml
    environment:
    KONG_SSL_CERT: /etc/kong/certs/tls.crt
    KONG_SSL_CERT_KEY: /etc/kong/certs/tls.key
    volumes:

    • ./certs:/etc/kong/certs:ro
  2. ネットワーク分離:本番は bridge ではなく Overlay(Swarm)や Calico 等の CNI を使用し、API ゲートウェイと DB の通信だけを許可します。

6.3 よくあるエラーと対処法

エラー 原因例 確認手順 推奨解決策
ポート競合 (Error starting userland proxy: listen tcp 0.0.0.0:8000) 同一ホストで別プロセスが 8000/8443 を使用中 lsof -i :8000docker ps のポートマッピング確認 該当サービスを停止、または Compose 側のポート番号を変更
DB 接続失敗 (could not connect to PostgreSQL) 環境変数ミスマッチ、DB 起動遅延、シークレット未提供 docker logs kong-pg-modedocker exec -it postgres pg_isready -U kong depends_on とヘルスチェックを正しく設定し、パスワードは secrets で供給
プラグインロード失敗 (failed to load plugin 'rate-limiting') KONG_PLUGINS に未列挙、プラグインがイメージに組み込まれていない docker exec kong curl http://localhost:8001/plugins で一覧確認 KONG_PLUGINS=bundled,rate-limiting を環境変数へ追加、またはカスタムイメージを再ビルド
read‑only エラー (cannot write to '/usr/local/kong') 必要な書き込みディレクトリが read_only: true のまま例外化されていない 起動ログでパスを確認 → /tmp, /var/run/kong がマウントされているか tmpfs で対象ディレクトリを追加、またはボリュームで例外化

ポイント:エラーが出たらまず コンテナログdocker compose ps --services --filter "status=running" の状態を確認し、上表の対処法を順に試すと迅速に復旧できます。


7. 完全版 docker‑compose.yml ダウンロード

以下のファイルは本ガイドで紹介した DB‑less + read‑only + TLS + プラグイン の構成例です。ローカル環境で docker compose up -d すれば、すぐに Kong Gateway が起動します。

最終的なチェックリスト
- [ ] Docker Engine & Compose が推奨バージョンか確認
- [ ] KONG_DECLARATIVE_CONFIG のパスがコンテナ内に正しく存在することを検証
- [ ] ヘルスチェック URL(/v2/status など)が使用中の Kong バージョンで有効か確認
- [ ] 本番では DB パスワード等機密情報を Docker secrets または外部シークレットストアで供給
- [ ] KONG_PLUGINS に必要なプラグインをすべて列挙し、カスタムプラグインはイメージに組み込む

以上で、安全・安定・拡張性の高い Kong Gateway の本番デプロイ が完了します。ぜひこの構成をベースに、各自の要件に合わせたチューニングを行ってください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-KongGateway