開發者工具 · Docker run 到 Docker compose 轉換器
docker run 標誌如何對應到 Compose 鍵:-p、-v、-e、--name 等
· 工作原理
泊塢窗 作曲 開發人員工作流程
大多數 docker run 標誌都有一對一的 Compose 等效項,而少數則沒有。這篇文章將逐步介紹映射,以便轉換後的服務定義能夠如預期讀取。
docker run 在自述文件中包含三行 - 它有效,沒有人可以審查它,並且團隊想要一個 compose.yaml
多行 docker 運行現在可以啟動服務,同時將其操作合約隱藏在 shell 別名或 README 中。 Compose 檔案將相同的選擇移至可審查的服務定義中,但轉換必須考慮每個標誌,而不是默默地刪除安全設定。 ToolAcre 將命令解析為文字:它從不執行映像、開啟 Docker 套接字或部署容器。將輸出視為仍需要操作員檢查主機路徑、憑證和網路假設的草稿配置。
服務的形狀 - 圖像,然後是服務下的一組鏡像標誌的鍵:以及服務名稱
Compose YAML 在 services: 下開始,後面跟著服務名稱和映像:。與命令列不同,它的鍵將重複的值(例如連接埠和環境條目)分組到序列中。 ToolAcre 從 --name 或映像派生服務名稱,並在序列化 YAML 之前建立模型。当前的 Compose 文件不需要顶级版本:key;添加一个是因为一篇较旧的博客文章显示它会创建一个过时的警告而不是提高兼容性。
常用標誌 — -p 表示埠、-v 表示卷、-e 表示環境、--name 表示容器名稱、--restart 表示重新啟動、--network 表示網絡
常見映射使檔案可識別:-p 8080:80 變成連接埠:使用引號的映射,-v host:container 變成磁碟區條目,-e KEY=value 進入環境,--name 變成容器名稱,--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:,其後的任何內容變成指令:
影像名稱是運行及其選項之後的位置參數。鏡像後面的參數成為服務命令,而不是更多的 Docker 運行標誌;跨越該邊界移動令牌會改變程式接收它的內容。將 README 範例拆分為標記時,Shell 引號和反斜線也很重要。 ToolAcre 的解析器不是 shell 解釋器,因此應該在上下文中審查諸如 $HOME 之類的變量,而不是假設它像在原始互動式 shell 中那樣擴展。
工作範例:轉換 Postgres docker run — 完整指令、產生的服務定義與逐行比較
考慮範例指令 docker run -d --name demo-db -p 5432:5432 -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=demo-only --restart except-stopped postgres:16。 ToolAcre 發出 services.demo-db,其中包含鏡像 postgres:16、container_name demo-db、帶引號的 5432:5432 連接埠、pgdata 卷、環境清單條目、重新啟動:unless-stopped 以及頂級 pgdata 卷聲明。它警告 -d 是一個命令列選項; docker compose up -d 處理它。 「僅演示」是故意不安全的教學佔位符 - 切勿將真實的資料庫密碼提交到此生成的 YAML 中。
這不包括什麼 - 沒有等效服務的標誌(-d,--rm)以及根本不在命令中的東西,例如構建上下文
並非每個運作標誌都有對應的持久服務屬性。 -d 由您呼叫的 compose 指令處理; --rm 屬於一次性撰寫運行而不是長期運行的服務。無法推斷原始命令中缺少的建置上下文、秘密儲存、運行狀況策略或多服務相依性。該工具報告不受支援的標誌,而不是假裝其輸出是完整的部署計劃。在部署特權或網路敏感容器之前,請先閱讀 Docker Compose 服務參考。
重點:Compose 具有相同的配置和結構 — 並且轉換器根據您貼上的命令產生服務定義
Compose 是相同的配置,其結構是為了審查和可重複性。 Docker run 到 Docker compose 轉換器會在瀏覽器中為您提供候選服務定義,並將貼上的命令保留在本機;它不執行 Docker。將每個來源標誌與其 YAML 金鑰進行比較,解決警告並從普通環境區塊中刪除機密,然後再將結果套用到真實主機。