這個 azd publish 指令允許你建立並推送容器映像檔到像 Azure Container Registry 或 Docker Hub 這類容器登錄檔,而不必立即部署到 Azure 資源。
透過將建置與推送步驟與部署步驟分開,你可以實作更進階的部署工作流程,例如「建置一次,遍布各地」的模式。 此方法適用於針對 Azure 容器應用 或 Azure Kubernetes 服務(AKS)的容器化應用。
為什麼要用 azd publish?
在標準 azd 工作流程中,指令 azd deploy 依序執行三個動作:
- 建置:將你的應用程式程式碼建置成容器映像檔。
- 推送:將該映像檔推送到登錄檔。
- 部署:更新你的 Azure 主機服務(像是容器應用程式)以執行新的映像檔。
雖然對內迴路開發來說方便,但此方法假設每次部署都需要重新建置。 在生產情境中,你通常會想:
- 一次建置,遍布各地:先建一個工件(映像),在開發環境中測試,然後將 同一個工件 推送到生產環境,且不重新建置。
- 集中化工件:使用單一共享的 Azure 容器登錄檔(ACR)來儲存所有環境的映像檔。
- 提升安全性:確保只有經過驗證與測試的映像才部署到生產環境。
azd publish 僅處理步驟 1 與 2(建置與推送)即可實現這些情境。 你可以用 azd deploy 的特定參數來使用預先發佈的映像檔處理第三步(部署)。
主要功能
- 獨立發佈:將映像檔發佈到登錄檔,且不觸發部署。
-
自訂目標:使用
--to旗標明確指定圖片應該推送的位置([registry/]repository[:tag]),覆蓋預設命名規則。 - 第三方登錄檔支援:除了 Azure 容器登錄檔外,還能推送到外部登錄檔(例如 Docker Hub)。
-
Hook 支援:支援
prepublish與postpublish自訂自動化的 hook。 - 服務目標設定:目前支援託管於 Azure 容器應用程式 與 AKS 上的服務。
Usage
若要建立並發佈為您的azure.yaml所定義的特定服務之映像檔:
azd publish <service-name>
要建立並發布所有服務:
azd publish --all
參數
| Flag | Description |
|---|---|
--all |
發布所有定義於 azure.yaml的服務。 |
--from-package <image> |
使用現有的本地映像檔或套件,而非從原始碼建置。 |
--to <image-ref> |
指定目標影像參考(例如, <your-registry>.azurecr.io/my-app:v1)。 覆蓋 azure.yaml 的預設命名。 |
範例
將特定服務發佈到自訂標籤:
azd publish api-service --to <your-registry>.azurecr.io/api-service:v1.0.0
將本地映像檔發佈到遠端登錄檔:
如果你已經在本地建立了映像檔(例如: local-api:dev),你可以用 azd: 來標記並推送它:
azd publish api-service --from-package local-api:dev --to <your-registry>.azurecr.io/api-service:v1.0.0
情境:一次建立,全域部署
常見的生產工作流程是建立一次映像檔,然後在不同環境(如開發-> 測試-> 生產)中推廣。此過程可結合 azd publish 與 azd deploy 實現。
發佈圖片:
建立程式碼並推送到你的共用登錄檔。
azd publish api-service --to <your-registry>.azurecr.io/my-app:v1.0.0部署到開發階段:
將特定的映像版本部署到開發環境中。 旗
--from-package標指示azd deploy跳過建置/推送步驟,只更新服務設定。azd env select dev azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0部署到生產環境:
在開發環境中測試後,將 相同的 映像檔參考部署到生產環境。
azd env select prod azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
與其他命令的比較
| Command | 執行的行動 | 適用對象 |
|---|---|---|
azd publish |
構建 -> 推送 | CI/CD 管線、創建工件、「一次建構」工作流程。 |
azd publish --from-package |
只用推 | 將預先建構的工件推送到環境中。 |
azd deploy |
建置 -> 推送 -> 部署 | 標準開發迭代(內迴圈)。 |
azd deploy --from-package |
僅部署 | 將預先建置/預先發佈的工件部署到環境中。 |
azd up |
配置 -> 建置 -> 推送 -> 部署 | 開始,從零開始初始化新環境。 |
備註
預設 azd up 行為保持不變。 它仍然負責整個端到端的流程。 不過,如果需要,你可以自訂工作流程 azure.yaml 來使用 azd publish 。
配置於 azure.yaml
在 azure.yaml 中配置你的服務的預設 Docker 設定。
azd publish指令會遵守這些設定,除非被諸如類似--to的旗標覆蓋。
name: my-app
services:
api:
project: ./src/api
host: containerapp
docker:
registry: 'docker.io/myusername' # Default registry
image: 'my-api' # Default image name
tag: 'latest' # Default tag
在此配置下,執行 azd publish api 會推入 docker.io/myusername/my-api:latest。