docker run を Docker Compose に変換(逆変換も可能)

docker run コマンドを docker-compose.yml のサービスに、Compose のサービスを docker run に変換します。

例:
\ で継続する複数行のコマンド、引用符、--flag=value 形式にも対応しています。
docker-compose.yml
services:
  db:
    image: postgres:16
    container_name: db
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: change-me
      POSTGRES_DB: app
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "127.0.0.1:5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      retries: 5
volumes:
  pgdata:
    name: pgdata
注意事項
  • -d / --detach を削除しました。バックグラウンドで実行するには「docker compose up -d」を使ってください。
  • 名前付きボリュームは正確な名前(「name:」)を維持します。これにより Compose は、新しい空の「<project>_<volume>」ボリュームを作らず、docker run が作成したボリュームを再利用します。

すべてブラウザ内で動作します。コマンドや Compose ファイルは、含まれるパスワードも含めて、どこにも送信されません。 すべての無料ツールを見る.

不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。

この docker run → Docker Compose 変換ツールは、プロジェクトの README からコピーするような docker run コマンドを、docker-compose.yml のサービスに変換します。ポート、ボリューム、環境変数、ネットワーク、再起動ポリシー、ヘルスチェック、ケーパビリティ、デバイス、GPU アクセスなど、数十のオプションに対応しています。逆方向にも使え、Compose ファイルの各サービスを、ちょっとしたテストや Compose のないシステム向けに、同等の docker run コマンドに変換できます。

変換では、実際のデプロイを壊しがちな細部に気を配っています。YAML 1.1 では引用符のない 22:22 が 60 進数として解釈されるため、ポートは引用符で囲みます。名前付きボリュームは名前をそのまま保持するので、Compose は空の「<project>_<volume>」を新しく作るのではなく、docker run が作成したデータを再利用します。$(pwd) は相対パスになります。-d や --rm のように CLI のセッションにしか影響しないフラグは注記付きで省き、Compose に相当するものがないオプションは、黙って捨てるのではなく警告として一覧表示します。

使い方

  1. 左のボックスに docker run コマンドを貼り付けるか、例をクリックします。バックスラッシュを使った複数行のコマンドでも問題ありません。
  2. 右側に生成された docker-compose.yml を確認し、その下の注記と警告もチェックします。
  3. YAML をコピーするか docker-compose.yml としてダウンロードし、プロジェクトのディレクトリに置いて docker compose up -d を実行します。
  4. 逆方向に変換するには「Compose → docker run」に切り替え、Compose ファイルを貼り付けて、各サービスのコマンドをコピーします。

よくある質問

docker run と docker compose の違いは何ですか?

docker run は、コマンドラインのオプションから 1 つのコンテナを起動します。Docker Compose は、1 つ以上のコンテナとそのネットワーク、ボリュームを YAML ファイルに記述し、docker compose up でまとめて起動します。Compose はバージョン管理、レビュー、同じ構成での再実行がしやすく、同じ Compose プロジェクト内のサービスはサービス名で互いにアクセスできます。

docker-compose.yml に version: の行はまだ必要ですか?

いいえ。Docker Compose v2 が使う Compose Specification では、トップレベルの version キーは廃止されており、現在のバージョンでは無視される旨の警告が表示されます。この変換ツールは version を出力しません。ファイル名は現在 compose.yaml が一般的ですが、docker-compose.yml も引き続き読み込まれます。

Compose に切り替えたらボリュームのデータが消えたのはなぜですか?

Compose は名前付きボリュームにプロジェクト名を接頭辞として付けるため、pgdata というボリュームは myproject_pgdata になり、これは新しい空のボリュームです。docker run が作成したボリュームを再利用するには、トップレベルで name: pgdata と宣言するか(この変換ツールはそうしています)、external: true を指定します。バインドマウント(/ や ./ で始まるパス)は影響を受けません。

-d、-it、--rm はどうなりますか?

-d はコンテナの起動方法に関する指定なので、docker compose up -d を使います。-i と -t は stdin_open: true と tty: true になります。--rm にはサービス単位で相当するものはありません。docker compose down でコンテナが削除され、単発のコマンド用には docker compose run --rm があります。

GPU のオプションはどう変換されますか?

--gpus all は、deploy.resources.reservations.devices の下に driver: nvidia、count: all、capabilities: [gpu] を指定したデバイス予約になります。これは Docker Compose のドキュメントに記載されている形式です。特定の GPU の指定(--gpus '"device=0,1"')は device_ids になります。ホストには引き続き NVIDIA Container Toolkit のインストールが必要です。

コマンドはサーバーに送信されますか?

いいえ。解析と変換はブラウザ内で行われるので、コマンド内の環境変数、パスワード、内部のホスト名がマシンの外に出ることはありません。それでも、機密情報を含む Compose ファイルはパスワードファイルと同じように扱い、.gitignore に記載した env_file に移してください。

docker run のフラグと対応する Compose のキー

• -p 8080:80 → ports: ["8080:80"] · --expose → expose

• -v /host:/ctr または -v name:/ctr → volumes · --mount → 長い構文の volumes · --tmpfs → tmpfs

• -e KEY=value → environment · --env-file → env_file · -l / --label → labels

• --name → container_name · -h → hostname · -u → user · -w → working_dir

• --restart → restart · --network → networks または network_mode(host、none、container:…)· --network-alias、--ip → ネットワークごとの aliases と ipv4_address

• --entrypoint → entrypoint · イメージの後の引数 → command

• --health-cmd/-interval/-timeout/-retries/-start-period → healthcheck · --no-healthcheck → healthcheck.disable

• --cap-add/--cap-drop → cap_add/cap_drop · --device → devices · --privileged、--read-only、--init → 同じ名前

• -m / --memory → mem_limit · --cpus → cpus · --shm-size → shm_size · --ulimit → ulimits · --sysctl → sysctls

• --log-driver/--log-opt → logging · --add-host → extra_hosts · --dns → dns · --gpus → deploy.resources.reservations.devices

変換後:本格的な Compose プロジェクトにする

1 対 1 の変換は出発点にすぎません。複数のコンテナを 1 つのファイルにまとめたら、--link や固定のコンテナ IP をサービス名に置き換え(アプリは db:5432 でデータベースにアクセス)、アプリがデータベースのヘルスチェックを待つよう condition: service_healthy 付きの depends_on を追加しましょう。container_name はサービスのスケールを妨げるので、Compose の外から固定の名前が必要でない限り削除します。パスワードは environment から .env ファイルや Compose の secrets に移し、そのファイルは Git に含めないようにしてください。

関連する無料ツール

  • サブネット計算 — 任意の CIDR のネットワーク、ブロードキャスト、ホスト範囲、マスクを計算。VLSM でのネットワーク分割、IPv6 の展開、範囲の重複チェックもできます。
  • chmod 計算 — 読み取り・書き込み・実行のチェックボックスから 8 進数のモードと chmod コマンドを求めたり、755、644、rwxr-xr-x を読み解いたりできます。
  • .gitignore ジェネレーター — 言語、フレームワーク、エディター、OS の .gitignore テンプレートを組み合わせて、1 つのすっきりしたファイルにまとめます。
  • JSON 整形 — JSON を整形、圧縮(minify)、検証し、解析エラーは行と列で位置を示します。ブラウザ上で動作、アップロード不要。
  • cron 式ジェネレーター — ドロップダウンから cron スケジュールを作成するか貼り付けると、わかりやすい日本語で読み、次の 10 回の実行時刻をローカル時刻と UTC で確認できます。無料、ブラウザで動作。