プリセット
ブラウザ版Kompose代替サーバー送信ゼロ

Docker Compose から Kubernetes マニフェストへの変換ツール (Compose to K8s)

docker-compose.yml のサービス、環境変数、ポート公開、ボリューム設定を Kubernetes の Deployment および Service YAML マニフェストに完全変換します。

Presets:
K8s生成オプション
docker-compose.ymlv3.8
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db-data-pvc
  namespace: default
  labels:
    app.kubernetes.io/name: db-data
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  namespace: default
  labels:
    app: frontend
    app.kubernetes.io/name: frontend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
        app.kubernetes.io/name: frontend
    spec:
      containers:
        - name: frontend
          image: node:20-alpine
          imagePullPolicy: IfNotPresent
          args:
            - npm
            - start
          workingDir: /app
          ports:
            - name: port-3000
              containerPort: 3000
              protocol: TCP
          env:
            - name: NODE_ENV
              value: production
            - name: API_URL
              value: http://backend:4000
          resources:
            limits:
              cpu: "1"
              memory: 1024Mi
            requests:
              cpu: 200m
              memory: 256Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  namespace: default
  labels:
    app: backend
    app.kubernetes.io/name: backend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
        app.kubernetes.io/name: backend
    spec:
      containers:
        - name: backend
          image: node:20-alpine
          imagePullPolicy: IfNotPresent
          args:
            - node
            - dist/index.js
          workingDir: /app
          ports:
            - name: port-4000
              containerPort: 4000
              protocol: TCP
          env:
            - name: PORT
              value: "4000"
            - name: DATABASE_URL
              value: postgres://user:password@postgres:5432/appdb
            - name: REDIS_URL
              value: redis://redis:6379
          livenessProbe:
            exec:
              command:
                - curl
                - -f
                - http://localhost:4000/health
            initialDelaySeconds: 10
            periodSeconds: 30
            timeoutSeconds: 5
            failureThreshold: 3
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: default
  labels:
    app: postgres
    app.kubernetes.io/name: postgres
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
        app.kubernetes.io/name: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - name: port-5432
              containerPort: 5432
              protocol: TCP
          env:
            - name: POSTGRES_DB
              value: appdb
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: secretpassword123
          volumeMounts:
            - name: db-data
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: db-data
          persistentVolumeClaim:
            claimName: db-data-pvc
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
  labels:
    app: redis
    app.kubernetes.io/name: redis
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
        app.kubernetes.io/name: redis
    spec:
      containers:
        - name: redis
          image: redis:7-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - name: port-6379
              containerPort: 6379
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: frontend
  namespace: default
  labels:
    app: frontend
    app.kubernetes.io/name: frontend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: frontend
  ports:
    - name: port-3000
      protocol: TCP
      port: 3000
      targetPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: backend
  namespace: default
  labels:
    app: backend
    app.kubernetes.io/name: backend
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: backend
  ports:
    - name: port-4000
      protocol: TCP
      port: 4000
      targetPort: 4000
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  namespace: default
  labels:
    app: postgres
    app.kubernetes.io/name: postgres
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: postgres
  ports:
    - name: port-5432
      protocol: TCP
      port: 5432
      targetPort: 5432
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
  labels:
    app: redis
    app.kubernetes.io/name: redis
    app.kubernetes.io/managed-by: compose-to-k8s
spec:
  type: ClusterIP
  selector:
    app: redis
  ports:
    - name: port-6379
      protocol: TCP
      port: 6379
      targetPort: 6379
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend
                port:
                  number: 3000
          - path: /backend
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 4000
解析サービス数
4

4 ポートがマップ済み / 4 コンテナイメージ

生成マニフェスト数
10

4 デプロイメント, 4 サービス, 1 PVC

クライアントサイド処理
0 ms レイテンシ

100%ブラウザ内メモリAST処理・即時プレビュー

ブラウザ内完結の高速変換

docker-compose.yml をサーバー送信なしで即座に Kubernetes Deployment、Service、PVC に変換します。

本番標準仕様の準拠

apps/v1 Deployment、v1 Service、PersistentVolumeClaim を適切なラベル、セレクタ、リソース制限とともに生成します。

追加ツールのインストール不要

Kompose や Go ランタイムのインストール不要で、ブラウザ上で直ちにマニフェストを入手できます。

技術リファレンス&アーキテクチャガイド

Docker Compose から Kubernetes マニフェスト変換ツール(Compose to K8s) — リファレンスガイド

docker-compose.yml のサービス、環境変数、ポート公開、ボリューム設定を Kubernetes の Deployment および Service YAML マニフェストに完全変換します。

主要パラメータ&設定項目

servicesmap[string]Service

Kubernetes の apps/v1 Deployment リソースに変換される各ワークロード(コンテナスペック、レプリカ設定)を定義。

初期値: 必須
portsarray[string | object]

Pod スペックの containerPort および対となる Kubernetes ClusterIP Service の port/targetPort にマッピングされるポート設定。

初期値: 任意
environment / env_filemap | array[string]

コンテナ環境変数。直接のキー・バリュー設定または ConfigMap / Secret 参照(envFrom)に変換。

初期値: 任意
volumesarray[string | object]

ストレージマウント。emptyDir、HostPath、または永続ボリューム要求(PersistentVolumeClaim: PVC)マウントに変換。

初期値: 任意
deploy.resourcesmap[string]object

CPU(cores/m)およびメモリ(Mi/Gi)の制限と要求(resources.limits / resources.requests)にマッピング。

初期値: 任意

プロの活用テクニック&推奨設定

機密情報は Secret や ConfigMap に分離する

Deployment マニフェスト内にデータベースパスワード等の環境変数を平文で直書きせず、Kubernetes の Secret や ConfigMap に切り離して envFrom 経由で注入することが推奨されます。

Docker Compose の名前付きボリ

Docker Compose の名前付きボリュームは単一ホストに依存します。Kubernetes では動的 StorageClass と連動する PersistentVolumeClaim (PVC) を定義し、ノード障害時のポッド再配置に備えましょう。

Kubernetes Service によるクラスタ内 DNS 解決

Docker Compose はデフォルトのブリッジネットワークでサービス名解決を行いますが、Kubernetes では Deployment ごとに ClusterIP Service を作成することで、http://service-name:port による名前解決を実現します。

CPU・メモリのリソース要求と制限(requests/limits)を明示

生成されたマニフェストには必ず resources.requests と limits を設定してください。未設定のままだとスケジューラが適切にPodを配置できず、ノード枯渇による OOMKilled を引き起こす原因になります。

よくあるトラブルと解決策

コンテナ間で名前解決できず Connection Refused や NXDOMAIN エラーが発生する

対象サービス用の Kubernetes Service が作成されているか、セレクター(selector: app: <name>)が Pod テンプレートのラベルと一致しているか確認し、localhost ではなく Service 名で接続してください。

ローカルバインドマウント(./src:/app 等)が原因で Pod が起動失敗・クラッシュする

Kubernetes クラスタのリモートノード上にはローカルマシンの相対パス(./)が存在しません。開発用コードはコンテナイメージ内にビルドするか、一時ディレクトリには emptyDir ボリュームを使用してください。

command と entrypoint のマッピングの不一致で CrashLoopBackOff になる

Docker Compose の 'command' は Kubernetes の 'args' に、Compose の 'entrypoint' は Kubernetes の 'command' に対応します。kubectl describe pod で起動引数を確認し整合性を合わせてください。

よくある質問 (FAQ)

本ツールは Docker Compose のサービスをどのように Kubernetes マニフェストへ変換しますか?▼

docker-compose.yml に定義された各サービスを解析し、Kubernetes の標準 apps/v1 Deployment とクラスタ内通信用の v1 Service (ClusterIP) を自動生成します。イメージ名、環境変数、ポート、ボリュームマウントも Kubernetes の公式仕様に沿って最適化されます。

公式の Kompose CLI ツールとの違いは何ですか?▼

Kompose は Go 言語のバイナリをローカル環境にインストールする必要がありますが、本ツールはブラウザの JavaScript エンジン上で 100% 完結します。ツールのインストールやクラスタ接続なしで、即座にクリーンな YAML を出力・確認できます。

Docker Compose のポート公開は Kubernetes Service でどう反映されますか?▼

'8080:80' のようなポート指定の場合、クラスタ内(または Ingress)からアクセスするポートが 'port: 8080'、コンテナ内部で実際にリッスンしているポートが 'targetPort: 80' および Pod の 'containerPort: 80' として正確にマッピングされます。

入力した Compose 定義や環境変数の機密情報はサーバーに送信されますか?▼

いいえ、一切送信されません。すべての構文解析およびマニフェスト生成処理はブラウザのクライアントメモリ上でのみ実行されます。パスワードやインフラ構成データが外部ネットワークに漏洩する心配はありません。

関連するおすすめ開発ツール

すべてのツール →
JSONから.env環境変数への変換ツール(平坦化とエクスポート)開発ツール

ネストされたJSONペイロードをカスタマイズ可能な区切り文字とプレフィックスオプションを使用して大文字SNAKE_CASEの.env設定に平坦化します。

ツールを開く→
SQL DDL から Drizzle ORM スキーマへの変換ジェネレーター (PostgreSQL, MySQL, SQLite)開発ツール

SQLのCREATE TABLE文を、pgTable、mysqlTable、sqliteTableの定義を含む型安全なDrizzle ORMスキーマコードに即座に変換します。

ツールを開く→
JSONからValibotスキーマ生成(モジュラーTypeScriptバリデーション)開発ツール

JSONデータをv.object、v.string、v.number、配列バリデータを含む軽量でツリーシェイカブルなValibotスキーマ定義に瞬時に変換します。

ツールを開く→
JSON to TypeBox スキーマジェネレーター開発ツール

JSON構造を高パフォーマンスなTypeBoxのType.Object定義へ変換し、Fastify、Ajv、TypeScriptのランタイム検証および静的型推論を実現します。

ツールを開く→
Prisma スキーマ → SQL DDL 移行ジェネレーター開発ツール

Prismaスキーマ(.prisma)からPostgreSQL、MySQL、SQLite向けSQL DDLマイグレーションスクリプトへの変換ガイド。

ツールを開く→
Prismaスキーマ TypeScript 型定義変換ガイド開発ツール

Prismaスキーマのmodelやenum、リレーションを解析し、Prisma Clientランタイム不要の純粋なTypeScript型定義(interface / type)を即時生成。

ツールを開く→