Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El azd publish comando permite compilar e insertar imágenes de contenedor en un registro de contenedor como Azure Container Registry o Docker Hub sin implementarlas inmediatamente en un recurso de Azure.
Al separar los pasos de compilación e inserción del paso de implementación, puede implementar flujos de trabajo de implementación más avanzados, como el patrón "compilar una vez, implementar en todas partes". Este enfoque es útil para las aplicaciones en contenedores destinadas a Azure Container Apps o Azure Kubernetes Service (AKS).
¿Por qué usar azd publish?
En un flujo de trabajo estándar azd , el azd deploy comando realiza tres acciones en secuencia:
- Compilación: compila el código de la aplicación en una imagen de contenedor.
- Inserción: inserta esa imagen en un registro.
- Implementación: actualiza el servicio de hospedaje de Azure (como Container Apps) para ejecutar la nueva imagen.
Aunque resulta conveniente para el desarrollo de bucles internos, este enfoque supone que cada implementación requiere una nueva compilación. En escenarios de producción, a menudo se quiere:
- Compilar una vez, implementar en todas partes: cree un único artefacto (imagen), pruébelo en un entorno de desarrollo y, a continuación, promueva ese mismo artefacto exacto a producción sin volver a generarlo.
- Centralizar artefactos: use una sola instancia compartida de Azure Container Registry (ACR) para almacenar imágenes para todos los entornos.
- Mejorar la seguridad: asegúrese de que solo se implementan imágenes comprobadas y probadas en producción.
azd publish habilita estos escenarios controlando solo los pasos 1 y 2 (compilación y empuje). A continuación, puede usar azd deploy con marcas específicas para controlar el paso 3 (Implementar) mediante la imagen publicada previamente.
Características clave
- Publicación independiente: publique imágenes en un registro sin desencadenar una implementación.
-
Destinos personalizados: use la
--tomarca para especificar exactamente dónde se debe insertar la imagen ([registry/]repository[:tag]), invalidando las convenciones de nomenclatura predeterminadas. - Compatibilidad con el Registro de terceros: inserción en registros externos (como Docker Hub) además de Azure Container Registry.
-
Soporte de ganchos: admite
prepublishypostpublishganchos para la automatización personalizada. - Destino del servicio: actualmente admite servicios hospedados en Azure Container Apps y AKS.
Usage
Para compilar y publicar la imagen para un servicio específico definido en azure.yaml:
azd publish <service-name>
Para compilar y publicar todos los servicios:
azd publish --all
Parámetros
| Flag | Description |
|---|---|
--all |
Publica todos los servicios definidos en azure.yaml. |
--from-package <image> |
Usa una imagen o paquete local existente en lugar de compilar a partir del origen. |
--to <image-ref> |
Especifica la referencia de imagen de destino (por ejemplo, <your-registry>.azurecr.io/my-app:v1). Invalida la nomenclatura predeterminada en azure.yaml. |
Nota:
En el caso de los servicios configurados con services.<name>.docker.imagePassthrough: true, azd publish no compila ni inserta una imagen. En su lugar, reutiliza la imagen remota configurada y rechaza los indicadores --from-package y --to para ese servicio.
Examples
Publique un servicio específico en una etiqueta personalizada:
azd publish api-service --to <your-registry>.azurecr.io/api-service:v1.0.0
Publicar una imagen local en un registro remoto:
Si ya ha creado una imagen localmente (por ejemplo: local-api:dev), puede etiquetarla e insertarla mediante azd:
azd publish api-service --from-package local-api:dev --to <your-registry>.azurecr.io/api-service:v1.0.0
Escenario: Compilación una vez, implementación en todas partes
Un flujo de trabajo de producción común implica crear una imagen una vez y promocionarla a través de varios entornos, como Dev -> Test -> Prod. Consigue esto mediante una combinación de azd publish y azd deploy.
Este escenario no se aplica a los servicios configurados con services.<name>.docker.imagePassthrough: true, porque azd publish no compila ni inserta una imagen para esos servicios.
Publique la imagen:
Compile el código e insértelo en el registro compartido.
azd publish api-service --to <your-registry>.azurecr.io/my-app:v1.0.0Implementación en desarrollo:
Implemente la versión de imagen específica en el entorno de desarrollo. La
--from-packagebandera indica aazd deployque omita los pasos de compilar y empujar y solo actualice la configuración del servicio.azd env select dev azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0Promocionar a producción:
Después de realizar pruebas en Dev, implemente la misma referencia de imagen al entorno de producción.
azd env select prod azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
Comparación con otros comandos
| Command | Acciones realizadas | Mejor para |
|---|---|---|
azd publish |
Compilar -> Enviar | Canales de CI/CD, creación de artefactos, flujos de trabajo de compilar una vez. |
azd publish --from-package |
Solo enviar | envía artefactos precompilados a los entornos. |
azd deploy |
Compilación -> Envío -> Implementación | Iteración de desarrollo estándar (bucle interno). |
azd deploy --from-package |
Solo implementación | implementar artefactos precompilados/publicados previamente a entornos. |
azd up |
Aprovisionamiento -> Compilación -> Envío -> Implementación | Introducción, inicialización de nuevos entornos desde cero. |
Nota:
El comportamiento predeterminado de azd up permanece sin cambios. Todavía organiza el proceso completo de un extremo a otro. Sin embargo, puede personalizar sus flujos de trabajo en azure.yaml para utilizar azd publish si es necesario.
Para los servicios configurados con services.<name>.docker.imagePassthrough: true, azd publish y azd publish --from-package no se aplican.
azd reutiliza la imagen remota configurada en lugar de compilar o insertar una.
Configuración en azure.yaml
Configure los valores predeterminados de Docker para los servicios en azure.yaml. El azd publish comando respeta esta configuración a menos que se invalide mediante marcas como --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
Con esta configuración, ejecutar azd publish api empujaría a docker.io/myusername/my-api:latest.
Reutilización de una imagen remota con imagePassthrough
Si el servicio ya tiene una imagen publicada que azd no debe compilar, insertar o administrar, establezca services.<name>.docker.imagePassthrough: true. Al habilitar esta opción:
- Establezca
services.<name>.imagecomo la referencia final completa de la imagen remota, incluyendo un registro explícito. - No se puede combinar
docker.imagePassthroughcondocker.remoteBuild. -
azd publishno compila ni publica una imagen para el servicio, y rechaza las opciones--from-packagey--topara ese servicio.
name: my-app
services:
api:
host: containerapp
docker:
imagePassthrough: true
image: docker.io/myusername/my-api:v1.0.0