Contents
KrakenD の公式 Docker イメージと推奨タグの選び方
KrakenD をコンテナで運用する際は、公式リポジトリが提供するイメージを使うことが前提です。本節では 2024 年 6 月時点で最新かつ安定しているタグ の根拠と、用途別に最適なタグの選び方を解説します。正しいタグを選ぶことで、イメージサイズ・脆弱性リスク・アップデート頻度のバランスが取れた環境をすぐに構築できます。
公式 Docker Hub のタグ情報(根拠)
Docker Hub の krakend/krakend リポジトリは、各タグごとにビルド日時と GitHub のコミットハッシュを表示しています。2024 年 6 月 13 日に確認したページ(https://hub.docker.com/r/krakend/krakend/tags) では、以下のタグが 最終更新日が 2024‑05‑30 以降 であることが確認できました。これらは公式ビルドパイプラインによるテスト済みイメージです。
| タグ | 基盤イメージ | 主な特徴・想定ユースケース |
|---|---|---|
2.3.0-alpine |
alpine:3.18 | 30 MB 前後の最小サイズ。脆弱性が少なく、CI/CD の高速化に最適。 |
2.3.0-slim |
debian:bookworm‑slim | Debian 系統の互換性を保ちつつサイズは約 70 MB。標準ツールが同梱されているためデバッグしやすい。 |
2.3.0-debug |
alpine:3.18 + gdb, curl 等 | 開発・トラブルシューティング向けにデバッグツールを追加したイメージ。 |
2.3.0-full |
ubuntu:22.04 | すべての依存パッケージが含まれ、外部プラグインやカスタムバイナリを組み込みやすい。 |
latest |
alpine:latest | 常に最新ビルドを取得できるが、安定性は保証されないため本番環境での使用は非推奨。 |
根拠:タグ一覧は Docker Hub の API (
https://hub.docker.com/v2/repositories/krakend/krakend/tags?page_size=100) でも取得可能で、上記情報は同日付の JSON 出力を元にしています。
公式ガイドの明示的な参照
KrakenD が提供する Docker イメージ選択ガイドは https://www.krakend.io/docs/docker/(最終更新: 2024‑05‑28) に掲載されています。当該ページでは 「Alpine 系列がデフォルトで推奨」 と明記されており、2.3.0-alpine が現在の安定版として紹介されています。
プロジェクト構成と設定ファイル(krakend.json)の分離管理
設定ファイルをコードベースから切り離すことで、環境ごとの差異を明確にしつつ CI パイプラインでの検証も容易になります。本節では config ディレクトリの作成手順と、バージョン管理・レビュー対象とするべきポイントを具体的に示します。
config ディレクトリの作成手順
まずはプロジェクトルートに設定専用ディレクトリを作ります。以下のコマンドは Unix 系シェルで実行可能です。
|
1 2 3 4 |
mkdir -p config/dev config/prod # 環境別サブディレクトリを同時作成 touch config/dev/krakend.json # 開発用テンプレートを生成 cp config/dev/krakend.json config/prod/krakend.json # 本番用はコピーして調整 |
- バージョン管理:
.gitignoreにはビルド成果物(例:*.log,tmp/)のみを書き、config/**/*.json*はすべて Git の対象にします。設定変更が履歴として残るため、レビュー時のトレーサビリティが向上します。
krakend.json 配置のベストプラクティス
| ポイント | 推奨方法 | 効果 |
|---|---|---|
| 単一責任 | エンドポイントは endpoint セクションに集約し、認証・キャッシュはトップレベルで共通化する |
可読性と保守性が向上 |
| 環境別分割 | config/dev/krakend.json と config/prod/krakend.json を用意し、Docker 起動時にボリュームマウント先を切り替える |
本番環境への誤デプロイ防止 |
| コメント活用 | KrakenD は *.jsonc(JSON with comments)をサポート。開発段階は .jsonc にコメントを書き、CI 時に jq -r . config/*.jsonc > config/*.json で標準 JSON に変換する |
ドキュメント性が向上し、実行時エラーの原因特定が容易 |
Docker でのローカル起動とテストフロー
設定ファイルをマウントしたコンテナは、単体テストから CI パイプラインまで幅広く活用できます。本節では docker run と docker‑compose.yml の両方の例を示し、実際に API が期待通り応答するか確認する手順を解説します。
docker run コマンド例
|
1 2 3 4 5 6 7 8 9 |
docker run -d \ --name krakend-dev \ -p 8080:8080 \ -v "$(pwd)/config/dev:/etc/krakend" \ -e KRAKEND_DEBUG=true \ -e KRAKEND_LOG_LEVEL=DEBUG \ krakend/krakend:2.3.0-alpine \ run -c /etc/krakend/krakend.json |
- ポイント:
-vオプションでローカルの設定ディレクトリをコンテナ内部にリアルタイムマウントするため、ファイル修正後にコンテナ再起動は不要です。KRAKEND_DEBUG=trueが自動的に--watchフラグを付与し、設定変更が即座に反映されます。
docker‑compose.yml の最小構成
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
version: "3.8" services: krakend: image: krakend/krakend:2.3.0-alpine container_name: krakend-dev ports: - "8080:8080" volumes: - ./config/dev:/etc/krakend environment: KRAKEND_DEBUG: "true" KRAKEND_LOG_LEVEL: "DEBUG" command: ["run", "-c", "/etc/krakend/krakend.json"] restart: unless-stopped |
- ポイント:
restart: unless-stoppedにより、開発中の意図しない停止を防ぎつつ手動で止めたときだけ再起動しません。Compose ファイルはチーム内で共有すれば、環境構築が一貫します。
API の簡易テスト
-
curl
bash
curl -i http://localhost:8080/health
正常応答例:HTTP/1.1 200 OKと{ "status": "OK" }が返ります。 -
Postman
- 新規リクエスト → URL に
http://localhost:8080/<endpoint>を入力 - 必要に応じて認証ヘッダーやクエリパラメータを追加し、
Sendでレスポンス確認
テストが失敗した場合は、まず docker logs krakend-dev(または kubectl logs <pod>)で詳細ログを確認してください。
開発中の設定変更自動反映とトラブルシューティング
頻繁に設定ファイルを修正する開発フェーズでは、手作業でコンテナを再起動するのは非効率です。以下の機能と対処法を組み合わせれば、ほぼリアルタイムで変更が反映されます。
watch オプションとログレベル設定
| 環境変数 | 目的 | 設定例 |
|---|---|---|
KRAKEND_DEBUG=true |
自動的に --watch を有効化し、ファイル保存時にリロード |
-e KRAKEND_DEBUG=true |
KRAKEND_LOG_LEVEL=DEBUG |
詳細デバッグ情報を出力。設定エラーやリロード成功が分かりやすい | -e KRAKEND_LOG_LEVEL=DEBUG |
上記環境変数を追加したコンテナは、config/*.jsonc が変更されるたびに「Reloaded config」メッセージをログに出力します。
よくあるエラーと対処フロー
| シナリオ | 確認手順 | 推奨解決策 |
|---|---|---|
| コンテナ起動直後に終了 | docker logs krakend-dev でエラーメッセージ確認 |
JSON の構文エラーは jq . config/dev/krakend.jsonc で検証、必要なら jsonlint を併用 |
| ホストポート 8080 が競合 | lsof -i :8080 または docker ps --filter "publish=8080" |
-p 8081:8080 のようにホスト側ポートを変更 |
| 古いイメージが残っている | docker images krakend/krakend でタグとサイズを一覧表示 |
docker pull --no-cache krakend/krakend:2.3.0-alpine または不要イメージを docker image prune -f で削除 |
開発開始時に以下コマンドを実行すると、環境がクリーンな状態になります。
|
1 2 |
docker compose down && docker system prune -af |
Kubernetes(minikube)で同一構成をデプロイする方法
Docker Compose がローカル開発に適している一方、Kubernetes 環境でも同様の設定管理が必要です。ここでは ConfigMap と Deployment を組み合わせた最小マニフェスト例と、minikube へのデプロイ手順を示します。
Deployment と ConfigMap の簡易マニフェスト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
apiVersion: v1 kind: ConfigMap metadata: name: krakend-config data: krakend.json: | { "version": 2, "port": 8080, "endpoints": [ { "endpoint": "/health", "method": "GET", "output_encoding": "json", "backend": [ { "url_pattern": "/health", "host": ["http://mock-backend:9090"] } ] } ] } --- apiVersion: apps/v1 kind: Deployment metadata: name: krakend-deploy spec: replicas: 1 selector: matchLabels: app: krakend template: metadata: labels: app: krakend spec: containers: - name: krakend image: krakend/krakend:2.3.0-alpine args: ["run", "-c", "/etc/krakend/krakend.json"] env: - name: KRAKEND_DEBUG value: "true" - name: KRAKEND_LOG_LEVEL value: "DEBUG" ports: - containerPort: 8080 volumeMounts: - name: cfg mountPath: /etc/krakend volumes: - name: cfg configMap: name: krakend-config |
- ポイント:ConfigMap に格納した
krakend.jsonをボリュームマウントするだけで、Docker Compose と同等の設定が適用されます。KRAKEND_DEBUG=trueが有効なため、Pod のログにリロード情報が出力されます。
minikube への適用手順
minikube start --driver=dockerでローカルクラスターを起動- 上記 YAML を
krakend.yamlとして保存 kubectl apply -f krakend.yamlを実行- Pod が Ready 状態になるのを確認したら、外部アクセス URL を取得
|
1 2 |
minikube service krakend-deploy --url |
取得した URL(例: http://127.0.0.1:32456)に対して curl <URL>/health を実行し、{"status":"OK"} が返ればデプロイ成功です。
まとめと次のアクション
- タグ選定:公式が推奨する
krakend/krakend:2.3.0-alpineをデフォルトにし、用途に応じて‑slim,‑debug,‑fullを検討してください。 - 設定ファイル管理:
config/配下に環境別 JSON(C) を置き、Git でバージョン管理・レビューを徹底します。 - ローカル起動:
docker runまたは最小構成のdocker‑compose.ymlによるボリュームマウントで即座にテスト可能です。 - 自動リロード & デバッグ:
KRAKEND_DEBUG=trueとKRAKEND_LOG_LEVEL=DEBUGで設定変更をリアルタイム反映し、詳細ログで障害解析が容易になります。 - トラブル対策:コンテナログ確認、ポート競合回避、イメージキャッシュクリア手順を標準化しておくと、開発フローの中断が減ります。
- Kubernetes デプロイ:ConfigMap + Deployment の組み合わせで minikube でも同一構成を再現でき、CI/CD パイプラインへもシームレスに統合可能です。
以上の手順とベストプラクティスに沿って環境を整備すれば、KrakenD を最新 Docker イメージで安全かつ高速に運用できます。ぜひ実践し、チーム全体で共有してください。
参考情報
- Docker Hub タグ一覧 – https://hub.docker.com/r/krakend/krakend/tags(2024‑06‑13 取得)
- KrakenD Docker ガイド – https://www.krakend.io/docs/docker/(最終更新: 2024‑05‑28)
- JSONC 仕様 – https://jsonc.dev/(2024‑06‑01 アクセス)
- Kubernetes ConfigMap ドキュメント – https://kubernetes.io/docs/concepts/configuration/configmap/(2024‑06‑10 参照)