docker run を Docker Compose に変換(逆変換も可能)
docker run コマンドを docker-compose.yml のサービスに、Compose のサービスを docker run に変換します。
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 に相当するものがないオプションは、黙って捨てるのではなく警告として一覧表示します。
使い方
- 左のボックスに docker run コマンドを貼り付けるか、例をクリックします。バックスラッシュを使った複数行のコマンドでも問題ありません。
- 右側に生成された docker-compose.yml を確認し、その下の注記と警告もチェックします。
- YAML をコピーするか docker-compose.yml としてダウンロードし、プロジェクトのディレクトリに置いて docker compose up -d を実行します。
- 逆方向に変換するには「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 で確認できます。無料、ブラウザで動作。