日本語

開発者ツール · Docker run から Docker compose コンバーター

docker run フラグを Compose キーにマッピングする方法: -p、-v、-e、--name など

· 仕組み

港湾労働者 作曲する 開発者のワークフロー

Docker run コマンド オプションを Compose のポート、ボリューム、環境キーにマッピングする
オリジナル ToolAcre ベクトル イラスト

ほとんどの docker run フラグには 1 対 1 の Compose に相当するフラグがありますが、何も持たないものもあります。この投稿では、変換されたサービス定義が期待どおりに読み込まれるようにマッピングを詳しく説明します。

README の 3 行をラップする Docker 実行 — これは機能しますが、誰もレビューできません。チームは compose.yaml を必要としています。

複数行の Docker 実行により、サービスの運用コントラクトをシェル エイリアスまたは README に隠しながら、すぐにサービスを開始できます。 Compose ファイルは同じ選択内容をレビュー可能なサービス定義に移動しますが、変換ではセキュリティ設定を黙って削除するのではなく、すべてのフラグを考慮する必要があります。 ToolAcre はコマンドをテキストとして解析します。イメージを実行したり、Docker ソケットを開いたり、コンテナーをデプロイしたりすることはありません。出力をドラフト構成として扱いますが、ホスト パス、資格情報、およびネットワークの前提条件を確認するためにオペレーターがまだ必要です。

サービスの形状 — 画像、サービスの下にあるフラグをミラーリングするキーのセット、およびサービス名

Compose YAML は services: の下で開始され、その後にサービス名と image: が続きます。コマンド ラインとは異なり、キーはポートや環境エントリなどの繰り返し値をシーケンスにグループ化します。 ToolAcre は、 --name またはイメージからサービス名を派生し、YAML をシリアル化する前にモデルを構築します。現在の Compose ファイルにはトップレベルの version: キーは必要ありません。古いブログ投稿で、互換性を向上させるのではなく、廃止された警告が作成されることが示されていたため、これを追加しました。

共通フラグ — -p はポート、-v はボリューム、-e は環境、--name はコンテナ名、--restart は再起動、--network はネットワーク

共通のマッピングによりファイルが認識可能になります。 -p 8080:80 はポートになります: 引用符で囲まれたマッピング、-v host:container はボリューム エントリになります、-e KEY=value は環境に入ります、--name はcontainer_name になります、--restart は restart になり、--network はネットワーク コンテキストを必要とします。 YAML は句読点を別の型として解釈するのではなく、ポート マッピングを文字列として扱う必要があるため、ポート マッピングを引用符で囲むことが重要になります。名前付きボリュームには、独自のトップレベルのボリューム宣言が必要な場合があります。 Compose が実行されるマシンに対してホスト バインド マウントをチェックする必要があります。

あまり一般的ではないフラグ — --hostname、--user、--workdir、--entrypoint、--cap-add、--device、--label、--add-host とそのキー

--hostname、--user、--workdir、--entrypoint、--cap-add、--device、--label、--add-host などのフラグには、対応するサービス概念がありますが、そのセマンティクスはランタイムとホストに依存する場合があります。サポートされていない --security-opt を、一見もっともらしいキーとして作成したり、目に見えないように破棄したりしてはなりません。 ToolAcre は、サポートされていないオプションの名前を示す警告をリストするため、レビュー担当者はマッピングを手動で完了することも、Compose が適切な代替品ではないと判断することもできます。 YAML キーの存在は、サービスが同じ権限で開始されることを証明するものではありません。

位置引数 — 画像は image: になり、その後は command: になります。

イメージ名は、実行後の位置引数とそのオプションです。イメージの後の引数は、Docker 実行フラグではなく、サービス コマンドになります。その境界を越えてトークンを移動すると、それを受け取るプログラムが変わります。シェルの引用符とバックスラッシュは、1 つの README サンプルをトークンに分割するときにも重要です。 ToolAcre のパーサーはシェル インタプリタではないため、$HOME などの変数は、元の対話型シェルのように展開されると想定するのではなく、コンテキスト内で検討する必要があります。

実行された例: Postgres Docker run の変換 — 完全なコマンド、結果として得られるサービス定義、および行ごとの比較

例示的なコマンド docker run -d --namedemo-db -p 5432:5432 -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=demo-only --restart until-stopped postgres:16 を考えてみましょう。 ToolAcre は、イメージ postgres:16、container_namedemo-db、引用符で囲まれた 5432:5432 ポート、pgdata ボリューム、環境リスト エントリ、restart:without-stopped、およびトップレベルの pgdata ボリューム宣言を含む services.demo-db を発行します。 -d がコマンドラインの選択であることを警告します。 docker compose up -d がそれを処理します。 「デモのみ」は意図的に安全でない教育プレースホルダーです。この生成された YAML に実際のデータベース パスワードを決してコミットしないでください。

これでカバーされないもの — 同等のサービスを持たないフラグ (-d、--rm)、およびコマンドにまったく含まれないもの (ビルド コンテキストなど)

すべての実行フラグに、対応する永続的なサービス プロパティがあるわけではありません。 -d は、呼び出す compose コマンドによって処理されます。 --rm は、長時間実行されるサービスではなく、1 回限りの構成実行に属します。元のコマンドに存在しないビルド コンテキスト、シークレット ストア、健全性戦略、またはマルチサービスの依存関係は推論できません。このツールは、その出力が完全な展開計画であるかのように振る舞うのではなく、サポートされていないフラグを報告します。特権コンテナまたはネットワークに依存するコンテナをデプロイする前に、Docker Compose サービス リファレンスをお読みください。

要点: Compose は同じ構成で構造化されており、コンバーターは貼り付けたコマンドからサービス定義を生成します。

Compose は同じ構成であり、レビューと再現性を考慮して構造化されています。 Docker run から Docker compose へのコンバーターにより、ブラウザーに候補サービス定義が表示され、貼り付けられたコマンドがローカルに保持されます。 Docker は実行されません。すべてのソース フラグをその YAML キーと比較し、警告に対処し、結果を実際のホストに適用する前にプレーンな環境ブロックからシークレットを削除します。