起動手順を設定ファイルに残す

docker runをComposeに変換

手元の起動コマンドを、あとから読み直せる設定ファイルへ。ポートやボリュームをYAMLに整理し、移行時に確認すべき点も表示します。

docker runcompose.yaml
ブラウザー内で変換
01

コマンドを1つ入力してください。引用符とバックスラッシュによる行継続に対応し、入力中に変換します。

02

compose.yaml

services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    volumes:
      - "./html:/usr/share/nginx/html:ro"
    restart: "unless-stopped"
    network_mode: "bridge"

5個のオプション · 1サービスYAML

起動前の確認

  • バックグラウンド実行は起動時に指定します。docker compose up -dを使ってください。
  • 相対パスはcompose.yamlの配置先を基準に解決されます。ファイルの位置を確認するか、絶対パスを使ってください。
  • network_mode: bridgeでdocker runの既定ネットワークを維持します。Composeのプロジェクトネットワークを使う場合は、この項目を外してください。
ローカルで構成を確認docker compose config

登録不要。コマンドは実行せず、入力内容はブラウザー内で処理します。

長い起動コマンドを、管理しやすい設定に

検証用に使っていたdocker runを繰り返し使うなら、起動条件をファイルに残すと変更を確認しやすくなります。compose.yamlではイメージ、ポート、環境変数を項目ごとに読み取れるため、引き継ぎやGitでのレビューにも使えます。

変換対象は1コマンド、出力は1サービスです。稼働中のコンテナから設定を取得する機能ではなく、複数サービスの依存関係も自動では作成しません。

貼り付けたあとに確認すること

docker runまたはdocker container runで始まるコマンドを入力します。複数行に分ける場合は行末のバックスラッシュを残してください。サービス名を指定しても、--nameで指定したコンテナ名は変わりません。

YAMLを保存したら、参照先のディレクトリと環境変数ファイルを確認し、docker compose configを実行します。常駐サービスの起動にはdocker compose up -dを使えます。元のコマンドに--rmがある場合は、単発実行として扱います。

既存のボリュームを取り違えないために

名前付きボリュームは元の名前を指定し、external: trueで参照します。Composeが別名の新規ボリュームを作り、データが消えたように見える事態を避けるためです。既存のボリュームが必要なので、新規構築では事前に作成するか、この指定を外してください。データ自体は移動しません。

相対パスの基準はComposeファイルの配置先です。独自ネットワークも既存の外部ネットワークとして参照します。ネットワーク指定がなければnetwork_mode: bridgeを維持します。Composeのプロジェクトネットワークを利用する場合は、この項目を外します。

Nginxの起動設定をファイルにする例

ホストの8080番をコンテナの80番に割り当てる例です。unless-stoppedは再起動ポリシーとして残りますが、バックグラウンド実行を指定する-dはYAMLの項目にはなりません。

docker run -d --name web -p 8080:80 \
  --restart unless-stopped nginx:alpine
services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    restart: "unless-stopped"
    network_mode: "bridge"

シェルの展開処理は事前に済ませてください

POSIX形式の引用符、エスケープ、行継続に対応しています。PowerShellやCMD、パイプ、複数コマンド、Dockerのグローバルオプションには対応していません。$(pwd)やシェル変数は実際の値に置き換えてください。文字として残すドル記号は単一引用符などで保護し、出力では$$にエスケープします。

--env-fileformat: rawで出力するため、Docker Compose 2.30.0以降が必要です。参照ファイルの読み取り、ポートの空き確認、イメージの検査は行いません。構成を確認できてもアプリケーションの起動が保証されるわけではありません。

docker runのオプションとComposeの対応表

オプションComposeの項目扱い
IMAGEimageイメージ名とタグを維持
--namecontainer_name明示されたコンテナ名を維持
-p, --publishportsホストとコンテナのポート割り当て
-e, --envenvironment値のない変数は実行環境で解決
-v, --volume / --mountvolumesバインド、名前付き・匿名ボリューム
--networknetworks / network_modeネットワーク名またはモード
--restartrestart再起動ポリシー
IMAGE [COMMAND] [ARG…]command起動引数を配列で保持

Composeへの移行でよくある質問

versionの記述は必要ですか?

現在のCompose Specificationに沿って、servicesから始まるYAMLを生成します。旧形式のversionは追加しません。確認にはdocker composeを使ってください。

--rmを使う単発コマンドは?

docker compose run --rm --service-ports SERVICESERVICEをサービス名に置き換えます。--service-portsにより、設定したポート割り当ても適用されます。

非対応のオプションがあるとどうなりますか?

--gpus--link、一部の詳細なマウント設定は手動での記述が必要です。不完全な設定を渡さないよう、未対応の引数がある間は出力を停止します。

複数のコマンドをまとめられますか?

1つずつ変換し、サービス定義を結合してください。共有するボリュームやネットワーク、サービス間の依存関係は別途確認が必要です。

入力した認証情報は送信されますか?

変換はブラウザー内で完結し、入力コマンドをアップロードしません。ただし生成ファイルには入力した値が含まれるため、リポジトリに保存する前に内容を確認してください。

既存コンテナをそのまま置き換えますか?

変換だけではコンテナを操作しません。Composeを起動するときは、同じコンテナ名や使用中のポートとの競合を解消してください。

Docker公式ドキュメント: docker run · Compose · $$