Está en la página 1de 231

Contents

Documentación de Container Instances


Información general
Acerca de Azure Container Instances
Guías de inicio rápido
Implementación de una instancia de contenedor: CLI
Implementación de una instancia de contenedor: Portal
Implementación de una instancia de contenedor: PowerShell
Implementación de una instancia de contenedor: plantilla de Resource Manager
Implementación de una instancia de contenedor: CLI de Docker
Tutoriales
Creación e implementación de una imagen de contenedor
1 - Creación de una imagen de contenedor
2 - Creación de un registro de contenedor
3 - Implementación de la aplicación
Implementación de un grupo con varios contenedores
Implementación de un grupo de contenedores: YAML
Implementación de un grupo de contenedores: Resource Manager
Integración con servicios de Azure
Desencadenar con instancias de Azure Functions
Ejemplos
Ejemplos de código
Plantillas de Resource Manager
Conceptos
Grupos de contenedores
Cuotas y límites
Disponibilidad en regiones
Relación con los orquestadores
Seguridad
Línea de base de seguridad
Consideraciones sobre la seguridad
Redes virtuales
Guías paso a paso
Implementación
Implementación en una red virtual
Implementación desde Azure Container Registry
Implementación con Acciones de GitHub (versión preliminar)
Cifrado de datos de implementación
Implementación en hosts dedicados
Uso de un conector de Logic Apps
Escenarios de contenedores
Establecimiento de la directiva de reinicio para tareas de una sola ejecución
Establecimiento de variables de entorno (env)
Establecimiento del comando de inicio del contenedor (punto de entrada)
Ejecución de un comando (exec)
Ejecución de un contenedor de instalación (init)
Uso de una identidad administrada (versión preliminar)
Uso de recursos de GPU (versión preliminar)
Habilitación de un punto de conexión SSL en sidecar
Exposición de una dirección IP estática con App Gateway
Uso de Azure Firewall para la entrada y salida
Montaje de volúmenes de datos
Recurso compartido de archivos de Azure
Secreto
Directorio vacío
Repositorio de Git clonado
Administración de contenedores en ejecución
Configuración de sondeos de ejecución
Configuración de sondeos de preparación
Detención e inicio de contenedores
Actualización de contenedores en ejecución
Supervisión y registro
Supervisión del uso de CPU y memoria
Obtención de registros y eventos de contenedores
Registro con registros de Azure Monitor
Solución de problemas
Solución de problemas comunes
Referencia
Azure CLI
REST
PowerShell
.NET
Python
Java
Node.js
Plantilla de Resource Manager
YAML
Conector
Recursos
Desarrollo de aptitudes con Microsoft Learn
Disponibilidad en regiones
Precios
Plan de desarrollo
Proporcionar comentarios sobre el producto
Stack Overflow
Vídeos
Preguntas más frecuentes
¿Qué es Azure Container Instances?
23/07/2020 • 6 minutes to read • Edit Online

Los contenedores están convirtiéndose en la manera preferida de empaquetar, implementar y administrar


aplicaciones en la nube. Azure Container Instances ofrece la forma más rápida y sencilla de ejecutar un contenedor
en Azure, sin tener que administrar ninguna máquina virtual y sin necesidad de adoptar un servicio de nivel
superior.
Azure Container Instances es una excelente solución para cualquier escenario que pueda funcionar en
contenedores aislados, incluidas las aplicaciones simples, la automatización de tareas y los trabajos de compilación.
En aquellos escenarios donde se necesita una orquestación completa de contenedores, incluida la detección de
servicios en varios contenedores, el escalado automático y las actualizaciones de aplicaciones coordinadas, se
recomienda Azure Kubernetes Service (AKS).

Tiempos de inicio rápido


Los contenedores ofrecen importantes ventajas de inicio sobre las máquinas virtuales (VM). Azure Container
Instances puede iniciar un contenedor en Azure en segundos sin que sea necesario aprovisionar y administrar
máquinas virtuales.

Acceso a contenedores
Azure Container Instances permite exponer los grupos de contenedores directamente a Internet con una dirección
IP y un nombre de dominio completo (FQDN). Al crear una instancia de contenedor, se puede especificar una
etiqueta de nombre DNS personalizada, con el fin de que se pueda acceder a la aplicación en customlabel.
azureregion. azurecontainer.io.
Azure Container Instances también admite la ejecución de comandos en un contenedor en ejecución, para lo que
proporciona un shell interactivo que ayuda en el desarrollo y la solución de problemas de las aplicaciones. El
acceso se realiza a través de HTTPS y se usa TLS para proteger las conexiones de cliente.

IMPORTANT
A partir del 13 de enero de 2020, Azure Container Instances requerirá que todas las conexiones seguras de servidores y
aplicaciones utilicen TLS 1.2. Se retirará la compatibilidad con TLS 1.0 y 1.1.

Seguridad de nivel de hipervisor


Históricamente, los contenedores han ofrecido aislamiento a la dependencia entre aplicaciones y gobernanza de
recursos, pero no se han considerado suficientemente protegidos para el uso de varios inquilinos hostiles. Azure
Container Instances garantiza que la aplicación está tan aislada en un contenedor como lo estaría en una máquina
virtual.

Tamaños personalizados
Los contenedores normalmente están optimizados para ejecutar una sola aplicación, pero las necesidades exactas
de esas aplicaciones pueden diferir considerablemente. Azure Container Instances proporciona un uso óptimo al
permitir especificaciones exactas de los núcleos y la memoria de la CPU. El usuario paga según lo que necesita y se
le factura por segundo, para que pueda optimizar con precisión los gastos según sus necesidades reales.
Para los trabajos de proceso intensivo, como los de aprendizaje automático, Azure Container Instances puede
programar los contenedores de Linux para usar recursos de GPU de NVIDIA Tesla (versión preliminar).

Almacenamiento persistente
Para recuperar y conservar el estado con Azure Container Instances, ofrecemos el montaje directo de los recursos
compartidos de Azure Files con el respaldo de Azure Storage.

Contenedores de Linux y Windows


Azure Container Instances puede programar los contenedores Windows y Linux con la misma API. Simplemente
especifique el tipo de sistema operativo al crear los grupos de contenedor.
Algunas características están restringidas actualmente a los contenedores Linux:
Varios contenedores por grupo de contenedor
Montaje del volumen (Azure Files, emptyDir, GitRepo, secreto)
Métrica de uso de recursos con Azure Monitor
Implementación de Virtual Network
Recursos de GPU (versión preliminar)
En el caso de las implementaciones de contenedores de Windows, use imágenes basadas en imágenes base de
Windows comunes.

NOTE
El uso de imágenes basadas en Windows Server 2019 en Azure Container Instances está en versión preliminar.

Grupos con programación compartida


Azure Container Instances admite la programación de grupos con varios contenedores que comparten una
máquina host, la red local, el almacenamiento y el ciclo de vida. Esto le permite combinar el contenedor de la
aplicación principal con otros contenedores que actúan en una función auxiliar, como los patrones sidecar de
registro.

Implementación de Virtual Network


Actualmente disponible para cargas de trabajo de producción en un subconjunto de regiones de Azure, esta
característica de Azure Container Instances permite la implementación de instancias de contenedor en una red
virtual de Azure. Al implementar instancias de contenedor en una subred dentro de la red virtual, pueden
comunicarse de forma segura con otros recursos de la red virtual, incluidos los que están en el entorno local
(mediante VPN Gateway o ExpressRoute).

Pasos siguientes
Pruebe a implementar un contenedor en Azure con un único comando mediante nuestra Guía de inicio rápido:
Guía de inicio rápido de Azure Container Instances
Inicio rápido: Implementación de una instancia de
contenedor en Azure mediante la CLI de Azure
21/05/2020 • 11 minutes to read • Edit Online

Use Azure Container Instances para ejecutar contenedores de Docker sin servidor en Azure con sencillez y
velocidad. Implemente una aplicación en una instancia de contenedor a petición cuando no necesite una
plataforma de orquestación de contenedores completa, como Azure Kubernetes Service.
En esta guía de inicio rápido, va a usar la CLI de Azure para implementar un contenedor de Docker aislado y hacer
que su aplicación esté disponible con un nombre de dominio completo (FQDN). Unos pocos segundos después
de ejecutar un comando de implementación único, puede ir a la aplicación que se ejecuta en el contenedor:

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.
Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos
preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno
local.
Para iniciar Azure Cloud Shell:

O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se copia
automáticamente el código en Cloud Shell.
O P C IÓ N E JEM P LO O VÍN C ULO

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.
Puede usar Azure Cloud Shell o una instalación local de la CLI de Azure para completar esta guía de inicio rápido.
Si desea usarlos de forma local, se recomienda la versión 2.0.55 o posterior. Ejecute az --version para encontrar
la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Crear un grupo de recursos


Las instancias de contenedores de Azure, al igual que otros recursos de Azure, se deben implementar en un grupo
de recursos. Los grupos de recursos le permiten organizar y administrar los recursos relacionados de Azure.
En primer lugar, cree un grupo de recursos denominado myResourceGroup en la ubicación eastus con el
comando az group create siguiente:

az group create --name myResourceGroup --location eastus

Crear un contenedor
Ahora que tiene un grupo de recursos, puede ejecutar un contenedor en Azure. Para crear una instancia de
contenedor con la CLI de Azure, proporcione un nombre de grupo de recursos, un nombre de instancia de
contenedor y una imagen de contenedor de Docker al comando az container create. En este inicio rápido, usará la
imagen mcr.microsoft.com/azuredocs/aci-helloworld pública. Esta imagen empaqueta una pequeña aplicación
web escrita en Node.js que sirve una página HTML estática.
Puede exponer los contenedores en Internet mediante la especificación para que se abran uno o varios puertos, o
la especificación de una etiqueta de nombre DNS o ambas. En este inicio rápido, se implementa un contenedor
con una etiqueta de nombre DNS para que la aplicación web sea públicamente accesible.
Ejecute un comando similar al siguiente para iniciar una instancia de contenedor. Establezca un valor
--dns-name-label que sea único dentro de la región de Azure en la que cree la instancia. Si recibe un mensaje de
error "DNS name label not available" (La etiqueta de nombre DNS no está disponible), pruebe otra etiqueta de
nombre DNS diferente.

az container create --resource-group myResourceGroup --name mycontainer --image


mcr.microsoft.com/azuredocs/aci-helloworld --dns-name-label aci-demo --ports 80

En unos segundos, debería recibir una respuesta de la CLI de Azure que indica que la implementación ha
finalizado. Compruebe su estado con el comando az container show:

az container show --resource-group myResourceGroup --name mycontainer --query "


{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" --out table

Al ejecutar el comando, se muestra el nombre completo del dominio (FQDN) y su estado de aprovisionamiento.

FQDN ProvisioningState
--------------------------------- -------------------
aci-demo.eastus.azurecontainer.io Succeeded

Si el estado ProvisioningState del contenedor es Correcto , vaya a su FQDN en el explorador. Si ve una página
web parecida a la siguiente, enhorabuena. Ha implementado correctamente una aplicación que se ejecuta en un
contenedor de Docker en Azure.

Si al principio no aparece la aplicación, espere unos segundos mientras se propaga el DNS y, a continuación,
pruebe a actualizar el explorador.

Extracción de los registros del contenedor


Cuando necesite solucionar problemas de un contenedor o de la aplicación que este ejecuta (o simplemente ver la
salida), empiece por ver los registros de la instancia de contenedor.
Extraiga los registros de la instancia de contenedor con el comando az container logs:

az container logs --resource-group myResourceGroup --name mycontainer

En la salida se muestran los registros del contenedor y se mostrarán las solicitudes HTTP GET generadas al ver la
aplicación en el explorador.
listening on port 80
::ffff:10.240.255.55 - - [21/Mar/2019:17:43:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"

Flujos de salida como adjuntos


Además de ver los registros, puede asociar la salida estándar local y los flujos de error estándar a los del
contenedor.
En primer lugar, ejecute el comando az container attach para asociar la consola local a los flujos de salida del
contenedor:

az container attach --resource-group myResourceGroup --name mycontainer

Una vez asociados, actualice el explorador varias veces para generar algunas salidas adicionales. Cuando haya
terminado, desconecte la consola con Control+C . Debería ver un resultado similar al siguiente:

Container 'mycontainer' is in state 'Running'...


(count: 1) (last timestamp: 2019-03-21 17:27:20+00:00) pulling image "mcr.microsoft.com/azuredocs/aci-
helloworld"
(count: 1) (last timestamp: 2019-03-21 17:27:24+00:00) Successfully pulled image
"mcr.microsoft.com/azuredocs/aci-helloworld"
(count: 1) (last timestamp: 2019-03-21 17:27:27+00:00) Created container
(count: 1) (last timestamp: 2019-03-21 17:27:27+00:00) Started container

Start streaming logs:


listening on port 80

::ffff:10.240.255.55 - - [21/Mar/2019:17:43:53 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT


10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:44:36 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.55 - - [21/Mar/2019:17:47:01 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
::ffff:10.240.255.56 - - [21/Mar/2019:17:47:12 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"

Limpieza de recursos
Cuando haya terminado con el contenedor, puede eliminarlo con el comando az container delete:

az container delete --resource-group myResourceGroup --name mycontainer

Para comprobar que se ha eliminado el contenedor, ejecute el comando az container list:

az container list --resource-group myResourceGroup --output table

El contenedor mycontainer no debe aparecer en la salida del comando. Si no cuenta con ningún otro contenedor
en el grupo de recursos, no se muestra ninguna salida.
Si ha terminado con el grupo de recursos myResourceGroup y todos los recursos que contiene, elimínelo con el
comando az group delete:

az group delete --name myResourceGroup

Pasos siguientes
En este inicio rápido, ha creado una instancia de contenedor de Azure a partir de una imagen de Microsoft
pública. Si quiere compilar una imagen de contenedor e implementarla desde un registro de contenedor privado
de Azure, vaya al tutorial de Azure Container Instances.
Tutorial de Azure Container Instances
Para probar opciones de ejecución de contenedores en un sistema de orquestación en Azure, consulte los inicios
rápidos de Azure Kubernetes Service (AKS).
Inicio rápido: Implementación de una instancia de
contenedor en Azure mediante Azure Portal
21/05/2020 • 5 minutes to read • Edit Online

Use Azure Container Instances para ejecutar contenedores de Docker sin servidor en Azure con sencillez y
velocidad. Implemente una aplicación en una instancia de contenedor a petición cuando no necesite una plataforma
de orquestación de contenedores completa, como Azure Kubernetes Service.
En esta guía de inicio rápido, va a usar Azure Portal para implementar un contenedor de Docker aislado y hacer que
su aplicación esté disponible con un nombre de dominio completo (FQDN). Después de configurar algunos valores
e implementar el contenedor, puede ir a la aplicación en ejecución:

Inicio de sesión en Azure


Inicie sesión en Azure Portal en https://portal.azure.com.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Creación de instancia de contenedor


Seleccione Crear un recurso > Contenedores > Container Instances .
En la página Aspectos básicos , escriba los siguientes valores en los cuadros de texto Grupo de recursos ,
Nombre de contenedor e Imagen de contenedor . Deje los otros valores predeterminados y haga clic en
Aceptar .
Grupo de recursos: Crear nuevo > myresourcegroup
Nombre de contenedor: mycontainer
Origen de imagen: Imágenes de inicio rápido
Imagen de contenedor: mcr.microsoft.com/azuredocs/aci-helloworld (Linux)
En este inicio rápido, use la configuración predeterminada para implementar la imagen aci-helloworld pública de
Microsoft. Esta imagen de Linux de ejemplo empaqueta una pequeña aplicación web escrita en Node.js que sirve
una página HTML estática. También puede traer sus propias imágenes de contenedor almacenadas en Azure
Container Registry, Docker Hub u otros registros.
En la página Redes , especifique una etiqueta de nombre DNS para el contenedor. El nombre debe ser único
dentro de la región de Azure en la que crea la instancia de contenedor. El contenedor estará públicamente accesible
en <dns-name-label>.<region>.azurecontainer.io . Si recibe un mensaje de error "DNS name label not available" (La
etiqueta de nombre DNS no está disponible), pruebe otra etiqueta de nombre DNS diferente.
Deje el resto de opciones con sus valores predeterminados y, luego, seleccione Revisar y crear .
Cuando se complete la validación, verá un resumen de la configuración del contenedor. Seleccione Crear para
enviar la solicitud de implementación de contenedor.
Cuando se inicia una implementación, aparece una notificación que indica que la implementación está en curso.
Aparecerá otra notificación cuando se haya implementado el grupo de contenedores.
Para abrir la información general del grupo de contenedores, vaya a Grupos de recursos > myresourcegroup
> mycontainer . Tome nota del FQDN (el nombre de dominio completo) de la instancia de contenedor y también
de su estado .
Cuando el Estado sea En ejecución, vaya al FQDN del contenedor en el explorador.

Felicidades. Con tan solo implementar algunos valores, ha implementado una aplicación de acceso público en
Azure Container Instances.

Visualización de registros de contenedores


Ver los registros de una instancia de contenedor resulta de utilidad al solucionar problemas con el contenedor o la
aplicación en la que se ejecuta.
Para ver los registros del contenedor, en Configuración , seleccione Contenedores y luego Registros . Debería
ver la solicitud GET HTTP que se genera cuando se ve la aplicación en el explorador.
Limpieza de recursos
Cuando haya terminado con el contenedor, seleccione Introducción para el contenedor mycontainer y luego
seleccione Eliminar .

Seleccione Sí cuando aparezca el cuadro de diálogo de confirmación.

Pasos siguientes
En este inicio rápido, ha creado una instancia de contenedor de Azure a partir de una imagen de Microsoft pública.
Si quiere compilar una imagen de contenedor e implementarla desde un registro de contenedor privado de Azure,
vaya al tutorial de Azure Container Instances.
Tutorial de Azure Container Instances
Inicio rápido: Implementación de una instancia de
contenedor en Azure mediante Azure PowerShell
21/05/2020 • 8 minutes to read • Edit Online

Use Azure Container Instances para ejecutar contenedores de Docker sin servidor en Azure con sencillez y
velocidad. Implemente una aplicación en una instancia de contenedor a petición cuando no necesite una plataforma
de orquestación de contenedores completa, como Azure Kubernetes Service.
En esta guía de inicio rápido, va a usar Azure PowerShell para implementar un contenedor de Windows aislado y
hacer que su aplicación esté disponible con un nombre de dominio completo (FQDN). Unos pocos segundos
después de ejecutar un comando de implementación único, puede ir a la aplicación que se ejecuta en el
contenedor:

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.
Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos
preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.
Para iniciar Azure Cloud Shell:
O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se copia
automáticamente el código en Cloud Shell.

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.
Si decide instalar y usar PowerShell localmente, para este tutorial se requiere el módulo de Azure PowerShell.
Ejecute Get-Module -ListAvailable Az para encontrar la versión. Si necesita actualizarla, consulte Instalación del
módulo de Azure PowerShell. Si PowerShell se ejecuta localmente, también debe ejecutar Connect-AzAccount para
crear una conexión con Azure.

Crear un grupo de recursos


Las instancias de contenedores de Azure, al igual que otros recursos de Azure, se deben implementar en un grupo
de recursos. Los grupos de recursos le permiten organizar y administrar los recursos relacionados de Azure.
Primero, cree un grupo de recursos denominado myResourceGroup en la ubicación eastus con el siguiente
comando New-AzResourceGroup:

New-AzResourceGroup -Name myResourceGroup -Location EastUS

Crear un contenedor
Ahora que tiene un grupo de recursos, puede ejecutar un contenedor en Azure. Para crear una instancia de
contenedor con Azure PowerShell, proporcione un nombre de grupo de recursos, un nombre de instancia de
contenedor y una imagen de contenedor de Docker al cmdlet New-AzContainerGroup. En este inicio rápido, usará
la imagen mcr.microsoft.com/windows/servercore/iis:nanoserver pública. Esta imagen empaqueta Microsoft Internet
Information Services (IIS) para ejecutarlo en Nano Server.
Puede exponer los contenedores en Internet mediante la especificación para que se abran uno o varios puertos, o la
especificación de una etiqueta de nombre DNS o ambas. En este artículo de inicio rápido, se implementa un
contenedor con una etiqueta de nombre DNS para que IIS sea públicamente accesible.
Ejecute un comando similar al siguiente para iniciar una instancia de contenedor. Establezca un valor
-DnsNameLabel que sea único dentro de la región de Azure en la que cree la instancia. Si recibe un mensaje de error
"DNS name label not available" (La etiqueta de nombre DNS no está disponible), pruebe otra etiqueta de nombre
DNS diferente.
New-AzContainerGroup -ResourceGroupName myResourceGroup -Name mycontainer -Image
mcr.microsoft.com/windows/servercore/iis:nanoserver -OsType Windows -DnsNameLabel aci-demo-win

Al cabo de unos segundos, debe recibir una respuesta de Azure. El estado ProvisioningState del contenedor es
inicialmente En creación , pero debería cambiar a Correcto en un minuto o dos. Compruebe el estado de la
implementación mediante el cmdlet Get-AzContainerGroup:

Get-AzContainerGroup -ResourceGroupName myResourceGroup -Name mycontainer

El estado de aprovisionamiento, el nombre de dominio completo (FQDN) y la dirección IP del contenedor aparecen
en la salida del cmdlet:

PS Azure:\> Get-AzContainerGroup -ResourceGroupName myResourceGroup -Name mycontainer

ResourceGroupName : myResourceGroup
Id : /subscriptions/<Subscription
ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroups/mycontainer
Name : mycontainer
Type : Microsoft.ContainerInstance/containerGroups
Location : eastus
Tags :
ProvisioningState : Creating
Containers : {mycontainer}
ImageRegistryCredentials :
RestartPolicy : Always
IpAddress : 52.226.19.87
DnsNameLabel : aci-demo-win
Fqdn : aci-demo-win.eastus.azurecontainer.io
Ports : {80}
OsType : Windows
Volumes :
State : Pending
Events : {}

Una vez que el estado ProvisioningState del contenedor es Correcto , vaya a su Fqdn en el explorador. Si ve una
página web parecida a la siguiente, enhorabuena. Ha implementado correctamente una aplicación que se ejecuta
en un contenedor de Docker en Azure.
Limpieza de recursos
Cuando haya terminado con el contenedor, elimínelo con el cmdlet Remove-AzContainerGroup:

Remove-AzContainerGroup -ResourceGroupName myResourceGroup -Name mycontainer

Pasos siguientes
En esta guía de inicio rápido, ha creado una instancia de contenedor de Azure a partir de una imagen en un
repositorio público de Docker Hub. Si quiere compilar una imagen de contenedor e implementarla desde un
registro de contenedor privado de Azure, vaya al tutorial de Azure Container Instances.
Tutorial de Azure Container Instances
Inicio rápido: Implementación de una instancia de
contenedor en Azure mediante una plantilla de
Resource Manager
23/07/2020 • 7 minutes to read • Edit Online

Use Azure Container Instances para ejecutar contenedores de Docker sin servidor en Azure con sencillez y
velocidad. Implemente una aplicación en una instancia de contenedor a petición cuando no necesite una plataforma
de orquestación de contenedores completa, como Azure Kubernetes Service. En este inicio rápido, se usa una
plantilla de Azure Resource Manager para implementar un contenedor de Docker aislado y hacer que su aplicación
web esté disponible con una dirección IP pública.
Una plantilla de Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define la
infraestructura y la configuración del proyecto. La plantilla usa sintaxis declarativa, lo que permite establecer lo que
pretende implementar sin tener que escribir la secuencia de comandos de programación para crearla.
Si su entorno cumple los requisitos previos y está familiarizado con el uso de plantillas de Resource Manager,
seleccione el botón Implementar en Azure . La plantilla se abrirá en Azure Portal.

Requisitos previos
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Revisión de la plantilla
La plantilla usada en este inicio rápido forma parte de las plantillas de inicio rápido de Azure.

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"metadata": {
"description": "Name for the container group"
},
"defaultValue": "acilinuxpublicipcontainergroup"
},
"image": {
"type": "string",
"metadata": {
"description": "Container image to deploy. Should be of the form repoName/imagename:tag for images
stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries
require additional registry credentials."
},
"defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld"
},
"port": {
"type": "string",
"metadata": {
"description": "Port to open on the container and the public IP address."
},
"defaultValue": "80"
},
"cpuCores": {
"type": "string",
"metadata": {
"description": "The number of CPU cores to allocate to the container."
},
"defaultValue": "1.0"
},
"memoryInGb": {
"type": "string",
"metadata": {
"description": "The amount of memory to allocate to the container in gigabytes."
},
"defaultValue": "1.5"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"restartPolicy": {
"type": "string",
"defaultValue": "always",
"metadata": {
"description": "The behavior of Azure runtime if container has stopped."
},
"allowedValues": [
"never",
"always",
"onfailure"
]
}
},
"variables": {},
"resources": [
{
"name": "[parameters('name')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[parameters('location')]",
"properties": {
"containers": [
{
"name": "[parameters('name')]",
"properties": {
"image": "[parameters('image')]",
"ports": [
{
"port": "[parameters('port')]"
}
],
"resources": {
"requests": {
"cpu": "[parameters('cpuCores')]",
"memoryInGb": "[parameters('memoryInGb')]"
}
}
}
}
],
"osType": "Linux",
"restartPolicy": "[parameters('restartPolicy')]",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "Tcp",
"port": "[parameters('port')]"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/',
parameters('name'))).ipAddress.ip]"
}
}
}

El siguiente recurso se define en la plantilla:


Microsoft.ContainerInstance/containerGroups : crea un grupo de contenedores de Azure. Esta plantilla
define un grupo que consta de una instancia de contenedor única.
Encontrará más ejemplos de plantillas de Azure Container Instances en la galería de plantillas de inicio rápido.

Implementación de la plantilla
1. Seleccione la imagen siguiente para iniciar sesión en Azure y abrir una plantilla. La plantilla crea un registro
y una réplica en otra ubicación.

2. Seleccione o escriba los siguientes valores.


Suscripción : seleccione una suscripción de Azure.
Grupo de recursos : seleccione Crear nuevo , escriba un nombre único para el grupo de recursos y,
después, seleccione Aceptar .
Ubicación : seleccione una ubicación para el grupo de recursos. Ejemplo: Centro de EE. UU. .
Nombre : acepte el nombre que se genera para la instancia o escriba otro nombre.
Imagen : acepte el nombre de imagen predeterminado. Esta imagen de Linux de ejemplo empaqueta una
pequeña aplicación web escrita en Node.js que sirve una página HTML estática.
Acepte los valores predeterminados en las restantes propiedades.
Revise los términos y condiciones. Si está de acuerdo con ellos, seleccione Acepto los términos y
condiciones indicados anteriormente .
3. Cuando la instancia se haya creado correctamente, recibirá una notificación:

Azure Portal se usa para implementar la plantilla. Además de Azure Portal, también puede usar Azure PowerShell, la
CLI de Azure y API REST. Para obtener información sobre otros métodos de implementación, consulte
Implementación de plantillas.

Revisión de los recursos implementados


Use Azure Portal o una herramienta como la CLI de Azure para examinar las propiedades de la instancia de
contenedor.
1. En Azure Portal, busque Container Instances y seleccione la instancia de contenedor que creó.
2. En la página de información general , observe el valor del campo Estado de la instancia y el de Dirección
IP .
3. Una vez que su estado sea En ejecución, vaya a la dirección IP en el explorador.

Visualización de registros de contenedores


Ver los registros de una instancia de contenedor resulta de utilidad al solucionar problemas con el contenedor o la
aplicación en la que se ejecuta.
Para ver los registros del contenedor, en Configuración , seleccione Contenedores > Registros . Debería ver la
solicitud GET HTTP que se genera cuando se ve la aplicación en el explorador.
Limpieza de recursos
Cuando haya terminado con el contenedor, en la página de información general de la instancia de contenedor,
seleccione Eliminar . Cuando se le solicite, confirme la eliminación.

Pasos siguientes
En este inicio rápido, ha creado una instancia de contenedor de Azure a partir de una imagen de Microsoft pública.
Si quiere compilar una imagen de contenedor e implementarla desde un registro de contenedor privado de Azure,
vaya al tutorial de Azure Container Instances.
Tutorial: Creación de una imagen de contenedor para su implementación en Azure Container Instances
Para obtener un tutorial paso a paso que le guíe en el proceso de creación de una plantilla, consulte:
Tutorial: Creación e implementación de su primera plantilla de Resource Manager
Tutorial: Creación de una imagen de contenedor
para su implementación en Azure Container
Instances
21/05/2020 • 6 minutes to read • Edit Online

Azure Container Instances permite la implementación de contenedores de Docker en una infraestructura de


Azure sin necesidad de aprovisionar ninguna máquina virtual o adoptar un servicio de nivel superior. En este
tutorial, se empaqueta una pequeña aplicación web de Node.js en una imagen del contenedor que se puede
ejecutar mediante Azure Container Instances.
En este artículo, la primera parte de la serie, podrá:
Clonar el código fuente de la aplicación desde GitHub
Crear una imagen de contenedor desde el origen de la aplicación
Probar la imagen en un entorno local de Docker
En las partes dos y tres del tutorial, se carga la imagen de Azure Container Registry y, después, se implementa en
Azure Container Instances.

Antes de empezar
Para completar este tutorial es preciso cumplir los siguientes requisitos:
CLI de Azure : debe tener la versión 2.0.29 de la CLI de Azure, cualquier versión posterior, instalada en el equipo
local. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, consulte Instalación de
la CLI de Azure.
Docker : en este tutorial se supone que el usuario tiene un conocimiento básico de los principales conceptos de
Docker, como los contenedores, las imágenes de contenedor y los comandos básicos de docker . Para conocer
los principios básicos de Docker y de los contenedores, consulte Introducción a Docker.
Docker : para completar este tutorial, es preciso que el motor de Docker esté instalado localmente. Docker
dispone de paquetes que configuran el entorno de Docker en macOS, Windows y Linux.

IMPORTANT
Dado que Azure Cloud Shell no incluye el demonio de Docker, para completar este tutorial es preciso instalar tanto la CLI
de Azure como el motor de Docker en el equipo local. Azure Cloud Shell no se puede instalar para este tutorial.

Obtención del código de la aplicación


La aplicación de ejemplo de este tutorial es una aplicación web sencilla compilada en Node.js. La aplicación sirve
una página HTML estática y es similar a la captura de pantalla siguiente:
Use Git para clonar el repositorio de la aplicación de ejemplo:

git clone https://github.com/Azure-Samples/aci-helloworld.git

También puede descargar el archivo ZIP directamente de GitHub.

Compilación de la imagen del contenedor


El archivo Dockerfile de la aplicación de ejemplo muestra cómo se compila el contenedor. Se comienza con una
imagen oficial de Node.js basada en Alpine Linux, una pequeña distribución muy apropiada para usarla con
contenedores. Luego copia los archivos de aplicación en el contenedor, instala las dependencias mediante Node
Package Manager y, por último, inicia la aplicación.

FROM node:8.9.3-alpine
RUN mkdir -p /usr/src/app
COPY ./app/ /usr/src/app/
WORKDIR /usr/src/app
RUN npm install
CMD node /usr/src/app/index.js

Use el comando docker build para crear la imagen del contenedor y etiquetarla como aci-tutorial-app:

docker build ./aci-helloworld -t aci-tutorial-app

La salida del comando docker build es similar a la siguiente (truncada para favorecer la legibilidad):
$ docker build ./aci-helloworld -t aci-tutorial-app
Sending build context to Docker daemon 119.3kB
Step 1/6 : FROM node:8.9.3-alpine
8.9.3-alpine: Pulling from library/node
88286f41530e: Pull complete
84f3a4bf8410: Pull complete
d0d9b2214720: Pull complete
Digest: sha256:c73277ccc763752b42bb2400d1aaecb4e3d32e3a9dbedd0e49885c71bea07354
Status: Downloaded newer image for node:8.9.3-alpine
---> 90f5ee24bee2
...
Step 6/6 : CMD node /usr/src/app/index.js
---> Running in f4a1ea099eec
---> 6edad76d09e9
Removing intermediate container f4a1ea099eec
Successfully built 6edad76d09e9
Successfully tagged aci-tutorial-app:latest

Use el comando docker images para ver la imagen compilada:

docker images

La imagen recién compilada debería aparecer en la lista:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aci-tutorial-app latest 5c745774dfa9 39 seconds ago 68.1 MB

Ejecute el contenedor localmente


Antes de implementar el contenedor en Azure Container Instances, use docker run para ejecutarlo localmente y
confirmar que funciona. El modificador -d permite que el contenedor se ejecute en segundo plano, mientras
que -p permite asignar un puerto arbitrario del equipo al puerto 80 del contenedor.

docker run -d -p 8080:80 aci-tutorial-app

La salida del comando docker run muestra el identificador del contenedor en ejecución si el comando se realizó
correctamente:

$ docker run -d -p 8080:80 aci-tutorial-app


a2e3e4435db58ab0c664ce521854c2e1a1bda88c9cf2fcff46aedf48df86cccf

Ahora, vaya a http://localhost:8080 en el explorador para confirmar que el contenedor está en ejecución.
Debería ver una página web similar a la siguiente:
Pasos siguientes
En este tutorial, ha creado una imagen de contenedor que se puede implementar en Azure Container Instances y
ha comprobado qu8e funciona localmente. Hasta ahora, esto es lo que ha hecho:
Se ha clonado el origen de la aplicación desde GitHub
Ha creado una imagen de contenedor a partir del origen de la aplicación
El contenedor se ha probado localmente
Pase al siguiente tutorial de la serie para aprender a almacenar imágenes de contenedor en Azure Container
Registry:
Inserción de imágenes en Azure Container Registry
Tutorial: Creación de una instancia de Azure
Container Registry e inserción de una imagen de
contenedor
21/05/2020 • 9 minutes to read • Edit Online

Esta es la segunda parte de un tutorial de tres partes. En la primera parte del tutorial se ha creado una imagen de
contenedor de Docker para una aplicación web de Node.js. En este tutorial, la imagen se inserta en Azure
Container Registry. Si no ha creado todavía la imagen de contenedor, vuelva a Tutorial 1: Creación de una imagen
de contenedor.
Azure Container Registry es su registro de Docker privado en Azure. En este tutorial, segunda parte de la serie, se
realizan las siguientes operaciones:
Creación de una instancia de Azure Container Registry con la CLI de Azure
Etiquetar una imagen de contenedor para Azure Container Registry
Cargar la imagen en el registro
En el artículo siguiente, el último tutorial de la serie, va a implementar el contenedor del registro privado en Azure
Container Instances.

Antes de empezar
Para completar este tutorial es preciso cumplir los siguientes requisitos:
CLI de Azure : debe tener la versión 2.0.29 de la CLI de Azure, cualquier versión posterior, instalada en el equipo
local. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, consulte Instalación de la
CLI de Azure.
Docker : en este tutorial se supone que el usuario tiene un conocimiento básico de los principales conceptos de
Docker, como los contenedores, las imágenes de contenedor y los comandos básicos de docker . Para conocer los
principios básicos de Docker y de los contenedores, consulte Introducción a Docker.
Docker : para completar este tutorial, es preciso que el motor de Docker esté instalado localmente. Docker dispone
de paquetes que configuran el entorno de Docker en macOS, Windows y Linux.

IMPORTANT
Dado que Azure Cloud Shell no incluye el demonio de Docker, para completar este tutorial es preciso instalar tanto la CLI de
Azure como el motor de Docker en el equipo local. Azure Cloud Shell no se puede instalar para este tutorial.

Creación de una instancia de Azure Container Registry


Antes de crear el registro de contenedor, necesita un grupo de recursos en donde implementarlo. Un grupo de
recursos es una colección lógica en la que se implementan y administran todos los recursos de Azure.
Para crear un grupo de recursos, use el comando az group create. En el siguiente ejemplo, se crea un grupo de
recursos denominado myResourceGroup en la región eastus:
az group create --name myResourceGroup --location eastus

Cuando se haya creado el grupo de recursos, cree un registro de contenedor de Azure con el comando az acr
create. El nombre del registro de contenedor debe ser único dentro de Azure y contener entre 5 y 50 caracteres
alfanuméricos. Reemplace <acrName> por un nombre único para el registro:

az acr create --resource-group myResourceGroup --name <acrName> --sku Basic

Esta es la salida de ejemplo de una nueva instancia de Azure Container Registry denominada
mycontainerregistry082 (aquí se muestra truncada):

...
{
"creationDate": "2018-03-16T21:54:47.297875+00:00",
"id": "/subscriptions/<Subscription
ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry082",
"location": "eastus",
"loginServer": "mycontainerregistry082.azurecr.io",
"name": "mycontainerregistry082",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}

En el resto del tutorial se hace referencia a <acrName> como marcador de posición del nombre del registro de
contenedor que eligió en este paso.

Inicio de sesión en el registro de contenedor


Debe iniciar sesión en la instancia de Azure Container Registry antes de insertar imágenes en ella. Use el comando
az acr login para completar la operación. Debe especificar el nombre único que eligió para el registro de
contenedor cuando lo creó.

az acr login --name <acrName>

Por ejemplo:

az acr login --name mycontainerregistry082

El comando devuelve Login Succeeded una vez completado:

Login Succeeded

Etiquetado de la imagen de contenedor


Para insertar una imagen de contenedor en un registro privado como Azure Container Registry, primero debe
etiquetar la imagen con el nombre completo del servidor de inicio de sesión del registro.
En primer lugar, obtenga el nombre del servidor de inicio de sesión completo de la instancia de Azure Container
Registry. Ejecute el siguiente comando az acr show y reemplace <acrName> por el nombre del registro que acaba
de crear:

az acr show --name <acrName> --query loginServer --output table

Por ejemplo, si el registro se denomina mycontainerregistry082:

az acr show --name mycontainerregistry082 --query loginServer --output table

Result
------------------------
mycontainerregistry082.azurecr.io

Ahora, muestre la lista de imágenes locales con el comando docker images:

docker images

Junto con cualquier otra imagen que tenga en su máquina, debería ver la imagen aci-tutorial-app que creó en el
tutorial anterior:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aci-tutorial-app latest 5c745774dfa9 39 minutes ago 68.1 MB

Etiquete la imagen aci-tutorial-app con el servidor de inicio de sesión del registro de contenedor. Además, agregue
la etiqueta :v1 al final del nombre de imagen para indicar el número de versión de la imagen. Reemplace
<acrLoginServer> por el resultado del comando az acr show que ha ejecutado antes.

docker tag aci-tutorial-app <acrLoginServer>/aci-tutorial-app:v1

Vuelva a ejecutar docker images para comprobar la operación de etiquetado:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aci-tutorial-app latest 5c745774dfa9 39 minutes ago 68.1 MB
mycontainerregistry082.azurecr.io/aci-tutorial-app v1 5c745774dfa9 7 minutes ago 68.1 MB

Inserción de imágenes en Azure Container Registry


Ahora que ha etiquetado la imagen aci-tutorial-app con el nombre del servidor de inicio de sesión completo del
registro privado, puede insertarla en el registro con el comando docker push. Reemplace <acrLoginServer> por el
nombre del servidor de inicio de sesión completo obtenido en el paso anterior.

docker push <acrLoginServer>/aci-tutorial-app:v1

La operación push debería tardar de unos segundos a unos minutos según la conexión a Internet, y el resultado
ser similar al siguiente:
$ docker push mycontainerregistry082.azurecr.io/aci-tutorial-app:v1
The push refers to a repository [mycontainerregistry082.azurecr.io/aci-tutorial-app]
3db9cac20d49: Pushed
13f653351004: Pushed
4cd158165f4d: Pushed
d8fbd47558a8: Pushed
44ab46125c35: Pushed
5bef08742407: Pushed
v1: digest: sha256:ed67fff971da47175856505585dcd92d1270c3b37543e8afd46014d328f05715 size: 1576

Lista de imágenes en Azure Container Registry


Para comprobar que la imagen que acaba de insertar está efectivamente en el registro de contenedor de Azure,
enumere las imágenes del registro con el comando az acr repository list. Reemplace <acrName> por el nombre de
Registro de contenedor.

az acr repository list --name <acrName> --output table

Por ejemplo:

az acr repository list --name mycontainerregistry082 --output table

Result
----------------
aci-tutorial-app

Para ver las etiquetas de una imagen concreta, use el comando az acr repository show-tags.

az acr repository show-tags --name <acrName> --repository aci-tutorial-app --output table

Debería ver un resultado similar al siguiente:

az acr repository show-tags --name mycontainerregistry082 --repository aci-tutorial-app --output table


Result
--------
v1

Pasos siguientes
En este tutorial, ha preparado una instancia de Azure Container Registry para usarla con Azure Container Instances
y ha insertado una imagen de contenedor en el registro. Se han completado los siguientes pasos:
Creación de una instancia de Azure Container Registry con la CLI de Azure
Etiquetado de una imagen de contenedor para Azure Container Registry
Carga de una imagen en Azure Container Registry
Vaya al tutorial siguiente para obtener información sobre cómo implementar el contenedor en Azure con Azure
Container Instances:
Implementación de un contenedor en Azure Container Instances
Tutorial: Implementación de una aplicación de
contenedor en Azure Container Instances
21/05/2020 • 7 minutes to read • Edit Online

Este es el último tutorial de una serie de tres partes. En las series anteriores, se creó una imagen de contenedor y se
insertó en una instancia de Azure Container Registry. En este artículo se completa la serie con la implementación
del contenedor en Azure Container Instances.
En este tutorial, hizo lo siguiente:
Implementar el contenedor de Azure Container Registry a Azure Container Instances
Visualizar la aplicación en ejecución en el explorador
Mostrar los registros del contenedor

Antes de empezar
Para completar este tutorial es preciso cumplir los siguientes requisitos:
CLI de Azure : debe tener la versión 2.0.29 de la CLI de Azure, cualquier versión posterior, instalada en el equipo
local. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, consulte Instalación de la
CLI de Azure.
Docker : en este tutorial se supone que el usuario tiene un conocimiento básico de los principales conceptos de
Docker, como los contenedores, las imágenes de contenedor y los comandos básicos de docker . Para conocer los
principios básicos de Docker y de los contenedores, consulte Introducción a Docker.
Docker : para completar este tutorial, es preciso que el motor de Docker esté instalado localmente. Docker dispone
de paquetes que configuran el entorno de Docker en macOS, Windows y Linux.

IMPORTANT
Dado que Azure Cloud Shell no incluye el demonio de Docker, para completar este tutorial es preciso instalar tanto la CLI de
Azure como el motor de Docker en el equipo local. Azure Cloud Shell no se puede instalar para este tutorial.

Implementación del contenedor mediante la CLI de Azure


En esta sección, se utiliza la CLI de Azure para implementar la imagen integrada en el primer tutorial e insertarla en
Azure Container Registry del segundo tutorial. Asegúrese de haber completado estos tutoriales antes de continuar.
Obtención de las credenciales del registro
Al implementar una imagen que se hospeda en una instancia privada de Azure Container Registry como la que se
creó en el segundo tutorial, debe proporcionar las credenciales de acceso al registro.
En muchos escenarios, uno de los procedimientos recomendados es crear y configurar una entidad de servicio de
Azure Active Directory con permisos de extracción en el registro. Consulte Autenticación con Azure Container
Registry desde Azure Container Instances para obtener scripts de ejemplo con el fin de crear una entidad de
servicio con los permisos necesarios. Anote el identificador y la contraseña de la entidad de servicio. Usará estas
credenciales para acceder al registro al implementar el contenedor.
También necesita el nombre completo del servidor de inicio de sesión del registro de contenedor (reemplace
<acrName> por el nombre del registro):

az acr show --name <acrName> --query loginServer

Implementación de un contenedor
Ahora, utilice el comando az container create para implementar el contenedor. Reemplace <acrLoginServer> por el
valor obtenido con el comando anterior. Reemplace <service-principal-ID> y <service-principal-password> por el
identificador de la entidad de servicio y la contraseña que creó para acceder al registro. Reemplace <aciDnsLabel>
por el nombre de DNS que desee.

az container create --resource-group myResourceGroup --name aci-tutorial-app --image <acrLoginServer>/aci-


tutorial-app:v1 --cpu 1 --memory 1 --registry-login-server <acrLoginServer> --registry-username <service-
principal-ID> --registry-password <service-principal-password> --dns-name-label <aciDnsLabel> --ports 80

Al cabo de unos segundos, debe recibir una respuesta inicial de Azure. El valor --dns-name-label debe ser único
dentro de la región de Azure en la que crea la instancia de contenedor. Modifique el valor del comando anterior si
recibe un mensaje de error de etiqueta de nombre DNS al ejecutar el comando.
Comprobación del progreso de la implementación
Para ver el estado de la implementación, use az container show:

az container show --resource-group myResourceGroup --name aci-tutorial-app --query instanceView.state

Repita el comando az container show hasta que el estado cambie de Pendiente a En ejecución, lo que debe tardar
menos de un minuto. Cuando el contenedor esté en En ejecución, continúe con el paso siguiente.

Visualización de los registros de contenedor y aplicación


Cuando se complete correctamente la implementación, utilice el comando az container show para mostrar el
nombre de dominio completo (FQDN) del contenedor con el comando:

az container show --resource-group myResourceGroup --name aci-tutorial-app --query ipAddress.fqdn

Por ejemplo:

"aci-demo.eastus.azurecontainer.io"

Para ver la aplicación en ejecución, vaya al nombre DNS que aparece en su explorador favorito:
También puede ver la salida de registro del contenedor:

az container logs --resource-group myResourceGroup --name aci-tutorial-app

Salida de ejemplo:

listening on port 80
::ffff:10.240.0.4 - - [21/Jul/2017:06:00:02 +0000] "GET / HTTP/1.1" 200 1663 "-" "Mozilla/5.0 (Macintosh;
Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
::ffff:10.240.0.4 - - [21/Jul/2017:06:00:02 +0000] "GET /favicon.ico HTTP/1.1" 404 150 "http://aci-
demo.eastus.azurecontainer.io/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/59.0.3071.115 Safari/537.36"

Limpieza de recursos
Si ya no necesita ninguno de los recursos creados en esta serie de tutoriales, puede ejecutar el comando az group
delete para quitar el grupo de recursos y todos los recursos que contiene. Este comando elimina el registro de
contenedor que se ha creado, así como el contenedor en ejecución y todos los recursos relacionados.

az group delete --name myResourceGroup

Pasos siguientes
En este tutorial se completó el proceso de implementar los contenedores en Azure Container Instances. Se han
completado los siguientes pasos:
Implementación del contenedor desde Azure Container Registry mediante la CLI de Azure
Visualización de la aplicación en el explorador
Visualización de los registros del contenedor
Ahora que ya tiene los conceptos básicos, va a aprender más acerca de Azure Container Instances, como por
ejemplo, cómo funcionan los grupos de contenedores:
Grupos de contenedores en Azure Container Instances
Tutorial: Implementación de un grupo de varios
contenedores con un archivo YAML
23/07/2020 • 8 minutes to read • Edit Online

Azure Container Instances admite la implementación de varios contenedores en un solo host mediante un
grupo de contenedores. Un grupo de contenedores es útil cuando se crea un sidecar de aplicación para el
registro, la supervisión o cualquier otra configuración donde un servicio necesite un segundo proceso asociado.
En este tutorial seguirá los pasos para ejecutar una configuración de sidecar sencilla de dos contenedores
mediante la implementación de un archivo YAML con la CLI de Azure. Un archivo YAML proporciona un formato
conciso para especificar la configuración de instancias. Aprenderá a:
Configurar un archivo YAML
Implementación del grupo de contenedores
Ver los registros de los contenedores

NOTE
Los grupos de varios contenedores están restringidos actualmente a los contenedores Linux.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el
explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar
los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada
en su entorno local.
Para iniciar Azure Cloud Shell:

O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se
copia automáticamente el código en Cloud Shell.

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.

Configurar un archivo YAML


Para implementar un grupo de varios contenedores con el comando az container create en la CLI de Azure, debe
especificar la configuración del grupo de contenedores en un archivo YAML. A continuación, pase el archivo
YAML como parámetro al comando.
Para empezar, copie el siguiente archivo YAML en un nuevo archivo denominado deploy-aci.yaml . En
Azure Cloud Shell, puede usar Visual Studio Code para crear el archivo en el directorio de trabajo:

code deploy-aci.yaml

En este archivo YAML, se define un grupo de contenedores denominado "myContainerGroup" con dos
contenedores, una dirección IP pública y dos puertos expuestos. Los contenedores se implementan desde
imágenes públicas de Microsoft. El primer contenedor del grupo ejecuta una aplicación web accesible desde
Internet. El segundo contenedor, el sidecar, realiza solicitudes HTTP periódicamente a la aplicación web que se
ejecuta en el primer contenedor a través de la red local del grupo de contenedores.

apiVersion: 2019-12-01
location: eastus
name: myContainerGroup
properties:
containers:
- name: aci-tutorial-app
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld:latest
resources:
requests:
cpu: 1
memoryInGb: 1.5
ports:
- port: 80
- port: 8080
- name: aci-tutorial-sidecar
properties:
image: mcr.microsoft.com/azuredocs/aci-tutorial-sidecar
resources:
requests:
cpu: 1
memoryInGb: 1.5
osType: Linux
ipAddress:
type: Public
ports:
- protocol: tcp
port: 80
- protocol: tcp
port: 8080
tags: null
type: Microsoft.ContainerInstance/containerGroups

Para usar un registro de imágenes de contenedor privado, agregue la propiedad imageRegistryCredentials al


grupo de contenedores, con los valores modificados para su entorno:
imageRegistryCredentials:
- server: imageRegistryLoginServer
username: imageRegistryUsername
password: imageRegistryPassword

Implementación del grupo de contenedores


Cree un grupo de recursos con el comando az group create:

az group create --name myResourceGroup --location eastus

Implemente el grupo de contenedores con el comando az container create y pase el archivo YAML como un
argumento:

az container create --resource-group myResourceGroup --file deploy-aci.yaml

Al cabo de unos segundos, debe recibir una respuesta inicial de Azure.

Visualización del estado de la implementación


Para ver el estado de la implementación, use el siguiente comando az container show:

az container show --resource-group myResourceGroup --name myContainerGroup --output table

Si desea ver la aplicación en ejecución, vaya a su dirección IP en el explorador. Por ejemplo, la dirección IP es
52.168.26.124 en esta salida de ejemplo:

Name ResourceGroup Status Image


IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- --------------------------------------------------------------
------------------------------------ -------------------- --------- --------------- -------- ---------
-
myContainerGroup danlep0318r Running mcr.microsoft.com/azuredocs/aci-tutorial-
sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest 20.42.26.114:80,8080 Public 1.0 core/1.5 gb
Linux eastus

Visualización de registros de contenedores


Visualice la salida del registro de un contenedor con el comando az container logs. El argumento
--container-name especifica el contenedor del que se van a extraer registros. En este ejemplo, se especifica el
contenedor aci-tutorial-app .

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-


app

Salida:

listening on port 80
::1 - - [02/Jul/2020:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
Para ver los registros para el contenedor sidecar, ejecute un comando similar en el que se especifique el
contenedor aci-tutorial-sidecar .

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-


sidecar

Salida:

Every 3s: curl -I http://localhost 2020-07-02 20:36:41

% Total % Received % Xferd Average Speed Time Time Time Current


Dload Upload Total Spent Left Speed
0 1663 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT
ETag: W/"67f-16006818640"
Content-Type: text/html; charset=UTF-8
Content-Length: 1663
Date: Thu, 02 Jul 2020 20:36:41 GMT
Connection: keep-alive

Como puede ver, el sidecar realiza periódicamente una solicitud HTTP a la aplicación web principal a través de la
red local del grupo para asegurarse de que se está ejecutando. Este ejemplo de sidecar se podría ampliar para
desencadenar una alerta si recibe un código de respuesta HTTP distinto de 200 OK .

Pasos siguientes
En este tutorial, ha usado un archivo YAML para implementar un grupo de varios contenedores en Azure
Container Instances. Ha aprendido a:
Configurar un archivo YAML para un grupo de varios contenedores
Implementación del grupo de contenedores
Ver los registros de los contenedores
También puede especificar un grupo de varios contenedores con una plantilla de Resource Manager. Una
plantilla de Resource Manager se puede adaptar fácilmente a escenarios donde necesite implementar recursos
de servicio de Azure adicionales con el grupo de contenedores.
Tutorial: Implementación de un grupo con varios
contenedores con una plantilla de Resource
Manager
23/07/2020 • 9 minutes to read • Edit Online

Azure Container Instances admite la implementación de varios contenedores en un solo host mediante un
grupo de contenedores. Un grupo de contenedores es útil cuando se crea un sidecar de aplicación para el
registro, la supervisión o cualquier otra configuración donde un servicio necesite un segundo proceso asociado.
En este tutorial, seguirá los pasos para ejecutar una configuración de sidecar de dos contenedores sencilla
mediante la implementación de una plantilla de Azure Resource Manager con la CLI de Azure. Aprenderá a:
Configurar una plantilla de grupo de varios contenedores
Implementación del grupo de contenedores
Ver los registros de los contenedores
Una plantilla de Resource Manager se puede adaptar rápidamente para escenarios en los que es necesario
implementar recursos de un servicio de Azure adicionales (por ejemplo, un recurso compartido de Azure Files o
una red virtual) con el grupo de contenedores.

NOTE
Los grupos de varios contenedores están restringidos actualmente a los contenedores Linux.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el
explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar
los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada
en su entorno local.
Para iniciar Azure Cloud Shell:

O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se
copia automáticamente el código en Cloud Shell.

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.

Configuración de una plantilla


Para empezar, copie el siguiente código JSON en un nuevo archivo denominado azuredeploy.json . En
Azure Cloud Shell, puede usar Visual Studio Code para crear el archivo en el directorio de trabajo:

code azuredeploy.json

Esta plantilla de Resource Manager define un grupo de contenedores con dos contenedores, una dirección IP
pública y dos puertos expuestos. El primer contenedor del grupo ejecuta una aplicación web accesible desde
Internet. El segundo contenedor, el sidecar, realiza una solicitud HTTP a la aplicación web principal a través de la
red local del grupo.

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": 80
},
{
"protocol": "tcp",
"port": 8080
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/',
parameters('containerGroupName'))).ipAddress.ip]"
}
}
}

Para usar un registro de imagen de contenedor privado, agregue un objeto al documento JSON con el formato
siguiente. Para ver una implementación de ejemplo de esta configuración, consulte el documento Referencia de
plantilla de Resource Manager de ACI.

"imageRegistryCredentials": [
{
"server": "[parameters('imageRegistryLoginServer')]",
"username": "[parameters('imageRegistryUsername')]",
"password": "[parameters('imageRegistryPassword')]"
}
]

Implementación de la plantilla
Para crear un grupo de recursos, use el comando az group create.

az group create --name myResourceGroup --location eastus

Implemente la plantilla con el comando az deployment group create.


az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json

Al cabo de unos segundos, debe recibir una respuesta inicial de Azure.

Visualización del estado de la implementación


Para ver el estado de la implementación, use el siguiente comando az container show:

az container show --resource-group myResourceGroup --name myContainerGroup --output table

Si desea ver la aplicación en ejecución, vaya a su dirección IP en el explorador. Por ejemplo, la dirección IP es
52.168.26.124 en esta salida de ejemplo:

Name ResourceGroup Status Image


IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- --------------------------------------------------------------
------------------------------------ -------------------- --------- --------------- -------- ---------
-
myContainerGroup danlep0318r Running mcr.microsoft.com/azuredocs/aci-tutorial-
sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest 20.42.26.114:80,8080 Public 1.0 core/1.5 gb
Linux eastus

Visualización de registros de contenedores


Visualice la salida del registro de un contenedor con el comando az container logs. El argumento
--container-name especifica el contenedor del que se van a extraer registros. En este ejemplo, se especifica el
contenedor aci-tutorial-app .

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-


app

Salida:

listening on port 80
::1 - - [02/Jul/2020:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"

Para ver los registros para el contenedor sidecar, ejecute un comando similar en el que se especifique el
contenedor aci-tutorial-sidecar .

az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-


sidecar

Salida:
Every 3s: curl -I http://localhost 2020-07-02 20:36:41

% Total % Received % Xferd Average Speed Time Time Time Current


Dload Upload Total Spent Left Speed
0 1663 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT
ETag: W/"67f-16006818640"
Content-Type: text/html; charset=UTF-8
Content-Length: 1663
Date: Thu, 02 Jul 2020 20:36:41 GMT
Connection: keep-alive

Como puede ver, el sidecar realiza periódicamente una solicitud HTTP a la aplicación web principal a través de la
red local del grupo para asegurarse de que se está ejecutando. Este ejemplo de sidecar se podría ampliar para
desencadenar una alerta si recibe un código de respuesta HTTP distinto de 200 OK .

Pasos siguientes
En este tutorial, ha usado una plantilla de Azure Resource Manager para implementar un grupo de varios
contenedores en Azure Container Instances. Ha aprendido a:
Configurar una plantilla de grupo de varios contenedores
Implementación del grupo de contenedores
Ver los registros de los contenedores
Para obtener ejemplos de plantilla adicionales, vea Plantillas de Azure Resource Manager para Azure Container
Instances.
También puede especificar un grupo de varios contenedores mediante un archivo YAML. Dada la naturaleza
más concisa del formato YAML, la implementación con un archivo YAML es una buena opción cuando la
implementación solo incluye instancias de contenedor.
Tutorial: Uso de una función de Azure
desencadenada por HTTP para crear un grupo de
contenedores
23/07/2020 • 12 minutes to read • Edit Online

Azure Functions es un servicio de proceso sin servidor que puede ejecutar scripts o código como respuesta a
diversos eventos, como una solicitud HTTP, un temporizador o un mensaje en una cola de Azure Storage.
En este tutorial se crea una función de Azure que toma una solicitud HTTP y desencadena la implementación de un
grupo de contenedores. En este ejemplo se muestran los fundamentos del uso de Azure Functions para crear
automáticamente recursos en Azure Container Instances. Modifique o extienda el ejemplo a escenarios más
complejos o a otros desencadenadores de eventos.
Aprenderá a:
Usar Visual Studio Code con la extensión de Azure Functions para crear una función básica de PowerShell
desencadenada por HTTP.
Habilitar una identidad en la aplicación de funciones y a darle permisos para crear recursos de Azure.
Modificar y volver a publicar la función de PowerShell para automatizar la implementación de un grupo de
contenedores con un solo contenedor.
Comprobar la implementación desencadenada por HTTP del contenedor.

Requisitos previos
Para saber cuáles son los requisitos previos para instalar y usar Visual Studio Code con la extensión de Azure
Functions en su sistema operativo, consulte Creación de su primera función en Azure con Visual Studio Code.
En los pasos adicionales de este artículo se usa Azure PowerShell. Si necesita instalar o actualizar, consulte
Instalación de Azure PowerShell e Inicio de sesión en Azure.

Creación de una función básica de PowerShell


Siga los pasos de Creación de la primera función de PowerShell en Azure para crear una función de PowerShell
mediante la plantilla Desencadenador de HTTP. Use el nombre predeterminado de la función de Azure,
HttpTrigger . Como se muestra en el inicio rápido, pruebe la función localmente y publique el proyecto en una
aplicación de funciones en Azure. Este ejemplo es una función básica desencadenada por HTTP que devuelve una
cadena de texto. En pasos posteriores de este artículo, se modificará la función para crear un grupo de
contenedores.
En este artículo se supone que publica el proyecto con el nombre myfunctionapp en un grupo de recursos de Azure
al que se asigna nombre automáticamente según el nombre de la aplicación de funciones (también
myfunctionapp). Más adelante tendrá que sustituir tanto el nombre único de la aplicación de funciones como el
nombre del grupo de recursos.

Habilitación de una identidad administrada por Azure en la aplicación


de funciones
Los comandos siguientes habilitan una identidad administrada asignada por el sistema en la aplicación de
funciones. El host de PowerShell que ejecuta la aplicación se puede autenticar automáticamente en Azure mediante
esta identidad, lo que permite que las funciones realicen acciones en los servicios de Azure a los que se ha
concedido acceso a la identidad. En este tutorial, concederá permisos de identidad administrada para crear recursos
en el grupo de recursos de la aplicación de funciones.
Agregue una identidad a la aplicación de funciones:

Update-AzFunctionApp -Name myfunctionapp `


-ResourceGroupName myfunctionapp `
-IdentityType SystemAssigned

Asigne a la identidad el rol de colaborador en el ámbito del grupo de recursos:

$SP=(Get-AzADServicePrincipal -DisplayName myfunctionapp).Id


$RG=(Get-AzResourceGroup -Name myfunctionapp).ResourceId
New-AzRoleAssignment -ObjectId $SP -RoleDefinitionName "Contributor" -Scope $RG

Modificación de la función HttpTrigger


Modifique el código de PowerShell de la función HttpTrigger para crear un grupo de contenedores. En el archivo
run.ps1 de la función, busque el siguiente bloque de código. Este código muestra el valor de un nombre, si se ha
usado alguno como cadena de consulta en la dirección URL de la función:

[...]
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
[...]

Reemplace este código por el siguiente bloque de ejemplo. Aquí, si se pasa el valor de un nombre en la cadena de
consulta, se usa para asignar un nombre y crear un grupo de contenedores mediante el cmdlet New-
AzContainerGroup. Asegúrese de reemplazar el nombre del grupo de recursos myfunctionapp por el nombre del
grupo de recursos de la aplicación de funciones:

[...]
if ($name) {
New-AzContainerGroup -ResourceGroupName myfunctionapp -Name $name `
-Image alpine -OsType Linux `
-Command "echo 'Hello from an Azure container instance triggered by an Azure function'" `
-RestartPolicy Never
if ($?) {
$body = "This HTTP triggered function executed successfully. Started container group $name"
}
else {
$body = "There was a problem starting the container group."
}
[...]

En este ejemplo se crea un grupo de contenedores que consta de una única instancia de contenedor que ejecuta la
imagen alpine . El contenedor ejecuta un único comando echo y, después, finaliza. En un ejemplo real, podría
desencadenar la creación de uno o varios grupos de contenedores para ejecutar un trabajo por lotes.

Prueba de una aplicación de funciones en un entorno local


Asegúrese de que la función se ejecuta en el entorno local antes de volver a publicar el proyecto de la aplicación de
funciones en Azure. Cuando se ejecuta localmente, la función no crea recursos de Azure. Sin embargo, puede
probar el flujo de la función con y sin pasar un valor de nombre en una cadena de consulta. Para depurar la función,
consulte Depuración local de Azure Functions de PowerShell.

Republicación de una aplicación de funciones de Azure


Una vez que haya comprobado que la función se ejecuta localmente, vuelva a publicar el proyecto en la aplicación
de funciones existente en Azure.
1. En Visual Studio Code, abra la paleta de comandos. Busque y seleccione
Azure Functions: Deploy to Function App... .
2. Seleccione la carpeta de trabajo actual para comprimirla y realizar la implementación.
3. Seleccione la suscripción y, después, el nombre de la aplicación de funciones existente (myfunctionapp).
Confirme que desea sobrescribir la implementación anterior.
Una vez que se haya creado la aplicación de función se mostrará una notificación y se aplicará el paquete de
implementación. Seleccione View Output (Ver salida) en esta notificación para ver la creación y los resultados de
la implementación, incluidos los recursos de Azure que ha actualizado.

Ejecución de la función en Azure


Una vez que la implementación se complete correctamente, obtenga la dirección URL de la función. Por ejemplo,
use el área Azure: Functions de Visual Studio Code para copiar la dirección URL de la función HttpTrigger u
obtenga la dirección URL de la función en Azure Portal.
La dirección URL de la función tiene el formato:

https://myfunctionapp.azurewebsites.net/api/HttpTrigger

Ejecución de la función sin pasar ningún nombre


Como primera prueba, ejecute el comando curl y pase la dirección URL de la función sin anexar una cadena de
consulta name .

curl --verbose "https://myfunctionapp.azurewebsites.net/api/HttpTrigger"

La función devuelve el código de estado 200 y el texto


This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a
personalized response
:

[...]
> GET /api/HttpTrigger? HTTP/1.1
> Host: myfunctionapp.azurewebsites.net
> User-Agent: curl/7.64.1
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/1.1 200 OK
< Content-Length: 135
< Content-Type: text/plain; charset=utf-8
< Request-Context: appId=cid-v1:d0bd0123-f713-4579-8990-bb368a229c38
< Date: Wed, 10 Jun 2020 17:50:27 GMT
<
* Connection #0 to host myfunctionapp.azurewebsites.net left intact
This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for
a personalized response.* Closing connection 0
Ejecución de la función y uso del nombre de un grupo de contenedores
Ahora, ejecute el comando curl y anexe el nombre de un grupo de contenedores (mycontainergroup) como una
cadena de consulta ?name=mycontainergroup :

curl --verbose "https://myfunctionapp.azurewebsites.net/api/HttpTrigger?name=mycontainergroup"

La función devuelve el código de estado 200 y desencadena la creación del grupo de contenedores:

[...]
> GET /api/HttpTrigger1?name=mycontainergroup HTTP/1.1
> Host: myfunctionapp.azurewebsites.net
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 92
< Content-Type: text/plain; charset=utf-8
< Request-Context: appId=cid-v1:d0bd0123-f713-4579-8990-bb368a229c38
< Date: Wed, 10 Jun 2020 17:54:31 GMT
<
* Connection #0 to host myfunctionapp.azurewebsites.net left intact
This HTTP triggered function executed successfully. Started container group mycontainergroup* Closing
connection 0

Compruebe que el contenedor se ha ejecutado con el comando Get-AzContainerInstanceLog:

Get-AzContainerInstanceLog -ResourceGroupName myfunctionapp `


-ContainerGroupName mycontainergroup

Salida del ejemplo:

Hello from an Azure container instance triggered by an Azure function

Limpieza de recursos
Si ya no necesita ninguno de los recursos creados en este tutorial, puede ejecutar el comando [az group delete][az-
group-delete] para eliminar el grupo de recursos y todos los recursos que contiene. Este comando elimina la
aplicación de funciones que se ha creado, así como el contenedor en ejecución y todos los recursos relacionados.

az group delete --name myfunctionapp

Pasos siguientes
En este tutorial, ha creado una función de Azure que toma una solicitud HTTP y desencadena la implementación de
un grupo de contenedores. Ha aprendido a:
Usar Visual Studio Code con la extensión de Azure Functions para crear una función básica de PowerShell
desencadenada por HTTP.
Habilitar una identidad en la aplicación de funciones y a darle permisos para crear recursos de Azure.
Modificar el código de la función de PowerShell para automatizar la implementación de un grupo de
contenedores con un solo contenedor.
Comprobar la implementación desencadenada por HTTP del contenedor.
Para obtener un ejemplo detallado de cómo iniciar y supervisar un trabajo con contenedores, consulte la entrada
de blog sobre los contenedores sin servidor basados en eventos con PowerShell Azure Functions y Azure Container
Instances y el código de ejemplo que lo acompaña.
Consulte la documentación de Azure Functions para obtener instrucciones detalladas sobre la creación de
funciones de Azure y la publicación de un proyecto de Functions.
Plantillas de Azure Resource Manager para Azure
Container Instances
23/07/2020 • 2 minutes to read • Edit Online

Las siguientes plantillas de ejemplo implementan instancias de contenedor en diversas configuraciones.


Para opciones de implementación, consulte la sección Implementación. Si desea crear sus propias plantillas, la
Referencia de plantillas de Resource Managerde Azure Container Instances detalla el formato de la plantilla y las
propiedades disponibles.

Plantillas de ejemplo
P L A N T IL L A DESC RIP C IÓ N

Aplicaciones

WordPress Crea un sitio web de WordPress y su base de datos MySQL en


un grupo de contenedores. El contenido del sitio de
WordPress y la base de datos MySQL se conservan en un
recurso compartido de Azure Files. También crea una instancia
de puerta de enlace para exponer el acceso a la red pública de
WordPress.

MS NAV con IIS y SQL Server Implementa un único contenedor de Windows con un
entorno de Dynamics NAV y Dynamics 365 Business Central
con las características completas.

Volúmenes

emptyDir Implementa dos contenedores de Linux que comparten un


volumen de emptyDir.

gitRepo Implementa un contenedor de Linux que clona un repositorio


de GitHub y lo monta como un volumen.

secret Implementa un contenedor de Linux con un certificado PFX


montado como un volumen secreto.

Redes

Contenedor con UDP expuesto Implementa un contenedor de Windows o Linux que expone
un puerto UDP.

Contenedor de Linux con dirección IP pública Implementa un único contenedor de Linux accesible a través
de una dirección IP pública.

Implementación de un grupo de contenedores con una red Implementa una red virtual, subred, perfil de red y grupo de
virtual contenedores nuevos.

Recursos de Azure
P L A N T IL L A DESC RIP C IÓ N

Creación de cuenta de Azure Storage y recurso compartido de Usa la CLI de Azure en una instancia del contenedor para
archivos crear una cuenta de almacenamiento y un recurso compartido
de Azure Files.

Implementación
Tiene varias opciones para implementar recursos con plantillas de Resource Manager:
CLI de Azure
Azure PowerShell
Azure Portal
REST API
Grupos de contenedores en Azure Container
Instances
23/07/2020 • 10 minutes to read • Edit Online

El recurso de nivel superior de Azure Container Instances es el grupo de contenedores. Este artículo describe
qué son los grupos de contenedores y qué tipos de escenarios permiten.

¿Qué es un grupo de contenedores?


Un grupo de contenedores es una colección de contenedores que se programan en la misma máquina host.
Los contenedores de un grupo comparten un ciclo de vida, los recursos, la red local y los volúmenes de
almacenamiento. Es similar al concepto de pod en Kubernetes.
El siguiente diagrama muestra un ejemplo de un grupo de contenedores que incluye varios contenedores:

Este grupo de contenedores de ejemplo:


Se programó en una única máquina host.
Se le asigna una etiqueta de nombre DNS.
Expone una única dirección IP pública, con un puerto expuesto.
Consta de dos contenedores. Un contenedor escucha en el puerto 80, mientras el otro escucha en el
puerto 5000.
Incluye dos recursos compartidos de archivos de Azure como montajes de volumen y cada contenedor
monta uno de los recursos compartidos de forma local.

NOTE
Los grupos de varios contenedores solo admiten actualmente contenedores Linux. Para los contenedores Windows,
Azure Container Instances solo admite la implementación de una única instancia de contenedor. Aunque estamos
trabajando para traer todas las características a los contenedores Windows, puede encontrar las diferencias actuales de
la plataforma en Información general.

Implementación
Estas son dos formas habituales de implementar un grupo de varios contenedores: use una plantilla de
Resource Manager o un archivo YAML. Se recomienda usar una plantilla de Resource Manager cuando se
necesite implementar recursos adicionales de un servicio de Azure (por ejemplo, un recurso compartido de
Azure Files) al implementar instancias de contenedor. Dada la naturaleza más concisa del formato YAML, se
recomienda usar un archivo YAML cuando la implementación incluya solo instancias de contenedor. Para más
información sobre las propiedades que se pueden establecer, consulte la documentación de referencia de la
plantilla de Resource Manager o de referencia de YAML.
Para conservar la configuración de un grupo de contenedores, puede exportar la configuración a un archivo
YAML mediante el comando de la CLI de Azure az container export. La exportación permite almacenar las
configuraciones de grupos de contenedores en el control de versiones para la "configuración como código".
O bien, use el archivo exportado como punto de partida al desarrollar una nueva configuración en YAML.

Asignación de recursos
Azure Container Instances asigna recursos como CPU, memoria y, opcionalmente, GPU (versión preliminar) a
un grupo de varios contenedores mediante la adición de las solicitudes de recursos de las instancias del
grupo. Por ejemplo, cuando se toman recursos de CPU y se crea un grupo de contenedores con dos instancias
de contenedor, y cada una de ellas solicita 1 CPU, se asignan 2 CPU al grupo de contenedores.
Uso de recursos por instancias de contenedor
A cada instancia de contenedor de un grupo se le asignan los recursos especificados en su solicitud de
recursos. Pero el número máximo de recursos que usa una instancia de contenedor de un grupo puede ser
diferente si configura su propiedad de límite de recursos opcional. El límite de recursos de una instancia de
contenedor debe ser mayor o igual que la propiedad de solicitud de recurso obligatoria.
Si no especifica un límite de recursos, el uso máximo de recursos de la instancia de contenedor es el
mismo que el de su solicitud de recursos.
Si especifica un límite para una instancia de contenedor, el uso máximo de la instancia puede ser
mayor que la solicitud, hasta el límite que establezca. Por tanto, el uso de recursos por parte de otras
instancias de contenedor del grupo podría disminuir. El límite máximo de recursos que puede
establecer para una instancia de contenedor es el total de recursos asignados al grupo.
Por ejemplo, en un grupo con dos instancias de contenedor que solicitan 1 CPU cada una, uno de los
contenedores podría ejecutar una carga de trabajo que requiera mayor número de CPU en ejecución que el
otro.
En este escenario, podría establecer un límite de recursos de hasta dos CPU para la instancia de contenedor.
Esta configuración permite que la instancia de contenedor use hasta dos CPU, si estuvieran disponibles.
NOTE
La infraestructura subyacente del servicio usa una pequeña cantidad de los recursos de un grupo de contenedores. Los
contenedores pueden acceder a la mayoría de los recursos asignados al grupo, pero no a todos. Por este motivo, debe
planear un pequeño búfer de recursos al solicitar los recursos para los contenedores del grupo.

Asignación mínima y máxima


Asigne un mínimo de 1 CPU y 1 GB de memoria a un grupo de contenedores. Las instancias de
contenedores individuales dentro de un grupo pueden aprovisionarse con menos de 1 CPU y 1 GB de
memoria.
Para los recursos máximos de un grupo de contenedores, consulte la disponibilidad de recursos para
Azure Container Instances en la región de implementación.

Redes
Los grupos de contenedores pueden compartir una dirección IP externa, uno o más puertos de esa dirección
IP y una etiqueta DNS con un nombre de dominio completo (FQDN). Para permitir que los clientes externos
lleguen a un contenedor dentro del grupo, debe exponer el puerto en la dirección IP y desde el contenedor.
Cuando se elimina el grupo de contenedores, se libera su dirección IP y FQDN.
Las instancias de contenedor dentro de un grupo de contenedores se pueden comunicar entre sí mediante
localhost en cualquier puerto, incluso si estos puertos no se exponen externamente en la dirección IP del
grupo o desde el contenedor.
Opcionalmente, implemente grupos de contenedores en una red virtual de Azure para permitir que los
contenedores se comuniquen de forma segura con otros recursos de la red virtual.

Storage
Puede especificar volúmenes externos para montar dentro de un grupo de contenedores. Los volúmenes
admitidos incluyen:
Recurso compartido de archivos de Azure
Secreto
Directorio vacío
Repositorio de Git clonado
Puede asignar los volúmenes en rutas de acceso específicas dentro de los contenedores individuales en un
grupo.

Escenarios frecuentes
Los grupos de varios contenedores son útiles en casos donde quiera dividir una única tarea funcional en un
número pequeño de imágenes de contenedor. Luego, estas imágenes las pueden entregar diferentes equipos
y pueden tener diversos requisitos de recursos.
Ejemplos posibles de uso serían:
Un contenedor para servir una aplicación web y un contenedor para extraer el contenido más reciente
desde el control de código fuente.
Un contenedor de aplicación y un contenedor de registro. El contenedor de registro recopila la salida de
registros y métricas de la aplicación principal y los escribe en un almacenamiento a largo plazo.
Un contenedor de aplicación y un contenedor de supervisión. Periódicamente, el contenedor de
supervisión realiza una solicitud a la aplicación para asegurarse de que se está ejecutando y responde
correctamente, y genera una alerta si no es así.
Un contenedor de front-end y un contenedor de back-end. El front-end puede servir una aplicación web y
el back-end ejecutar un servicio para recuperar datos.

Pasos siguientes
Obtenga información acerca de cómo implementar un grupo de múltiples contenedores con una plantilla de
Azure Resource Manager:
Implementación de un grupo de contenedores
Cuotas y límites de Azure Container Instances
23/07/2020 • 2 minutes to read • Edit Online

Todos los servicios de Azure incluyen ciertas cuotas y límites predeterminados para los recursos y las
características. En este artículo se detallan los límites y las cuotas predeterminados para Azure Container Instances.
La disponibilidad de recursos de proceso, memoria y almacenamiento de Azure Container Instances varía en
función de la región y el sistema operativo. Para más información, consulte Disponibilidad de recursos para Azure
Container Instances.

Límites y cuotas del servicio


RESO URC E L ÍM IT E

Grupos de contenedores de SKU estándar por región por 1001


suscripción

Grupos de contenedores de SKU dedicado por región por 01


suscripción

Número de contenedores por grupo de contenedor 60

Número de volúmenes por grupo de contenedor 20

Puertos por IP 5

Tamaño del registro de instancia de contenedor: instancia en 4 MB


ejecución

Tamaño del registro de instancia de contenedor: instancia 16 KB o 1000 líneas


detenida

Creaciones de contenedores cada hora 3001

Creaciones de contenedores cada 5 minutos 1001

Eliminaciones de contenedores cada hora 3001

Eliminaciones de contenedores cada 5 minutos 1001

1Para solicitar un aumento del límite, cree una solicitud de soporte técnico de Azure.

Pasos siguientes
Pueden aumentarse ciertas cuotas y límites predeterminados. Para solicitar un aumento de uno o varios recursos
que admiten un aumento de este tipo, envíe una solicitud de soporte técnico de Azure (seleccione "Cuota" en Tipo
de emisión ).
Disponibilidad de recursos para Azure Container
Instances en las regiones de Azure
23/07/2020 • 6 minutes to read • Edit Online

En este artículo se detalla la disponibilidad de los recursos de proceso, memoria y almacenamiento de Azure
Container Instances en las regiones de Azure y del sistema operativo de destino.
Los valores que se presentan son los recursos máximos disponibles por cada implementación de un grupo de
contenedores. Los valores están actualizados en el momento de la publicación.

NOTE
Los grupos de contenedores creados dentro de estos límites de recursos están sujetos a disponibilidad en la región de
implementación. Cuando una región está sometida a mucha carga, puede experimentar un error al implementar instancias.
Para mitigar este tipo de error de implementación, intente implementar las instancias con una configuración de menos
recursos o bien pruebe a realizar la implementación en un momento posterior o en una región diferente con los recursos
disponibles.

Para obtener información sobre las cuotas y otros límites en las implementaciones, vea Cuotas y límites de Azure
Container Instances.

Disponibilidad: general
Las siguientes regiones y recursos máximos están disponibles para los grupos de contenedores con Linux y
contenedores basados en Windows Server 2016 admitidos.

M EM O RIA M Á XIM A A L M A C EN A M IEN TO


REGIO N S SO USO M Á XIM O DE C P U ( GB ) ( GB )

Sur de Brasil, Centro Linux 4 16 50


de Canadá, Centro de
la India, Centro de
EE. UU., Este de Asia,
Este de EE. UU., Este
de EE. UU. 2, Norte
de Europa, Centro-
sur de EE. UU.,
Sudeste de Asia, Sur
de la India, Sur de
Reino Unido, Oeste
de Europa, Oeste de
EE. UU., Oeste de
EE. UU. 2

Este de Australia, Linux 2 8 50


Japón Oriental

Centro-Norte de EE. Linux 2 3,5 50


UU
M EM O RIA M Á XIM A A L M A C EN A M IEN TO
REGIO N S SO USO M Á XIM O DE C P U ( GB ) ( GB )

Sur de Brasil, Japón Windows 4 16 20


Oriental, Oeste de
Europa

Este de EE. UU., Windows 4 14 20


Oeste de EE. UU.

Este de Australia, Windows 2 3,5 20


Centro de Canadá,
Centro de la India,
Centro de EE. UU.,
Este de Asia, Este de
EE. UU. 2, Centro-
norte de EE. UU.,
Norte de Europa,
Centro-sur de
EE. UU., Sudeste de
Asia, Sur de la India,
Sur de Reino Unido,
Oeste de EE. UU. 2

Disponibilidad: implementaciones de la versión 1809 para


Windows Server 2019 LTSC (versión preliminar)
Las siguientes regiones y recursos máximos están disponibles para los grupos de contenedores con contenedores
basados en Windows Server 2019 (versión preliminar).

M EM O RIA M Á XIM A A L M A C EN A M IEN TO


REGIO N S SO USO M Á XIM O DE C P U ( GB ) ( GB )

Este de Australia, Sur Windows 4 16 20


de Brasil, Centro de
Canadá, Centro de la
India, Centro de
EE. UU., Este de Asia,
Este de EE. UU., Este
de Japón, Centro-
norte de EE. UU.,
Norte de Europa,
Centro-sur de
EE. UU., Sudeste de
Asia, Sur de la India,
Sur de Reino Unido,
Oeste de Europa

Este de EE. UU. 2, Windows 2 3,5 20


Oeste de EE. UU. 2

Disponibilidad: implementación de red virtual


Las regiones y los recursos máximos siguientes están disponibles para un grupo de contenedores implementado
en una red virtual de Azure.
Regiones y disponibilidad de recursos
M EM O RIA M Á XIM A A L M A C EN A M IEN TO
REGIO N S SO USO M Á XIM O DE C P U ( GB ) ( GB )

Este de Australia, Linux 4 16 50


Centro de Canadá,
Centro de EE. UU.,
Este de EE. UU. 2,
Europa del Norte,
Centro-sur de
EE. UU., Sudeste de
Asia, Oeste de
Europa, Oeste de
EE. UU. 2

Japón Oriental Linux 2 8 50

Centro y norte de Linux 2 3,5 50


EE. UU., Sur de la
India, Oeste de
EE. UU.

Disponibilidad: recursos de GPU (versión preliminar)


Las regiones y los recursos máximos siguientes están disponibles para un grupo de contenedores implementado
con recursos de GPU (versión preliminar).

IMPORTANT
Los recursos de GPU solo están disponibles bajo solicitud. Para solicitar acceso a los recursos de GPU, envíe una solicitud de
soporte técnico de Azure.

Disponibilidad en regiones
REGIO N S SO SK U DE GP U DISP O N IB L ES

Este de EE. UU., Oeste de Europa, Linux K80, P100, V100


Oeste de EE. UU. 2

Sudeste de Asia Linux P100, V100

Centro de la India Linux V100

Norte de Europa Linux K80

Disponibilidad de recursos
REC UEN TO DE USO M Á XIM O DE M EM O RIA A L M A C EN A M IEN
SO SK U DE GP U GP U CPU M Á XIM A ( GB ) TO ( GB )

Linux K80 1 6 56 50

Linux K80 2 12 112 50

Linux K80 4 24 224 50


REC UEN TO DE USO M Á XIM O DE M EM O RIA A L M A C EN A M IEN
SO SK U DE GP U GP U CPU M Á XIM A ( GB ) TO ( GB )

Linux P100 1 6 112 50

Linux P100 2 12 224 50

Linux P100 4 24 448 50

Linux V100 1 6 112 50

Linux V100 2 12 224 50

Linux V100 4 24 448 50

Pasos siguientes
Informe al equipo si le gustaría ver regiones adicionales o una mayor disponibilidad de los recursos en
aka.ms/aci/feedback.
Para obtener información sobre cómo solucionar problemas de la implementación de instancias de contenedor,
vea Solución de problemas en las implementaciones en Azure Container Instances.
Azure Container Instances y orquestadores de
contenedores
23/07/2020 • 6 minutes to read • Edit Online

Los contenedores, debido a su tamaño pequeño y a la orientación de aplicaciones, se adaptan perfectamente a


entornos de entrega ágil y arquitecturas basadas en microservicios. La tarea de automatizar y administrar una gran
cantidad de contenedores y cómo interactúan se conoce como orquestación. Entre los orquestadores de
contenedores más populares se encuentran Kubernetes, DC/OS y Docker Swarm.
Azure Container Instances proporciona algunas de las funcionalidades básicas de programación de plataformas de
orquestación. Y mientras no se cubran los servicios de más valor que esas plataformas proporcionan, Azure
Container Instances puede complementarlos. En este artículo se describe el ámbito de los aspectos que controla
Azure Container Instances y cómo los orquestadores de contenedores completos pueden interactuar con él.

Orquestación tradicional
La definición estándar de orquestación incluye las tareas siguientes:
Programación : en una solicitud de recurso e imagen de contenedor, busque una máquina adecuada en la cual
ejecutar el contenedor.
Afinidad/antiafinidad : especifique que un conjunto de contenedores se deben ejecutar de manera cercana
entre sí (para mejorar el rendimiento) o con la distancia suficiente como para mejorar la disponibilidad.
Seguimiento del estado : inspeccione los contenedores por si existen errores y vuelva a programarlos.
Conmutación por error : realice un seguimiento de qué se ejecuta en cada máquina y vuelva a programar los
contenedores desde máquinas con error a nodos en estado correcto.
Escalado : agregue o quite instancias de contenedores para coincidir con la demanda, ya sea manual o
automáticamente.
Redes : proporcione una red superpuesta para coordinar los contenedores a fin de que se comuniquen entre
varios equipos host.
Detección de ser vicios : permita que los contenedores se localicen entre sí de manera automática incluso
cuando se mueven entre equipos host y cambian las direcciones IP.
Actualizaciones de aplicaciones coordinadas : administre las actualizaciones de contenedores para evitar el
tiempo de inactividad de las aplicaciones y permitir la reversión si algo sale mal.

Orquestación con Azure Container Instances: un enfoque por niveles


Azure Container Instances permite un enfoque por niveles a la orquestación, lo que proporciona todas las
funcionalidades de programación y administración que se requieren para ejecutar un solo contenedor mientras se
permite que las plataformas de orquestadores administren tareas de varios contenedores sobre él.
Dado que Azure administra la infraestructura subyacente de Container Instances, una plataforma de orquestadores
no necesita ocuparse de encontrar un equipo host adecuado en el cual ejecutar un solo contenedor. La elasticidad
de la nube garantiza que siempre haya uno disponible. En lugar de eso, el orquestador se puede centrar en las
tareas que simplifican la implementación de arquitecturas con varios contenedores, incluidas actualizaciones
coordinadas y escalado.

Escenarios
Si bien la integración de los orquestadores con Azure Container Instances todavía es incipiente, podemos prever
que surgirán algunos entornos distintos:
Orquestación exclusiva de Container Instances
Dado que se inician rápidamente y se facturan por segundo, un entorno basado exclusivamente en Azure Container
Instances ofrece la forma más rápida de comenzar usar y trabajar con cargas de trabajo muy variables.
Combinación de Container Instances y contenedores en Virtual Machines
En el caso de cargas de trabajo estables y de ejecución prolongada, orquestar contenedores en un clúster de
máquinas virtuales dedicadas habitualmente es más barato que ejecutar los mismos contenedores con Azure
Container Instances. Sin embargo, Container Instances ofrece una solución excelente para expandir y contraer
rápidamente la capacidad total para enfrentar las subidas inesperadas o breves en el uso.
En lugar de escalar horizontalmente el número de máquinas virtuales en el clúster y luego implementar
contenedores adicionales en esas máquinas, el orquestador puede simplemente programar los contenedores
adicionales con Azure Container Instances y eliminarlos una vez que deje de necesitarlos.

Implementación de ejemplo: nodos virtuales para Azure Kubernetes


Service (AKS)
Para escalar rápidamente las cargas de trabajo de aplicación en un clúster de Azure Kubernetes Service, puede usar
nodos virtuales creados de manera dinámica en Azure Container Instances. Los nodos virtuales permiten la
comunicación de red entre los pods que se ejecutan en ACI y el clúster de AKS.
Actualmente, estos nodos virtuales admiten instancias de contenedor de Linux. Empiece a trabajar con los nodos
virtuales mediante la CLI de Azure o Azure Portal.
Los nodos virtuales utilizan el código abierto Virtual Kubelet para imitar al kubelet de Kubernetes al registrarse
como un nodo con capacidad ilimitada. Virtual Kubelet envía la creación de pods como grupos de contenedores en
Azure Container Instances.
Consulte el proyecto Virtual Kubelet para obtener ejemplos adicionales de la ampliación de la API de Kubernetes en
plataformas de contenedores sin servidor.

Pasos siguientes
Use la guía de inicio rápido para crear el primer contenedor con Azure Container Instances.
Base de referencia de seguridad de Azure para
Container Instances
23/07/2020 • 70 minutes to read • Edit Online

La base de referencia de seguridad de Azure para Container Instances que le ayudará a mejorar la posición de
seguridad de la implementación.
La base de referencia de este servicio se extrae de la versión 1.0 de Azure Security Benchmark, que proporciona
recomendaciones sobre cómo puede proteger las soluciones en la nube en Azure con nuestra guía de
procedimientos recomendados.
Para más información, consulte Introducción a la línea de base de seguridad de Azure.

Seguridad de las redes


Para más información, consulte Control de seguridad: Seguridad de redes.
1.1: Proteja los recursos mediante grupos de seguridad de red o Azure Firewall en su red virtual
Instrucciones : Azure Virtual Network proporciona seguridad, acceso de red seguro y privado para recursos
locales y de Azure. Integre los grupos de contenedores de Azure Container Instances en una red virtual de Azure.
Escenarios y recursos de red virtual: Azure Container Instances
Implementación de instancias de contenedor en una red virtual de Azure
Creación de un NSG con una configuración de seguridad
Implementación y configuración de Azure Firewall
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.2: Supervise y registre la configuración y el tráfico de redes virtuales, subredes y NIC
Guía : Use Azure Security Center y siga las recomendaciones de protección de redes para ayudar a proteger sus
recursos de red en Azure. Habilite los registros de flujo de NSG y envíe registros a una cuenta de almacenamiento
para la auditoría del tráfico.
Habilitación de los registros de flujo del grupo de seguridad de red
Protección de los recursos de red
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.3: Proteja las aplicaciones web críticas
Guía : implemente el firewall de aplicaciones web (WAF) de Azure delante de las aplicaciones web críticas
hospedadas en Azure Container Instances para inspeccionar mejor el tráfico entrante. Habilite la configuración de
diagnóstico para WAF e ingiera los registros en una cuenta de almacenamiento, un centro de eventos o un área de
trabajo de análisis de registros.
Implementación de WAF de Azure
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.4: Deniegue las comunicaciones con direcciones IP malintencionadas conocidas
Guía : Habilite la protección contra DDoS estándar en las redes virtuales de Azure para protegerse frente a ataques
DDoS. Use la inteligencia sobre amenazas integrada en Azure Security Center para denegar las comunicaciones
con direcciones IP malintencionadas conocidas. Implemente Azure Firewall en cada uno de los límites de red de la
organización con la inteligencia de amenazas habilitada y configurada para alertar y denegar el tráfico de red
malintencionado. Use el acceso de red Just-in-Time de Azure Security Center para configurar los NSG para limitar
la exposición de los puntos de conexión a las direcciones IP aprobadas durante un período limitado. Use la
protección de redes adaptativa de Azure Security Center para recomendar configuraciones de NSG que limiten los
puertos y las direcciones IP de origen según el tráfico real y la inteligencia sobre amenazas.
Implementación de Azure Firewall
Descripción de la inteligencia sobre amenazas integrada de Azure Security Center
Descripción de la protección de red adaptable de Azure Security Center
Control de acceso de red Just-in-Time de Azure Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.5: Registre los paquetes de red y registros de flujo
Guía : si usa grupos de seguridad de red (NSG) con su implementación de red virtual, habilite los registros de flujo
del grupo de seguridad de red conectado a la subred delegada en Azure Container Instances. Anote los registros
de flujo del grupo de seguridad de red en una cuenta de Azure Storage para generar registros de flujo. Si es
necesario para investigar actividades anómalas, habilite la captura de paquetes de Azure Network Watcher.
Habilitación de los registros de flujo del grupo de seguridad de red
Habilitación de Network Watcher
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
1.6: Implemente sistemas de prevención de intrusiones y detección de intrusiones (IDS/IPS ) basados en la red
Instrucciones : Seleccione una oferta de Azure Marketplace que admita la funcionalidad de IDS/IPS con
funcionalidades de inspección de carga. Si la detección y/o la prevención de intrusiones basadas en la inspección
de carga no es un requisito, se puede usar Azure Firewall con la inteligencia sobre amenazas. El filtrado basado en
inteligencia sobre amenazas de Azure Firewall puede alertar y denegar el tráfico desde y hacia los dominios y las
direcciones IP malintencionados conocidos. La direcciones IP y los dominios proceden de la fuente Inteligencia
sobre amenazas de Microsoft.
Implemente la solución de firewall que prefiera en cada uno de los límites de red de su organización para detectar
y/o denegar el tráfico malintencionado.
Azure Marketplace
Implementación de Azure Firewall
Configuración de alertas con Azure Firewall
Implementación en una red virtual: Azure Container Instances
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
1.7: Administre el tráfico a las aplicaciones web
Instrucciones : Implemente Application Gateway de Azure para las aplicaciones web con HTTPS/SSL habilitado
para los certificados de confianza.
Implementación de Application Gateway
Configuración de Application Gateway para usar HTTPS
Descripción del equilibrio de carga de capa 7 con las puertas de enlace de aplicaciones web de Azure
Exposición de una dirección IP estática para un grupo de contenedores
Implementación en una red virtual: Azure Container Instances
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
1.8: Minimice la complejidad y la sobrecarga administrativa de las reglas de seguridad de red
Guía : Puede usar etiquetas de servicio de Virtual Network para definir controles de acceso a la red en grupos de
seguridad de red o Azure Firewall. Puede utilizar etiquetas de servicio en lugar de direcciones IP específicas al crear
reglas de seguridad. Al especificar el nombre de la etiqueta de servicio (por ejemplo, ApiManagement) en el campo
de origen o destino apropiado de una regla, puede permitir o denegar el tráfico para el servicio correspondiente.
Microsoft administra los prefijos de direcciones que la etiqueta de servicio incluye y actualiza automáticamente
dicha etiqueta a medida que las direcciones cambian.
También puede usar grupos de seguridad de aplicaciones para simplificar una configuración de seguridad
compleja. Los grupos de seguridad de aplicaciones le permiten configurar la seguridad de red como una extensión
natural de la estructura de una aplicación, lo que le permite agrupar máquinas virtuales y directivas de seguridad
de red basadas en esos grupos.
Descripción y uso de las etiquetas de servicio
Descripción y uso de los grupos de seguridad de aplicaciones
Implementación en una red virtual: Azure Container Instances
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
1.9: Mantenga las configuraciones de seguridad estándar para dispositivos de red
Guía : También puede usar Azure Blueprints para simplificar las implementaciones de Azure a gran escala mediante
el empaquetado de artefactos de entorno clave, como plantillas de Azure Resource Manager, controles de RBAC y
directivas, en una única definición de plano técnico. Puede aplicar el plano técnico a nuevas suscripciones y ajustar
el control y la administración a través del control de versiones.
Configuración y administración de Azure Policy
Ejemplos de Azure Policy para redes
Creación de un plano técnico de Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
1.10: Documente las reglas de configuración de tráfico
Guía : Use etiquetas para NSG y otros recursos relacionados con la seguridad de red y el flujo de tráfico. En el caso
de las reglas de NSG individuales, use el campo "Descripción" para especificar las necesidades empresariales o la
duración (etc.) de las reglas que permiten que entre o salga el tráfico en una red.
Use cualquiera de las definiciones de directiva de Azure integradas relacionadas con el etiquetado, como "Requerir
etiqueta y su valor" para asegurarse de que todos los recursos se crean con etiquetas y para notificarle los recursos
no etiquetados existentes.
Puede usar Azure PowerShell o la CLI de Azure para buscar o realizar acciones en los recursos en función de sus
etiquetas.
Creación y uso de etiquetas
Implementación en una red virtual: Azure Container Instances
Creación de un grupo de seguridad de red con una configuración de seguridad
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
1.11: Use herramientas automatizadas para supervisar las configuraciones de recursos de red y detectar cambios
Guía : use el registro de actividad de Azure para supervisar las configuraciones de los recursos de red y detectar
cambios en ellos relacionados con las instancias de contenedor. Cree alertas en Azure Monitor que se
desencadenarán cuando se produzcan cambios en los recursos de red críticos.
Visualización y recuperación de eventos del registro de actividad de Azure
Creación de alertas en Azure Monitor
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer

Registro y supervisión
Para más información, consulte Control de seguridad: registro y supervisión.
2.1: Uso de orígenes de sincronización de hora aprobados
Guía : Microsoft mantiene los orígenes de hora de los recursos de Azure; sin embargo, tiene la opción de
administrar la configuración de la sincronización de hora de los recursos de proceso. Por ejemplo, ejecute un
comando de sincronización de hora en un contenedor en ejecución.
Configuración de la sincronización de hora de los recursos de proceso de Azure
Ejecución de un comando en una instancia de contenedor de Azure en ejecución
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Microsoft
2.2: Configuración de la administración central de registros de seguridad
Guía : ingiera registros a través de Azure Monitor para agregar datos de seguridad generados por un grupo de
contenedores de Azure. En Azure Monitor, use áreas de trabajo de Log Analytics para realizar consultas y análisis, y
utilice cuentas de Azure Storage para el almacenamiento de archivos a largo plazo.
Registro de instancias y grupos de contenedores con registros de Azure Monitor
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
2.3: Habilitación del registro de auditoría para recursos de Azure
Instrucciones : Azure Monitor recopila registros de recursos (anteriormente denominados registros de
diagnóstico) de eventos controlados por el usuario en el registro. Azure Container Instances incluye compatibilidad
integrada con el envío de registros de grupo de contenedores, datos de eventos y registros de contenedor a
registros de Azure Monitor.
Registro de instancias y grupos de contenedores con registros de Azure Monitor
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
2.4: Recopilación de registros de seguridad de sistemas operativos
Guía : No aplicable. Esta guía está pensada para recursos de proceso IaaS.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
2.5: Configuración de la retención del almacenamiento de registros de seguridad
Guía : En Azure Monitor, establezca el período de retención del área de trabajo de Log Analytics de acuerdo con la
normativa de cumplimiento de su organización. Use cuentas de Azure Storage para el almacenamiento de archivos
a largo plazo.
Configuración de parámetros de retención de registros de áreas de trabajo de Log Analytics
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
2.6: Supervisión y registros de revisión
Guía : Analice y supervise los registros en busca de comportamientos anómalos y revise los resultados con
regularidad. Use el área de trabajo de Log Analytics de Azure Monitor para revisar los registros y realizar consultas
en los datos del registro.
Registro de instancias y grupos de contenedores con registros de Azure Monitor
Descripción del área de trabajo de Log Analytics
Procedimiento para realizar consultas personalizadas en Azure Monitor
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
2.7: Habilitación de alertas para actividades anómalas
Guía : use el área de trabajo de Log Analytics para supervisar las actividades anómalas encontradas en los
registros y eventos de seguridad y avisar sobre ellas.
Registro de instancias y grupos de contenedores con registros de Azure Monitor
Alertas sobre datos de registro de Log Analytics
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
2.8: Centralización del registro antimalware
Guía : si es necesario, proporcione su propia solución antimalware y recopilación de eventos para ejecutarlos en un
contenedor.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
2.9: Habilitación del registro de consultas DNS
Guía : si es necesario, proporcione su propia solución para consultar los registros DNS en un contenedor.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
2.10: Habilitación del registro de auditoría de la línea de comandos
Guía : si es necesario, configure el registro de la consola en una instancia de contenedor en ejecución.
Ejecución de un comando en una instancia de contenedor de Azure en ejecución
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer

Control de identidades y acceso


Para más información, consulte Control de seguridad: Identidad y control de acceso.
3.1: Mantenga un inventario de cuentas administrativas
Guía : Azure Active Directory (Azure AD) tiene roles integrados que se deben asignar explícitamente y son
consultables. Use el módulo de PowerShell de Azure AD para realizar consultas ad hoc para detectar cuentas que
son miembros de grupos administrativos.
Si usa un registro de contenedor de Azure con Azure Container Instances, para cada registro de contenedor de
Azure, compruebe si la cuenta de administrador integrada está habilitada o deshabilitada. Deshabilite la cuenta
cuando no esté en uso.
Obtención de un rol de directorio en Azure AD con PowerShell
Obtención de los miembros de un rol de directorio en Azure AD con PowerShell
Cuenta de administrador de Azure Container Registry
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
3.2: Cambie las contraseñas predeterminadas cuando proceda
Guía : Azure Active Directory (Azure AD) no tiene el concepto de contraseñas predeterminadas. Otros recursos de
Azure que requieren una contraseña obligan a crear una contraseña con requisitos de complejidad y una longitud
mínima, que cambia en función del servicio. Es responsable de las aplicaciones de terceros y de los servicios de
Marketplace que pueden usar contraseñas predeterminadas.
Si usa un registro de contenedor de Azure con Azure Container Instances y la cuenta de administrador
predeterminada de dicho registro está habilitada, se crean automáticamente contraseñas complejas, que se deben
rotar. Deshabilite la cuenta cuando no esté en uso.
Cuenta de administrador de Azure Container Registry
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
3.3: Use cuentas administrativas dedicadas
Guía : Cree procedimientos operativos estándar en torno al uso de cuentas administrativas dedicadas. Use la
administración de identidad y acceso de Azure Security Center para supervisar el número de cuentas
administrativas.
Si usa un registro de contenedor de Azure con Azure Container Instances, cree procedimientos para habilitar la
cuenta de administrador integrada de un registro de contenedor. Deshabilite la cuenta cuando no esté en uso.
Descripción de identidad y acceso en Azure Security Center
Cuenta de administrador de Azure Container Registry
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
3.4: Use el inicio de sesión único (SSO ) con Azure Active Directory
Guía : Siempre que sea posible, use el SSO de Azure Active Directory en lugar de configurar credenciales
independientes individuales por servicio. Use las recomendaciones de administración de identidades y acceso de
Azure Security Center.
Descripción del SSO con Azure AD
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
3.5: Use la autenticación multifactor para todo el acceso basado en Azure Active Directory
Guía : Habilite la autenticación multifactor (MFA) de Azure Active Directory (Azure AD) y siga las recomendaciones
de administración de identidades y acceso de Azure Security Center.
Procedimiento para habilitar la MFA en Azure
Supervisión de la identidad y el acceso en Azure Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
3.6: Use máquinas dedicadas (estaciones de trabajo de acceso con privilegios) para todas las tareas
administrativas
Guía : Utilice PAW (estaciones de trabajo de acceso privilegiado) con la MFA configurada para iniciar la sesión y
configurar recursos de Azure.
Más información sobre las estaciones de trabajo con privilegios de acceso
Procedimiento para habilitar la MFA en Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
3.7: Registre y alerte de la actividad sospechosa desde cuentas administrativas
Guía : Use los informes de seguridad de Azure Active Directory (Azure AD) para la generación de registros y alertas
cuando se produzcan actividades sospechosas o no seguras en el entorno. Use Azure Security Center para
supervisar la actividad de identidad y acceso.
Procedimiento para identificar usuarios de Azure AD marcados por una actividad de riesgo
Supervisión de la actividad de identidad y acceso de los usuarios en Azure Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
3.8: Administre los recursos de Azure solo desde ubicaciones aprobadas
Instrucciones : Use ubicaciones con nombre de acceso condicional para permitir el acceso solo desde
agrupaciones lógicas específicas de intervalos de direcciones IP o países o regiones.
Configuración de ubicaciones con nombre en Azure
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
3.9: Uso de Azure Active Directory
Instrucciones : Use Azure Active Directory (AD) como sistema central de autenticación y autorización. Azure AD
protege los datos mediante un cifrado seguro para los datos en reposo y en tránsito. Azure AD también cifra con
sal, convierte en hash y almacena de forma segura las credenciales de los usuarios.
Procedimiento para crear y configurar una instancia de Azure AD
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
3.10: Revise y concilie regularmente el acceso de los usuarios
Instrucciones : Azure Active Directory (Azure AD) proporciona registros para ayudar a descubrir cuentas
obsoletas. Además, use las revisiones de acceso de identidad de Azure para administrar de forma eficiente las
pertenencias a grupos, el acceso a las aplicaciones empresariales y las asignaciones de roles. El acceso de los
usuarios se puede revisar de forma periódica para asegurarse de que solo las personas adecuadas tengan acceso
continuado.
Descripción de los informes de Azure AD
Procedimiento para usar las revisiones de acceso de identidad de Azure
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
3.11: Supervise los intentos de acceso a cuentas desactivadas
Guía : Puede usar orígenes de registro de actividad de inicio de sesión de Azure Active Directory (Azure AD),
auditoría y riesgos para la supervisión, lo que permite realizar la integración con cualquier herramienta de
administración de eventos e información de seguridad (SIEM) y de supervisión.
Puede simplificar este proceso creando una configuración de diagnóstico para las cuentas de usuario de Azure
Active Directory y enviando los registros de auditoría y los registros de inicio de sesión a un área de trabajo de Log
Analytics. Puede configurar las alertas deseadas en el área de trabajo de Log Analytics.
Integración de los registros de actividad de Azure en Azure Monitor
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
3.12: Alerte de las desviaciones de comportamiento en los inicios de sesión de las cuentas
Guía : Use las características de protección de identidad y detección de riesgo de Azure Active Directory (Azure AD)
para configurar respuestas automatizadas a las acciones sospechosas que se detecten relacionadas con las
identidades de los usuarios.
Visualización de los inicios de sesión de riesgo de Azure AD
Configuración y habilitación de las directivas de riesgo de protección de identidad
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
3.13: Proporcione a Microsoft acceso a los datos pertinentes del cliente durante los escenarios de soporte
técnico
Guía : no está disponible en este momento; Caja de seguridad del cliente no es compatible actualmente con Azure
Container Instances.
Lista de servicios admitidos por la Caja de seguridad del cliente
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable

Protección de los datos


Para más información, consulte Control de seguridad: Protección de datos.
4.1: Mantenimiento de un inventario de información confidencial
Guía : use etiquetas de recursos para ayudar a realizar el seguimiento de las instancias de contenedor de Azure que
almacenan o procesan información confidencial.
Aplique control de versiones a las imágenes de contenedor y etiquételas para ayudar a realizar el seguimiento de
las imágenes que almacenan o procesan información confidencial.
Creación y uso de etiquetas
Recomendaciones para el etiquetado y el control de versiones de las imágenes de contenedor
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
4.2: Aislamiento de los sistemas que almacenan o procesan información confidencial
Guía : implemente suscripciones o grupos de administración independientes para los entornos de desarrollo,
pruebas y producción. Los recursos deben separarse por red virtual o subred, etiquetarse adecuadamente y estar
protegidos por un grupo de seguridad de red o Azure Firewall. Los recursos que almacenan o procesan datos
confidenciales deben estar suficientemente aislados.
Ejecución de un comando en una instancia de contenedor de Azure en ejecución
Creación de suscripciones adicionales de Azure
Creación de grupos de administración
Creación y uso de etiquetas
Implementación en una red virtual: Azure Container Instances
Creación de un grupo de seguridad de red con una configuración de seguridad
Implementación de Azure Firewall
Configuración de alertas o alertas y denegación con Azure Firewall
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
4.3: Supervisión y bloqueo de una transferencia no autorizada de información confidencial
Guía : Implemente una herramienta automatizada en los perímetros de red que supervise la transferencia no
autorizada de información confidencial y bloquee dichas transferencias al tiempo que alerta a los profesionales de
seguridad de la información. Supervise y bloquee la transferencia de información no autorizada desde recursos
compartidos de archivos de Azure y otros volúmenes montados en instancias de contenedor.
En el caso de la plataforma subyacente administrada por Microsoft, Microsoft trata todo el contenido de los
clientes como confidencial y hace grandes esfuerzos para proteger a los clientes contra la pérdida y exposición de
sus datos. Para garantizar la seguridad de los datos de los clientes dentro de Azure, Microsoft ha implementado y
mantiene un conjunto de controles y funcionalidades eficaces de protección de datos.
Descripción de la protección de datos de los clientes en Azure
Implementación en una red virtual: Azure Container Instances
Montaje de un recurso compartido de archivos de Azure en Azure Container Instances
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Compartido
4.4: Cifrado de toda la información confidencial en tránsito
Instrucciones : asegúrese de que los clientes que se conectan a los grupos de contenedores de Azure pueden
negociar TLS 1.2 o superior. De forma predeterminada, los recursos de Microsoft Azure negociarán TLS 1.2.
Siga las recomendaciones de Azure Security Center para el cifrado en reposo y el cifrado en tránsito, si procede.
Descripción del cifrado en tránsito con Azure
Super visión de Azure Security Center : Sí
Responsabilidad : Compartido
4.5: Uso de una herramienta de detección activa para identificar datos confidenciales
Guía : las características de identificación, clasificación y prevención de pérdida de datos no están disponibles
actualmente en Azure Container Instances. Etiquete los grupos de contenedores que podrían procesar información
confidencial e implemente una solución de terceros, si se requiere por motivos de cumplimiento.
En el caso de la plataforma subyacente administrada por Microsoft, Microsoft trata todo el contenido de los
clientes como confidencial y hace grandes esfuerzos para proteger a los clientes contra la pérdida y exposición de
sus datos. Para garantizar la seguridad de los datos de los clientes dentro de Azure, Microsoft ha implementado y
mantiene un conjunto de controles y funcionalidades eficaces de protección de datos.
Descripción de la protección de datos de los clientes en Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Compartido
4.6: Uso de RBAC de Azure para controlar el acceso a los recursos
Guía : use RBAC de Azure AD para controlar el acceso a los datos y recursos de Azure Container Instances.
Configuración de RBAC en Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.7: Uso de la prevención de pérdida de datos basada en host para aplicar el control de acceso
Guía : no aplicable; esta recomendación está diseñada para recursos de proceso de IaaS.
En el caso de la plataforma subyacente administrada por Microsoft, Microsoft trata todo el contenido de los
clientes como confidencial y hace grandes esfuerzos para proteger a los clientes contra la pérdida y exposición de
sus datos. Para garantizar la seguridad de los datos de los clientes dentro de Azure, Microsoft ha implementado y
mantiene un conjunto de controles y funcionalidades eficaces de protección de datos.
Descripción de la protección de datos de los clientes en Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Compartido
4.8: Cifrado de información confidencial en reposo
Guía : de forma predeterminada, todos los datos de implementación de Azure Container Instances se cifran en
reposo mediante claves administradas por Microsoft. También tiene la opción de administrar el cifrado con su
propia clave (clave administrada por el cliente).
Descripción del cifrado en reposo en Azure
Cifrado de datos de implementación con Azure Container Instances
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
4.9: Registro y alerta de cambios en los recursos críticos de Azure
Instrucciones : use Azure Monitor con el registro de actividad de Azure para crear alertas para cuando se
produzcan cambios en los grupos de contenedores y las instancias de contenedor.
Creación de alertas para los eventos del registro de actividad de Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer

Administración de vulnerabilidades
Para más información, consulte Control de seguridad: Administración de vulnerabilidades.
5.1: Ejecute herramientas de análisis de vulnerabilidades automatizado
Guía : implemente soluciones para examinar imágenes de contenedor de un registro privado e identificar las
posibles vulnerabilidades. Siga las recomendaciones de Azure Security Center sobre cómo realizar evaluaciones de
vulnerabilidades en las imágenes de contenedor almacenadas en Azure Container Registry. Opcionalmente, puede
implementar soluciones de terceros de Azure Marketplace para realizar evaluaciones de vulnerabilidades de
imagen.
Consideraciones de seguridad para Azure Container Instances
Integración de Azure Container Registry con Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
5.2: Implemente una solución de administración de revisiones de sistema operativo automatizada
Instrucciones : Microsoft realiza la administración de revisiones en los sistemas subyacentes que admiten
contenedores en ejecución.
Use una solución personalizada o de terceros para aplicar revisiones a las imágenes de contenedor. Si almacena
imágenes de contenedor en Azure Container Registry, ejecute tareas de Azure Container Registry para automatizar
las actualizaciones de las imágenes de aplicación de un registro de contenedor en función de las revisiones de
seguridad u otras actualizaciones de las imágenes base del sistema operativo.
Consideraciones de seguridad para Azure Container Instances
Acerca de las actualizaciones de imagen base para ACR Tasks
Super visión de Azure Security Center : No aplicable
Responsabilidad : Compartido
5.3: Implemente una solución automatizada de administración de revisiones de software de terceros
Guía : use una solución personalizada o de terceros para aplicar revisiones a las imágenes de contenedor. Si
almacena imágenes de contenedor en Azure Container Registry, ejecute tareas de Azure Container Registry para
automatizar las actualizaciones de las imágenes de aplicación de un registro de contenedor en función de las
revisiones de seguridad u otras actualizaciones de las imágenes base del sistema operativo.
Consideraciones de seguridad para Azure Container Instances
Acerca de las actualizaciones de imagen base para ACR Tasks
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
5.4: Compare los exámenes de vulnerabilidades opuestos
Guía : exporte los resultados del examen de las imágenes en intervalos coherentes y compare los resultados para
comprobar que se han corregido las vulnerabilidades. Si almacena imágenes de contenedor en Azure Container
Registry, integre el registro con Azure Security Center para permitir el análisis periódico de las imágenes de
contenedor a fin de detectar vulnerabilidades. Opcionalmente, puede implementar soluciones de terceros de Azure
Marketplace para realizar evaluaciones de vulnerabilidades de imagen.
Consideraciones de seguridad para Azure Container Instances
Integración de Azure Container Registry con Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
5.5: Use un proceso de clasificación de riesgos para priorizar la corrección de las vulnerabilidades detectadas
Guía : si almacena imágenes de contenedor en Azure Container Registry, integre el registro con Azure Security
Center para permitir el examen periódico de las imágenes de contenedor a fin de detectar las vulnerabilidades y
clasificar los riesgos. Opcionalmente, puede implementar soluciones de terceros de Azure Marketplace para
realizar evaluaciones de vulnerabilidades de imagen y clasificación de riesgos.
Consideraciones de seguridad para Azure Container Instances
Integración de Azure Container Registry con Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer

Inventario y administración de recursos


Para más información, consulte Control de seguridad: Administración de recursos y del inventario.
6.1: Uso de la detección de recursos de Azure
Guía : Use Azure Resource Graph para consultar o detectar todos los recursos (por ejemplo, proceso,
almacenamiento, red, puertos y protocolos, etc.) dentro de las suscripciones. Asegúrese de que tiene los permisos
adecuados (lectura) en el inquilino y enumere todas las suscripciones de Azure, así como los recursos de las
suscripciones.
Aunque los recursos clásicos de Azure se pueden detectar a través de Resource Graph, se recomienda
encarecidamente crear y usar los recursos de Azure Resource Manager que figuran a continuación.
Creación de consultas con Azure Resource Graph
Visualización de las suscripciones de Azure
Descripción de Azure RBAC
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.2: Mantenimiento de metadatos de recursos
Guía : aplique etiquetas a Azure Container Instances y recursos relacionados y proporcione metadatos para
organizarlos de forma lógica en una taxonomía.
Creación y uso de etiquetas
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.3: Eliminación de recursos de Azure no autorizados
Instrucciones : Use el etiquetado, los grupos de administración y las suscripciones independientes, si procede,
para organizar y realizar un seguimiento de los recursos. Concilie el inventario periódicamente y asegúrese de que
los recursos no autorizados se eliminan de la suscripción de manera oportuna.
Creación de suscripciones adicionales de Azure
Creación de grupos de administración
Creación y uso de etiquetas
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.4: Mantenimiento de un inventario de los recursos de Azure aprobados y títulos de software
Guía : Tendrá que crear un inventario de los recursos de Azure aprobados y el software aprobado para los recursos
de proceso según las necesidades de la organización.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.5: Supervisión de recursos de Azure no aprobados
Guía : Use Azure Policy para establecer restricciones en el tipo de recursos que se pueden crear en sus
suscripciones.
Use Azure Resource Graph para consultar o detectar recursos dentro de sus suscripciones. Asegúrese de que todos
los recursos de Azure presentes en el entorno estén aprobados.
Auditoría del cumplimiento de los registros de contenedor de Azure mediante Azure Policy
Configuración y administración de Azure Policy
Creación de consultas con Azure Graph
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.6: Supervisión de aplicaciones de software no aprobadas en recursos de proceso
Guía : implemente su propia solución, o una solución de terceros, para inventariar el software de las aplicaciones
en contenedores aprobadas.
implemente soluciones para examinar imágenes de contenedor de un registro privado e identificar las posibles
vulnerabilidades. Siga las recomendaciones de Azure Security Center para realizar evaluaciones de
vulnerabilidades en las imágenes de contenedor almacenadas en Azure Container Registry. Opcionalmente, puede
implementar soluciones de terceros de Azure Marketplace para realizar evaluaciones de vulnerabilidades de
imagen.
Supervise los registros de Azure Container Instances en busca de comportamientos anómalos y revise los
resultados con regularidad. Use el área de trabajo de Log Analytics de Azure Monitor para revisar los registros y
realizar consultas en los datos del registro.
Registro de instancias y grupos de contenedores con registros de Azure Monitor
Descripción del área de trabajo de Log Analytics
Procedimiento para realizar consultas personalizadas en Azure Monitor
Consideraciones de seguridad para Azure Container Instances
Integración de Azure Container Registry con Security Center
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.7: Eliminación de aplicaciones de software y recursos de Azure no aprobadas
Guía : Azure Automation proporciona un control completo durante la implementación, las operaciones y la retirada
de las cargas de trabajo y recursos. Puede implementar su propia solución para quitar aplicaciones de software y
recursos de Azure no autorizados.
Introducción a Azure Automation
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.8: Uso exclusivo de aplicaciones aprobadas
Guía : aplique control de versiones a las imágenes de contenedor y etiquételas para ayudar a realizar el
seguimiento de las imágenes que se ejecutan en aplicaciones aprobadas.
Recomendaciones para el etiquetado y el control de versiones de las imágenes de contenedor
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
6.9: Uso exclusivo de servicios de Azure aprobados
Guía : Use Azure Policy para restringir qué servicios puede aprovisionar en su entorno.
Configuración y administración de Azure Policy
Denegación de un tipo de recurso específico con Azure Policy
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.10: Implementación de la lista de aplicaciones aprobadas
Guía : aplique control de versiones a las imágenes de contenedor y etiquételas para ayudar a realizar el
seguimiento de las imágenes que se ejecutan en aplicaciones aprobadas.
Recomendaciones para el etiquetado y el control de versiones de las imágenes de contenedor
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
6.11:
Limitación de la capacidad de los usuarios para interactuar con Azure Resource Manager a través de scripts
Instrucciones : Use el acceso condicional de Azure para limitar la capacidad de los usuarios de interactuar con
Azure Resource Manager mediante la configuración de la opción "Bloquear acceso" en la aplicación
"Administración de Microsoft Azure".
Configuración del acceso condicional para bloquear el acceso a Azure Resource Manager
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.12: Limitación de capacidad de los usuarios para ejecutar scripts en recursos de proceso
Guía : todos los usuarios con acceso a Azure Container Instances pueden ejecutar scripts dentro de contenedores.
Administre los recursos de Azure Container Instances y revise su acceso mediante distintas suscripciones o grupos
de administración de Azure; también puede aislar los recursos mediante redes virtuales y grupos de seguridad de
red o Azure Firewall.
Ejecución de un comando en una instancia de contenedor de Azure en ejecución
Creación de suscripciones adicionales de Azure
Creación de grupos de administración
Implementación en una red virtual: Azure Container Instances
Creación de un grupo de seguridad de red con una configuración de seguridad
Implementación de Azure Firewall
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
6.13: Segregación física o lógica de aplicaciones de alto riesgo
Guía : el software necesario para las operaciones empresariales, pero que puede suponer un riesgo mayor para la
organización, debe aislarse en su propia red virtual y estar lo suficientemente protegida con Azure Firewall o un
grupo de seguridad de red.
Implementación en una red virtual: Azure Container Instances
Creación de un grupo de seguridad de red con una configuración de seguridad
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
Configuración segura
Para más información, consulte Control de seguridad: Configuración segura.
7.1: Establezca configuraciones seguras para todos los recursos de Azure
Guía : mantenga una configuración de grupo de contenedores aprobada mediante una plantilla de Azure Resource
Manager o la exportación a un archivo YAML. Use Azure Policy para mantener las configuraciones de seguridad de
los recursos de Azure relacionados.
Grupos de contenedores en Azure Container Instances
Configuración y administración de Azure Policy
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.2: Establezca configuraciones del sistema operativo seguras
Guía : use una solución personalizada o de terceros para aplicar revisiones a las imágenes de contenedor. Si
almacena imágenes de contenedor en Azure Container Registry, ejecute tareas de Azure Container Registry para
automatizar las actualizaciones de las imágenes de aplicación de un registro de contenedor en función de las
revisiones de seguridad u otras actualizaciones de las imágenes base del sistema operativo.
Acerca de las actualizaciones de imagen base para ACR Tasks
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.3: Mantenga configuraciones de recursos de Azure seguras
Instrucciones : Use la directiva de Azure [denegar] e [implementar si no existe] para aplicar la configuración
segura en los recursos de Azure.
Configuración y administración de Azure Policy
Descripción de los efectos de Azure Policy
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.4: Mantenga configuraciones del sistema operativo seguras
Instrucciones : implemente soluciones para examinar las imágenes de contenedor de un registro privado e
identificar posibles vulnerabilidades en las configuraciones del sistema operativo. Siga las recomendaciones de
Azure Security Center para realizar evaluaciones de vulnerabilidades en las imágenes de contenedor almacenadas
en Azure Container Registry. Opcionalmente, puede implementar soluciones de terceros de Azure Marketplace
para realizar evaluaciones de vulnerabilidades de imagen.
Use una solución personalizada o de terceros para aplicar revisiones a las imágenes de contenedor. Si almacena
imágenes de contenedor en Azure Container Registry, ejecute tareas de Azure Container Registry para automatizar
las actualizaciones de las imágenes de aplicación de un registro de contenedor en función de las revisiones de
seguridad u otras actualizaciones de las imágenes base del sistema operativo.
Recomendaciones de seguridad de supervisión y examen de contenedores para Azure Container Instances
Integración de Azure Container Registry con Security Center
Acerca de las actualizaciones de imagen base para ACR Tasks
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.5: Almacene de forma segura la configuración de los recursos de Azure
Guía : almacene y administre plantillas de ARM, archivos YAML y definiciones de directivas personalizadas de
Azure de forma segura en el control de código fuente.
Almacenamiento de código en Azure DevOps
Documentación de Azure Repos
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.6: Almacene imágenes de sistema operativo personalizadas de forma segura
Guía : almacene imágenes de contenedor en Azure Container Registry y aproveche RBAC para garantizar que solo
los usuarios autorizados puedan acceder a las imágenes.
Descripción de RBAC en Azure
Descripción de RBAC para Container Registry
Configuración de RBAC en Azure
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.7: Implemente herramientas de administración de configuración del sistema
Instrucciones : Use Azure Policy para alertar, auditar y aplicar las configuraciones del sistema. Además, desarrolle
un proceso y una canalización para administrar las excepciones de las directivas.
Configuración y administración de Azure Policy
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
7.8: Implemente herramientas de administración de configuración del sistema para sistemas operativos
Guía : no aplicable; esta guía está pensada para recursos de proceso de IaaS.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
7.9: Implemente la supervisión de configuración automatizada para servicios de Azure
Guía : Use Azure Security Center para realizar análisis de base de referencia para los recursos de Azure.
Use Azure Policy para establecer restricciones en el tipo de recursos que se pueden crear en sus suscripciones.
Corrección de recomendaciones en Azure Security Center
Auditoría del cumplimiento de los registros de contenedor de Azure mediante Azure Policy
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.10: Implemente la supervisión de configuración automatizada para sistemas operativos
Guía : si usa Azure Container Registry para almacenar imágenes de contenedor, utilice Azure Security Center para
examinar la base de referencia y comprobar la configuración del sistema operativo y de Docker de los
contenedores.
Descripción de las recomendaciones sobre contenedores de Azure Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.11: Administre los secretos de Azure de forma segura
Instrucciones : Use Managed Service Identity junto con Azure Key Vault para simplificar y proteger la
administración de secretos para las aplicaciones en la nube.
Integración con identidades administradas de Azure
Creación de un almacén de claves
Cómo proporcionar la autenticación de Key Vault con una identidad administrada
Cómo utilizar una identidad administrada con Azure Container Instances
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
7.12: Administre las identidades de forma segura y automática
Guía : Use las identidades administradas para proporcionar a los servicios de Azure una identidad administrada
automáticamente en Azure AD. Las identidades administradas le permiten autenticarse en cualquier servicio que
admita la autenticación de Azure AD, como Key Vault, sin necesidad de credenciales en el código.
Configuración de las identidades administradas
Cómo utilizar una identidad administrada con Azure Container Instances
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer
7.13: Elimine la exposición de credenciales no intencionada
Instrucciones : Implemente el escáner de credenciales para identificar las credenciales en el código. El escáner de
credenciales también fomenta el traslado de credenciales detectadas a ubicaciones más seguras, como Azure Key
Vault.
Configuración del escáner de credenciales
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer

Defensa contra malware


Para más información, consulte Control de seguridad: defensa contra malware.
8.1: Use software antimalware administrado centralmente
Instrucciones : no aplicable; esta guía está pensada para recursos de proceso de IaaS.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable
8.2: Examine previamente los archivos que se van a cargar en recursos de Azure que no son de proceso
Guía : Microsoft Antimalware está habilitado en el host subyacente que admite los servicios de Azure (por ejemplo,
Azure Container Instances), pero no se ejecuta en el contenido del cliente.
Examine previamente los archivos que se cargan en recursos de Azure que no son de proceso, como App Service,
Data Lake Storage, Blob Storage, etc.
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
8.3: Asegúrese de que se han actualizado el software y las firmas antimalware
Guía : no aplicable; esta recomendación está diseñada para recursos de proceso de IaaS.
Microsoft Antimalware está habilitado en el host subyacente que admite los servicios de Azure (por ejemplo, Azure
Container Instances), pero no se ejecuta en el contenido del cliente.
Super visión de Azure Security Center : No aplicable
Responsabilidad : No aplicable

Recuperación de datos
Para más información, consulte Control de seguridad: recuperación de datos.
9.1: Garantía de copias de seguridad automáticas periódicas
Guía : habilite Azure Backup y configure el origen de la copia de seguridad (por ejemplo, un recurso compartido de
archivos montado en grupos de contenedores), así como la frecuencia deseada y el período de retención.
Habilitación de Azure Backup
Montaje de un recurso compartido de archivos de Azure en Azure Container Instances
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
9.2: Realización de copias de seguridad completas del sistema y copia de seguridad de las claves administradas
por el cliente
Guía : Realice una copia de seguridad de las claves administradas por el cliente en Azure Key Vault con las
herramientas de línea de comandos o los SDK de Azure.
Opcionalmente, haga una copia de seguridad de las imágenes de contenedor importando de un registro a otro.
Creación de una copia de seguridad de las claves del almacén de claves en Azure
Importación de imágenes de contenedor en un registro de contenedor
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
9.3: Validación de todas las copias de seguridad, incluidas las claves administradas por el cliente
Guía : Realice una copia de seguridad de las claves administradas por el cliente en Azure Key Vault con las
herramientas de línea de comandos o los SDK de Azure.
Restauración de las claves de Azure Key Vault en Azure
Cifrado de datos de implementación: Azure Container Instances
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
9.4: Garantía de la protección de las copias de seguridad y las claves administradas del cliente
Guía : Habilite la eliminación temporal en Azure Key Vault para proteger las claves contra la eliminación accidental
o malintencionada.
Habilitación de la eliminación temporal en Key Vault
Super visión de Azure Security Center : no disponible actualmente
Responsabilidad : Customer

Respuesta a los incidentes


Para más información, consulte Control de seguridad: Respuesta a los incidentes.
10.1: Creación de una guía de respuesta ante incidentes
Instrucciones : Cree una guía de respuesta a incidentes para su organización. Asegúrese de que haya planes de
respuesta a incidentes escritos que definan todos los roles del personal, así como las fases de administración y
gestión de los incidentes, desde la detección hasta la revisión posterior a la incidencia.
El cliente también puede usar la guía de control de incidentes de seguridad de equipos de NIST como referencia
para la creación de su propio plan de respuesta a incidentes.
Configuración de las automatizaciones de flujos de trabajo en Azure Security Center
Guía para crear su propio proceso de respuesta a incidentes de seguridad
Anatomía de un incidente del Centro de respuestas de seguridad de Microsoft
Guía del NIST para controlar incidentes de seguridad en equipos
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
10.2: Creación de un procedimiento de priorización y puntuación de incidentes
Instrucciones : Azure Security Center asigna una gravedad a cada alerta para ayudarle a priorizar aquellas que se
deben investigar en primer lugar. La gravedad se basa en la confianza que tiene Security Center en la búsqueda o
en el análisis utilizados para emitir la alerta, así como en el nivel de confianza de que ha habido un intento
malintencionado detrás de la actividad que ha provocado la alerta.
Además, marque claramente las suscripciones (por ejemplo, producción, no producción) y cree un sistema de
nomenclatura para identificar y clasificar claramente los recursos de Azure.
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
10.3: Prueba de los procedimientos de respuesta de seguridad
Guía : Realice ejercicios para probar las capacidades de respuesta a los incidentes de los sistemas con regularidad.
Identifique puntos débiles y brechas y revise el plan según sea necesario.
Consulte la publicación de NIST: Guía para probar, entrenar y ejecutar programas para planes y funcionalidades
de TI
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
10.4: Provisión de detalles de contacto de incidentes de seguridad y configuración de notificaciones de alerta
para incidentes de seguridad
Guía : La información de contacto del incidente de seguridad la utilizará Microsoft para ponerse en contacto con
usted si Microsoft Security Response Center (MSRC) detecta que un tercero no autorizado o ilegal ha accedido a
los datos del cliente. Revise los incidentes después del hecho para asegurarse de que se resuelven los problemas.
Establecimiento del contacto de seguridad de Azure Security Center
Super visión de Azure Security Center : Sí
Responsabilidad : Customer
10.5: Incorporación de alertas de seguridad en el sistema de respuesta a incidentes
Instrucciones : Exporte sus alertas y recomendaciones de Azure Security Center mediante la característica de
exportación continua. La exportación continua le permite exportar alertas y recomendaciones de forma manual o
continua. Puede usar el conector de datos de Azure Security Center para transmitir las alertas a Sentinel.
Configuración de la exportación continua
Transmisión de alertas a Azure Sentinel
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer
10.6: Automatización de la respuesta a las alertas de seguridad
Instrucciones : use la característica de automatización del flujo de trabajo de Azure Security Center para
desencadenar automáticamente respuestas mediante "Logic Apps" en las alertas y recomendaciones de seguridad.
Configuración de la automatización de flujo de trabajo y Logic Apps
Super visión de Azure Security Center : No aplicable
Responsabilidad : Customer

Pruebas de penetración y ejercicios del equipo rojo


Para más información, consulte Control de seguridad: Pruebas de penetración y ejercicios del equipo rojo.
11.1: Realice pruebas de penetración periódicas de los recursos de Azure y asegúrese de corregir todos los
resultados de seguridad críticos en un plazo de 60 días
Instrucciones : Siga las reglas de compromiso de Microsoft para asegurarse de que las pruebas de penetración no
infrinjan las directivas de Microsoft. Use la estrategia de Microsoft y la ejecución de pruebas de penetración de
sitios activos y ataques simulados en la infraestructura en la nube, los servicios y las aplicaciones administrados
por Microsoft.
Reglas de interacción de las pruebas de penetración
Equipo rojo de Microsoft Cloud
Super visión de Azure Security Center : No aplicable
Responsabilidad : Compartido

Pasos siguientes
Consulte la prueba comparativa de seguridad de Azure.
Obtenga más información sobre las líneas de base de seguridad de Azure.
Consideraciones de seguridad para Azure Container
Instances
23/07/2020 • 22 minutes to read • Edit Online

En este artículo se presentan las consideraciones de seguridad para usar Azure Container Instances para ejecutar
aplicaciones de contenedor. Contenido de los temas:
Recomendaciones de seguridad para administrar imágenes y secretos de Azure Container Instances
Consideraciones para el ecosistema de contenedores durante el ciclo de vida de un contenedor, para
cualquier plataforma de contenedores
Para consultar recomendaciones completas que le sirvan de ayuda a mejorar la posición de seguridad de una
implementación, consulte la Base de referencia de seguridad de Azure para Container Instances.

Recomendaciones de seguridad para Azure Container Instances


Uso de un registro privado
Los contenedores se crean a partir de imágenes que están almacenadas en uno o varios repositorios. Estos
repositorios pueden pertenecer a un registro público, como Docker Hub, o en un registro privado. Un ejemplo de
un registro privado es el Registro de confianza de Docker, que puede instalarse de forma local o en una nube
privada virtual. También puede usar servicios de registro privado de contenedores basados en la nube, incluido
Azure Container Registry.
Una imagen de contenedor disponible públicamente no garantiza la seguridad. Las imágenes de contenedor
constan de varias capas de software, y cada capa de software podría tener vulnerabilidades. Para ayudar a reducir
la amenaza de ataques, debe almacenar y recuperar las imágenes de un registro privado, como Azure Container
Registry o Docker Trusted Registry. Además de proporcionar un registro privado administrado, Azure Container
Registry admite autenticación basada en la entidad de servicio a través de Azure Active Directory para los flujos
de autenticación básica. Esta autenticación incluye el acceso basado en roles para permisos de solo lectura
(extracción), escritura (inserción) y otros.
Supervisar y analizar las imágenes de contenedor
Aproveche las soluciones para analizar imágenes de contenedor en un registro privado e identificar posibles
puntos vulnerables. Es importante comprender el nivel de detalles de la detección de amenazas que
proporcionan las distintas soluciones.
Por ejemplo, Azure Container Registry ofrece la opción de integrarlo con Azure Security Center para analizar
automáticamente todas las imágenes de Linux insertadas en un registro. El analizador Qualys integrado de Azure
Security Center detecta puntos vulnerables en las imágenes, las clasifica y proporciona una guía de corrección.
En Azure Marketplace hay disponibles soluciones de supervisión de seguridad y análisis de imágenes, como
Twistlock y Aqua Security.
Proteger las credenciales
Los contenedores pueden abarcar varios clústeres y regiones de Azure. Por lo tanto, debe proteger las
credenciales necesarias para los inicios de sesión o el acceso a las API, como contraseñas o tokens. Asegúrese de
que solo los usuarios con privilegios puedan acceder a esos contenedores en tránsito y en reposo. Haga un
inventario de todos los secretos de credenciales y, luego, pida a los desarrolladores que usen las nuevas
herramientas de administración de secretos que están diseñadas para plataformas de contenedores. Asegúrese de
que la solución incluya bases de datos cifradas, cifrado TLS para datos de los datos de secretos en tránsito y
control de acceso basado en rol con privilegios mínimos. Azure Key Vault es un servicio en la nube que protege
las claves de cifrado y los secretos (como certificados, cadenas de conexión y contraseñas) de las aplicaciones en
contenedores. Dado que estos datos son confidenciales y críticos para la empresa, proteja el acceso a los
almacenes de claves, de modo que solo las aplicaciones y los usuarios autorizados puedan acceder a ellos.

Consideraciones para el ecosistema de contenedores


Las siguientes medidas de seguridad, implementas correctamente y administradas de forma eficaz, pueden
ayudar a asegurar y proteger su ecosistema de contenedores. Estas medidas se aplican en todo el ciclo de vida
del contenedor, desde el desarrollo hasta la implementación en producción, y en una gama de plataformas, hosts
y orquestadores de contenedores.
Usar la administración de vulnerabilidades como parte de su ciclo de vida de desarrollo de contenedores
Al usar una administración de vulnerabilidades eficaz a lo largo del ciclo de vida de desarrollo de los
contenedores, mejora las probabilidades de detectar y resolver problemas de seguridad antes de que sean un
problema más grave.
Análisis de vulnerabilidades
Todo el tiempo se descubren nuevas vulnerabilidades, por lo que el análisis y la identificación de vulnerabilidades
es un proceso continuo. Incorpore el análisis de vulnerabilidades a lo largo del ciclo de vida de los contenedores:
Como comprobación final en la canalización de desarrollo, debe realizar un análisis de vulnerabilidades en los
contenedores antes de insertar las imágenes en un registro público o privado.
Continúe analizando imágenes de contenedor en el registro tanto para identificar cualquier error que pueda
haberse pasado durante el desarrollo como para abordar las vulnerabilidades descubiertas recientemente que
puedan existir en el código usado en las imágenes de contenedores.
Asignar vulnerabilidades de imágenes a contenedores en ejecución
Debe tener un medio para asignar las vulnerabilidades identificadas en las imágenes de contenedor a los
contenedores en ejecución, de modo que los problemas de seguridad puedan mitigarse.
Asegurarse de que solo se usen imágenes aprobadas en su entorno
Existen suficientes cambios y volatilidad en un ecosistema de contenedores sin que se permitan, además,
contenedores desconocidos. Permita solo imágenes de contenedor aprobadas. Ponga en práctica herramientas y
procesos para supervisar y evitar el uso de imágenes de contenedor no aprobadas.
Una forma eficaz de reducir la superficie de ataque e impedir que los desarrolladores cometan errores de
seguridad críticos consiste en controlar el flujo de imágenes de contenedor en el entorno de desarrollo. Por
ejemplo, podría autorizar una única distribución de Linux como imagen de base, preferiblemente una que sea
eficiente (Alpine o CoreOS, en lugar de Ubuntu), para minimizar la superficie de ataques potenciales.
La firma o creación de huellas digitales para imágenes puede generar una cadena de custodia que le permita
verificar la integridad de los contenedores. Por ejemplo, Azure Container Registry es compatible con el modelo de
contenido confianza de Docker, que permite a los editores de imágenes firmar las imágenes que se insertan en un
registro, y a los consumidores de imágenes extraer solo imágenes firmadas.
Permitir solo registros aprobados
Una extensión para garantizar que su entorno use solo las imágenes aprobadas radica en permitir únicamente el
uso de los registros de contenedor aprobados. Requerir el uso de registros de contenedor aprobados reduce la
exposición a riesgos, ya que se limita la posibilidad de que se introduzcan vulnerabilidades o problemas de
seguridad desconocidos.
Garantizar la integridad de las imágenes a lo largo del ciclo de vida
Parte de la administración de la seguridad a lo largo del ciclo de vida del contenedor es garantizar la integridad
de las imágenes de contenedor en el registro, así como en la medida en que se modifican o implementan en
producción.
No debe permitirse que imágenes con vulnerabilidades, aunque sean menores, se ejecuten en un entorno
de producción. Lo ideal es que todas las imágenes implementadas en producción se guarden en un
registro privado donde solo algunas personas tengan acceso. Mantenga un número pequeño de imágenes
de producción para asegurarse de que se puedan administrar eficazmente.
Dado que es difícil identificar el origen del software desde una imagen de contenedor disponible
públicamente, cree imágenes desde la fuente para garantizar el conocimiento del origen de la capa.
Cuando surge una vulnerabilidad en una imagen de contenedor generada automáticamente, los clientes
pueden encontrar una ruta más rápida a una resolución. Con una imagen pública, los clientes tendrían que
encontrar la raíz de una imagen pública para corregirla u obtener otra imagen segura del publicador.
No se garantiza que una imagen digitalizada exhaustivamente implementada en producción esté
actualizada durante la vigencia de la aplicación. Se puede informar de las vulnerabilidades de seguridad
para las capas de la imagen que no se conocían anteriormente o que se introdujeron después de la
implementación de producción.
Haga auditorías periódicas de imágenes implementadas en producción para identificar las imágenes que
no están al día o que no se han actualizado en un tiempo. Puede usar metodologías de implementación de
verde-azul y activar mecanismos de actualización para actualizar las imágenes de contenedor sin tiempo
de inactividad. Puede analizar las imágenes con las herramientas descritas en la sección anterior.
Use una canalización de integración continua (CI) con análisis de seguridad integrada para crear imágenes
seguras e insertarlas en su registro privado. El análisis de vulnerabilidad creado en la solución de CI
garantiza que las imágenes que pasan todas las pruebas se incluyan en el registro privado desde el que se
implementan las cargas de trabajo de producción.
Un error de canalización de CI garantiza que las imágenes vulnerables no se incluyan en el registro
privado usado para las implementaciones de cargas de trabajo de producción. También automatiza el
análisis de seguridad de imágenes si hay un número significativo de imágenes. De lo contrario, auditar las
imágenes manualmente para buscar vulnerabilidades de seguridad puede ser bastante lento y estar
propenso a errores.
Exigir privilegios mínimos en tiempo de ejecución
El concepto de privilegios mínimos es una práctica recomendada de seguridad básica que también se aplica a los
contenedores. Cuando se aprovecha una vulnerabilidad, en general da al atacante acceso y privilegios iguales a
los de la aplicación o proceso en peligro. Asegurarse de que los contenedores funcionen con privilegios mínimos
y acceso requerido para realizar el trabajo reduce la exposición a riesgos.
Reducir la superficie de ataque a contenedores mediante la eliminación de privilegios innecesarios
También puede minimizar la superficie potencial de ataque al eliminar del tiempo de ejecución del contenedor los
procesos o privilegios innecesarios o sin usar. Los contenedores con privilegios se ejecutan como raíz. Si un
usuario o una carga de trabajo malintencionados se cuela en un contenedor con privilegios, el contenedor se
ejecutará como raíz en el sistema.
Preaprobación de archivos y ejecutables a los que el contenedor puede acceder o que este puede ejecutar
Reducir el número de variables o valores desconocidos le ayuda a mantener un entorno estable y confiable.
Limitar los contenedores para que puedan solo acceder a archivos o ejecutables incluidos en una lista segura o
para que puedan ejecutarlos es un método demostrado de limitar la exposición a riesgos.
Es mucho más fácil administrar una lista segura cuando se implementa desde un principio. Una lista segura
proporciona una medida de control y capacidad de administración a medida que aprende qué archivos y
ejecutables son necesarios para que la aplicación funcione correctamente.
Una lista segura no solo reduce la superficie expuesta a ataques, sino que puede también proporcionar una línea
de base para encontrar anomalías y evitar los casos de uso de los escenarios de "vecino ruidoso" y división de
contenedores.
Aplicar la segmentación de la red en contenedores en ejecución
Para ayudar a proteger los contenedores en una subred frente a los riesgos de seguridad de otra subred,
mantenga la segmentación de la red (o nanosegmentación) o segregación entre contenedores en ejecución.
También puede ser necesario mantener la segmentación de red para usar contenedores en sectores que deben
cumplir exigencias de cumplimiento.
Por ejemplo, la herramienta de partner Aqua proporciona un enfoque automatizado para la nanosegmentación.
Aqua supervisa las actividades de red de los contenedores en tiempo de ejecución. Identifica todas las conexiones
de red entrantes y salientes hacia y desde otros contenedores, servicios, direcciones IP e Internet pública. La
nanosegmentación se crea automáticamente en función del tráfico supervisado.
Supervisar la actividad de los contenedores y el acceso de los usuarios
Al igual que con cualquier entorno de TI, debe supervisar constantemente la actividad y el acceso de los usuario
al ecosistema de contenedores para identificar rápidamente cualquier actividad sospechosa o malintencionada.
Azure proporciona soluciones de supervisión de contenedores, entre otras:
Azure Monitor para contenedores para supervisar el rendimiento de las cargas de trabajo implementadas
en entornos de Kubernetes hospedados en Azure Kubernetes Service (AKS). Azure Monitor para
contenedores le brinda la posibilidad de visibilizar el rendimiento mediante la recopilación de métricas del
procesador y de la memoria de los controladores, nodos y contenedores disponibles en Kubernetes
mediante la API de métricas.
La solución de supervisión de contenedores en Azure le ayuda a ver y administrar otros hosts de
contenedores de Docker y Windows en una sola ubicación. Por ejemplo:
Ver información de auditoría detallada que muestre los comandos usados con los contenedores.
Solucionar los problemas de los contenedores al ver y buscar registros centralizados sin tener que ver
los hosts de Docker o Windows de forma remota.
Buscar los contenedores que puedan causar ruido o consuman un exceso de recursos en un host.
Ver la información centralizada acerca de la CPU, la memoria, el almacenamiento, y el uso y el
rendimiento de la red en relación con los contenedores.
La solución admite orquestadores de contenedores como Docker Swarm, DC/OS, Kubernetes no
administrado, Service Fabric y Red Hat OpenShift.
Supervisar la actividad de recursos de contenedor
Supervise la actividad de los recursos, como archivos, red y otros recursos, a los que acceden los contenedores.
Supervisar el consumo y la actividad de los recursos resulta útil para la supervisión de rendimiento y como
medida de seguridad.
Azure Monitor habilita la supervisión básica del servicio de Azure al permitir la recopilación de métricas, registros
de actividad y registros de diagnóstico. Por ejemplo, el registro de actividad le indica cuándo se crean o modifican
los recursos.
Se encuentran disponibles métricas que ofrecen estadísticas de rendimiento de diferentes recursos e incluso del
sistema operativo de una máquina virtual. Puede ver estos datos con uno de los exploradores en Azure Portal y
crear alertas basadas en estas métricas. Azure Monitor ofrece la canalización de métricas más rápida (desde 5
minutos hasta 1 minuto), por lo que debe usarse para las notificaciones y alertas donde el tiempo es
fundamental.
Registrar todos los accesos administrativos de usuarios al contenedor para auditoría
Mantenga un registro de auditoría preciso del acceso administrativo a su ecosistema de contenedores, incluido el
clúster de Kubernetes, el registro de contenedores y las imágenes de contenedor. Estos registros podrían ser
necesarios para fines de auditoría y serán útiles como prueba forense después de un incidente de seguridad. Las
soluciones de Azure incluyen:
Integración de Azure Kubernetes Service con Azure Security Center para supervisar la configuración de
seguridad del entorno del clúster y generar recomendaciones de seguridad
Solución de supervisión de contenedores de Azure
Registros de recurso para Azure Container Instances y Azure Container Registry

Pasos siguientes
Consulte en la Base de referencia de seguridad de Azure para Container Instances recomendaciones
completas que le servirán para mejorar la posición de seguridad de su implementación.
Más información sobre el uso de Azure Security Center para la detección de amenazas en tiempo real en
los entornos en contenedores.
Más información sobre cómo administrar las vulnerabilidades de contenedor con las soluciones Twistlock
y Aqua Security.
Escenarios y recursos de red virtual
23/07/2020 • 8 minutes to read • Edit Online

Azure Virtual Network proporciona acceso de red seguro y privado a los recursos locales y de Azure. Al
implementar grupos de contenedores en una red virtual de Azure, los contenedores pueden comunicarse de
forma segura con otros recursos de la red virtual.
Este artículo proporciona información general sobre escenarios, limitaciones y recursos de red virtual. Puede
encontrar ejemplos de implementación mediante la CLI de Azure en Implementación de instancias de contenedor
en una red virtual de Azure.

Escenarios
Los grupos de contenedores implementados en una red virtual de Azure permiten escenarios como:
Comunicación directa entre grupos de contenedores en la misma subred
Enviar la salida de la carga de trabajo basada en tareas procedente de las instancias de contenedor a una base
de datos en la red virtual
Recuperar contenido de las instancias de contenedor desde un punto de conexión de servicio en la red virtual
Comunicación del contenedor con los recursos locales mediante una puerta de enlace VPN o ExpressRoute
Integración con Azure Firewall para identificar el tráfico saliente que se origina en el contenedor
Resolución de nombres mediante Azure DNS interno para la comunicación con los recursos de Azure de la red
virtual, como las máquinas virtuales
Uso de reglas de grupo de seguridad de red para controlar el acceso a las subredes o a otros recursos de red

Escenarios de red avanzados no admitidos


Azure Load Balancer : no se admite la colocación de Azure Load Balancer al principio de las instancias de
contenedor en un grupo de contenedores en red
Emparejamiento de redes vir tuales globales : no se admite el emparejamiento global (conexión de redes
virtuales entre regiones de Azure).
Etiqueta de dirección IP o DNS pública : los grupos de contenedores implementados en una red virtual no
son compatibles actualmente con la exposición directa en Internet de contenedores con una dirección IP
pública o un nombre de dominio completo.

Otras limitaciones
Actualmente, solo se admiten contenedores de Linux en un grupo de contenedores implementado en una red
virtual.
Para implementar grupos de contenedores en una subred, la subred no puede contener otros tipos de recursos.
Quite todos los recursos existentes de una subred existente antes de implementar grupos de contenedores en
ella o crear una nueva subred.
No puede usar una identidad administrada en un grupo de contenedores implementado en una red virtual.
No puede habilitar un sondeo de ejecución o un sondeo de preparación en un grupo de contenedores
implementado en una red virtual.
Debido a los recursos de red adicionales que intervienen, las implementaciones en una red virtual suelen ser
más lentas que las de una instancia de contenedor estándar.
Lugar de implementación
Las regiones y los recursos máximos siguientes están disponibles para implementar un grupo de contenedores en
una red virtual de Azure.
Regiones y disponibilidad de recursos
M EM O RIA M Á XIM A A L M A C EN A M IEN TO
REGIO N S SO USO M Á XIM O DE C P U ( GB ) ( GB )

Este de Australia, Linux 4 16 50


Centro de Canadá,
Centro de EE. UU.,
Este de EE. UU. 2,
Europa del Norte,
Centro-sur de
EE. UU., Sudeste de
Asia, Oeste de
Europa, Oeste de
EE. UU. 2

Japón Oriental Linux 2 8 50

Centro y norte de Linux 2 3,5 50


EE. UU., Sur de la
India, Oeste de
EE. UU.

Recursos de red necesarios


Hay tres recursos de Azure Virtual Network necesarios para implementar grupos de contenedores en una red
virtual: la propia red virtual, una subred delegada dentro de la red virtual y un perfil de red.
Virtual network
Una red virtual define el espacio de direcciones en el que crear una o varias subredes. A continuación, implemente
los recursos de Azure (por ejemplo, los grupos de contenedores) en las subredes de la red virtual.
Subred (delegada)
Las subredes segmentan la red virtual en espacios de direcciones independientes utilizables por los recursos de
Azure que coloque en ellos. Crea una o varias subredes dentro de una red virtual.
La subred que usó para los grupos de contenedores puede contener solo grupos de contenedores. Cuando
implementa por primera vez un grupo de contenedores en una subred, Azure delega esa subred para Azure
Container Instances. Una vez delegada, la subred se puede usar solo para grupos de contenedores. Si intenta
implementar recursos distintos de grupos de contenedores en una subred delegada, se produce un error en la
operación.
Perfil de red
Un perfil de red es una plantilla de configuración de red para los recursos de Azure. Especifica determinadas
propiedades de red para el recurso, por ejemplo, la subred en la que debe implementarse. La primera vez que usa
el comando az container create para implementar un grupo de contenedores en una subred (y, por tanto, en una
red virtual), Azure crea un perfil de red para usted. A continuación, puede usar ese perfil de red para
implementaciones futuras en la subred.
Para usar una plantilla de Resource Manager, el archivo YAML o un método de programación para implementar un
grupo de contenedores en una subred, deberá proporcionar el identificador de recurso de Resource Manager
completo de un perfil de red. Puede usar un perfil que creó previamente mediante az container create o bien crear
un perfil mediante una plantilla de Resource Manager (consulte el ejemplo de plantilla y la referencia). Para
obtener el identificador de un perfil creado anteriormente, use el comando az network profile list.
En el diagrama siguiente, se han implementado varios grupos de contenedores en una subred delegada en Azure
Container Instances. Una vez implementado un grupo de contenedores en una subred, puede implementar grupos
de contenedores adicionales en él si especifica el mismo perfil de red.

Pasos siguientes
Puede encontrar ejemplos de implementación mediante la CLI de Azure en Implementación de instancias de
contenedor en una red virtual de Azure.
Para implementar una nueva red virtual, subred, perfil de red y grupo de contenedores mediante una plantilla
de Resource Manager, consulte el artículo sobre la creación de un grupo de contenedores de Azure con VNet.
Implementación de instancias de contenedor en
una red virtual de Azure
23/07/2020 • 13 minutes to read • Edit Online

Azure Virtual Network proporciona acceso de red seguro y privado a los recursos locales y de Azure. Al
implementar grupos de contenedores en una red virtual de Azure, los contenedores pueden comunicarse de
forma segura con otros recursos de la red virtual.
En este artículo se muestra cómo usar el comando az container create en la CLI de Azure para implementar
grupos de contenedores en una red virtual nueva o existente.
Para conocer los escenarios y las limitaciones de red, consulte Escenarios y recursos de redes virtuales para
Azure Container Instances.

IMPORTANT
La implementación del grupo de contenedores en una red virtual está disponible con carácter general para
contenedores de Linux en la mayoría de las regiones donde Azure Container Instances está disponible. Para obtener
más información, consulte Regiones y disponibilidad de recursos.

Los ejemplos que aparecen en este artículo están formateados para el shell de Bash. Si prefiere otro shell
como PowerShell o el símbolo del sistema, ajuste los caracteres de continuación de línea según corresponda.

Implementación en una nueva red virtual


Para implementarlos en una nueva red virtual y hacer que Azure cree automáticamente los recursos de red,
especifique lo siguiente al ejecutar az container create:
Nombre de la red virtual
Prefijo de dirección de red virtual en formato CIDR
Nombre de subred
Prefijo de dirección de subred en formato CIDR
Los prefijos de direcciones de subred y red virtual especifican los espacios de direcciones para la subred y la
red virtual, respectivamente. Estos valores se representan en notación de Enrutamiento de interdominios sin
clases (CIDR), por ejemplo 10.0.0.0/16 . Para más información sobre cómo trabajar con las subredes,
consulte Incorporación, cambio o eliminación de una subred de red virtual.
Cuando haya implementado el primer grupo de contenedores con este método, puede implementarlo en la
misma subred; para ello, especifique los nombres de la red virtual y la subred, o el perfil de red que Azure
crea automáticamente para usted. Dado que Azure delega la subred en Azure Container Instances, solo puede
implementar grupos de contenedores en la subred.
Ejemplo
El comando az container create siguiente especifica valores para una nueva red virtual y una subred.
Proporcione el nombre de un grupo de recursos creado en una región en la que haya disponibles
implementaciones de grupo de contenedores en una red virtual. Este comando implementa el contenedor
aci-helloworld público de Microsoft que ejecuta un pequeño servidor web de Node.js que sirve una página
web estática. En la siguiente sección, implementará un segundo grupo de contenedores en la misma subred y
probará la comunicación entre las dos instancias de contenedor.
az container create \
--name appcontainer \
--resource-group myResourceGroup \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet aci-vnet \
--vnet-address-prefix 10.0.0.0/16 \
--subnet aci-subnet \
--subnet-address-prefix 10.0.0.0/24

Al implementar en una nueva red virtual mediante este método, la implementación puede tardar unos
minutos mientras se crean los recursos de red. Tras la implementación inicial, las implementaciones de
grupos de contenedores adicionales en la misma subred se completan más rápido.

Implementación en una red virtual existente


Para implementar un grupo de contenedores en una red virtual existente:
1. Cree una subred en la red virtual existente, use una subred existente en la que ya se haya implementado
un grupo de contenedores, o bien use una subred existente vacía de todos los demás recursos
2. Implemente un grupo de contenedores con az container create y especifique uno de los siguientes:
Nombre de red virtual y nombre de subred
El identificador de recurso de red virtual y el identificador de recurso de subred, lo permite usar
una red virtual desde otro grupo de recursos
El identificador o el nombre del perfil de red, que puede obtener mediante el comando az network
profile list
Ejemplo
En el ejemplo siguiente se implementa un segundo grupo de contenedores en la misma subred creada
anteriormente y se comprueba la comunicación entre las dos instancias de contenedor.
En primer lugar, obtenga la dirección IP del primer grupo de contenedores que implementó, appcontainer:

az container show --resource-group myResourceGroup \


--name appcontainer \
--query ipAddress.ip --output tsv

La salida muestra la dirección IP del grupo de contenedores en la subred privada. Por ejemplo:

10.0.0.4

Ahora, establezca CONTAINER_GROUP_IP en la dirección IP que recuperó con el comando az container show y
ejecute el siguiente comando az container create . Este segundo contenedor, commchecker, ejecuta una
imagen basada en Linux de Alpine y wget con la dirección IP de la subred privada del primer grupo de
contenedores.
CONTAINER_GROUP_IP=<container-group-IP-address>

az container create \
--resource-group myResourceGroup \
--name commchecker \
--image alpine:3.5 \
--command-line "wget $CONTAINER_GROUP_IP" \
--restart-policy never \
--vnet aci-vnet \
--subnet aci-subnet

Una vez completada esta segunda implementación de contenedor, extraiga sus registros para que pueda ver
la salida del comando wget que ejecutó:

az container logs --resource-group myResourceGroup --name commchecker

Si el segundo contenedor se comunicó correctamente con el primero, la salida es similar a la siguiente:

Connecting to 10.0.0.4 (10.0.0.4:80)


index.html 100% |*******************************| 1663 0:00:00 ETA

La salida del registro debe mostrar que wget fue capaz de conectarse y descargar el archivo de índice del
primer contenedor usando su dirección IP privada en la subred local. El tráfico de red entre los dos grupos de
contenedores permanece dentro de la red virtual.
Ejemplo: YAML
También puede implementar un grupo de contenedores en una red virtual existente mediante un archivo
YAML, una plantilla de Resource Manager u otro método de programación como con el SDK de Python.
Por ejemplo, si usa un archivo YAML, puede realizar la implementación en una red virtual con una subred
delegada en Azure Container Instances. Especifique las propiedades siguientes:
ipAddress : la configuración de direcciones IP privadas para el grupo de contenedores.
ports : los puertos que deben abrirse, si hay alguno.
protocol : el protocolo (TCP o UDP) para el puerto abierto.
networkProfile : configuración de red para la red virtual y la subred.
id : el identificador de recurso del Administrador de recursos completo de networkProfile .

Para obtener el identificador del perfil de red, ejecute el comando az network profile list y especifique el
nombre del grupo de recursos que contiene la red virtual y la subred delegada.

az network profile list --resource-group myResourceGroup \


--query [0].id --output tsv

Salida del ejemplo:

/subscriptions/<Subscription
ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-
vnet-aci-subnet

Una vez que tenga el identificador del perfil de red, copie el siguiente YAML en un nuevo archivo denominado
vnet-deploy-aci.yaml. En networkProfile , reemplace el valor de id con el identificador recién recuperado y,
después, guarde el archivo. Este YAML crea un grupo de contenedores denominado appcontaineryaml en la
red virtual.

apiVersion: '2019-12-01'
location: westus
name: appcontaineryaml
properties:
containers:
- name: appcontaineryaml
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- port: 80
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
ipAddress:
type: Private
ports:
- protocol: tcp
port: '80'
networkProfile:
id: /subscriptions/<Subscription
ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-
vnet-subnet
osType: Linux
restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Implemente el grupo de contenedores con el comando az container create y especifique el nombre del
archivo YAML para el parámetro --file :

az container create --resource-group myResourceGroup \


--file vnet-deploy-aci.yaml

Una vez completada la implementación, ejecute el comando az container show para mostrar su estado. Salida
del ejemplo:

Name ResourceGroup Status Image IP:ports


Network CPU/Memory OsType Location
---------------- --------------- -------- ------------------------------------------ ----------- ---
------ --------------- -------- ----------
appcontaineryaml myResourceGroup Running mcr.microsoft.com/azuredocs/aci-helloworld 10.0.0.5:80
Private 1.0 core/1.5 gb Linux westus

Limpieza de recursos
Eliminación de instancias de contenedor
Cuando termine de trabajar con las instancias de contenedor que creó, elimínelas con los siguientes
comandos:

az container delete --resource-group myResourceGroup --name appcontainer -y


az container delete --resource-group myResourceGroup --name commchecker -y
az container delete --resource-group myResourceGroup --name appcontaineryaml -y

Eliminación de recursos de red


Actualmente, esta característica necesita varios comandos adicionales para eliminar los recursos de red que
ha creado antes. Si ha usado los comandos de ejemplo en las secciones anteriores de este artículo para crear
la red virtual y la subred, puede usar el siguiente script para eliminar esos recursos de red. El script
presupone que el grupo de recursos contiene una sola red virtual con un único perfil de red.
Antes de ejecutar el script, establezca la variable RES_GROUP en el nombre del grupo de recursos que
contenga la red virtual y la subred que se deben eliminar. Actualice el nombre de la red virtual si no usó el
nombre aci-vnet que se sugirió anteriormente. El script tiene el formato adecuado para el shell de Bash. Si
prefiere otro shell como PowerShell o el símbolo del sistema, deberá ajustar los descriptores de acceso y la
asignación de variables según corresponda.

WARNING
Este script elimina los recursos. Elimina la red virtual y todas las subredes que contiene. Asegúrese de que ya no
necesita ninguno de los recursos en la red virtual, incluidas las subredes que contiene, antes de ejecutar este script.
Una vez eliminado, estos recursos son irrecuperables .

# Replace <my-resource-group> with the name of your resource group


# Assumes one virtual network in resource group
RES_GROUP=<my-resource-group>

# Get network profile ID


# Assumes one profile in virtual network
NETWORK_PROFILE_ID=$(az network profile list --resource-group $RES_GROUP --query [0].id --output tsv)

# Delete the network profile


az network profile delete --id $NETWORK_PROFILE_ID -y

# Delete virtual network


az network vnet delete --resource-group $RES_GROUP --name aci-vnet

Pasos siguientes
Para implementar una nueva red virtual, subred, perfil de red y grupo de contenedores mediante una
plantilla de Resource Manager, consulte el artículo sobre la creación de un grupo de contenedores de Azure
con VNet.
Implementación en Azure Container Instances desde
Azure Container Registry
23/07/2020 • 11 minutes to read • Edit Online

Azure Container Registry es un servicio de registro de contenedores administrado basado en Azure que se usa para
almacenar imágenes de contenedor de Docker privadas. En este artículo se describe cómo extraer imágenes de
contenedor almacenadas en una instancia de Azure Container Registry al implementarlas en Azure Container
Instances. Un método recomendado para configurar el acceso al registro consiste en crear una entidad de servicio y
una contraseña de Azure Active Directory, así como almacenar las credenciales de inicio de sesión en Azure Key
Vault.

Prerrequisitos
Azure Container Registr y : se necesita una instancia de Azure Container Registry, y al menos una imagen de
contenedor en el registro, para completar los pasos descritos en este artículo. Si necesita un registro, consulte
Creación de un registro de contenedor con la CLI de Azure.
CLI de Azure : los ejemplos de línea de comandos de este artículo usan la CLI de Azure y tienen un formato
adecuado para el shell de Bash. Puede instalar la CLI de Azure localmente o usar Azure Cloud Shell.

Configurar la autenticación del registro


En un escenario de producción donde se brinda acceso a servicios y aplicaciones "sin periféricos", se recomienda
configurar el acceso al registro mediante una entidad de servicio. Una entidad de servicio permite proporcionar
control de acceso basado en rol a las imágenes de contenedor. Por ejemplo, puede configurar una entidad de
servicio con acceso de solo extracción a un registro.
Azure Container Registry ofrece opciones de autenticación adicionales.

NOTE
No se puede autenticar en Azure Container Registry para extraer imágenes durante la implementación del grupo de
contenedores mediante una identidad administrada configurada en el mismo grupo de contenedores.

En la siguiente sección, cree un almacén de claves de Azure y una entidad de servicio, y almacene las credenciales
de la entidad de servicio en el almacén.
Creación del almacén de claves
Si todavía no tiene un almacén en Azure Key Vault, cree uno con la CLI de Azure mediante los siguientes comandos.
Actualice la variable RES_GROUP con el nombre de un grupo de recursos existente en el que crear el almacén de
claves, y la variable ACR_NAME con el nombre de su registro de contenedor. Para abreviar, los comandos de este
artículo suponen que el registro, el almacén de claves y las instancias de contenedor se han creado en el mismo
grupo de recursos.
Especifique un nombre para el nuevo almacén de claves en AKV_NAME . El nombre del almacén debe ser exclusivo en
Azure, tener entre 3 y 24 caracteres alfanuméricos, comenzar con una letra y terminar con una letra o un número y
no puede contener guiones consecutivos.
RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry # Azure Container Registry registry name
AKV_NAME=mykeyvault # Azure Key Vault vault name

az keyvault create -g $RES_GROUP -n $AKV_NAME

Creación de la entidad de servicio y almacenamiento de credenciales


Ahora cree una entidad de servicio y almacene sus credenciales en el almacén de claves.
El siguiente comando usa az ad sp create-for-rbac para crear la entidad de servicio y az keyvault secret set para
almacenar la contraseña de la entidad de servicio en el almacén.

# Create service principal, store its password in vault (the registry *password*)
az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-pwd \
--value $(az ad sp create-for-rbac \
--name http://$ACR_NAME-pull \
--scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
--role acrpull \
--query password \
--output tsv)

El argumento --role en el comando anterior configura la entidad de servicio con el rol acrpull, que le concede de
solo extracción acceso al registro. Para conceder acceso de inserción y extracción, cambie el argumento --role a
acrpush.
A continuación, almacene el appId de la entidad de servicio en el almacén, que es el nombre de usuario que pasa
a Azure Container Registry para la autenticación.

# Store service principal ID in vault (the registry *username*)


az keyvault secret set \
--vault-name $AKV_NAME \
--name $ACR_NAME-pull-usr \
--value $(az ad sp show --id http://$ACR_NAME-pull --query appId --output tsv)

Ha creado una instancia de Azure Key Vault y almacenado dos secretos allí:
$ACR_NAME-pull-usr : el identificador de la entidad de servicio, para su uso como nombre de usuario del
registro de contenedor.
$ACR_NAME-pull-pwd : la contraseña de la entidad de servicio, para su uso como contraseña del registro de
contenedor.
Ahora puede hacer referencia a estos secretos por nombre cuando usted o sus aplicaciones y servicios extraigan
imágenes del registro.

Implementación de un contenedor con la CLI de Azure


Ahora que las credenciales de la entidad de servicio están almacenadas en secretos de Azure Key Vault, las
aplicaciones y servicios pueden utilizarlas para acceder a su registro privado.
Obtenga primero el nombre del servidor de inicio de sesión del Registro con el comando az acr show. El nombre
del servidor de inicio de sesión se escribe todo en minúsculas y es similar a myregistry.azurecr.io .

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)
Ejecute el comando az container create siguiente para implementar una instancia de contenedor. El comando usa
las credenciales de la entidad de servicio almacenadas en Azure Key Vault para autenticarse en el registro de
contenedor y da por supuesto que ha insertado previamente la imagen aci-helloworld en el registro. Actualice el
valor --image si desea usar otra imagen del registro.

az container create \
--name aci-demo \
--resource-group $RES_GROUP \
--image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
--registry-login-server $ACR_LOGIN_SERVER \
--registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o
tsv) \
--registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o
tsv) \
--dns-name-label aci-demo-$RANDOM \
--query ipAddress.fqdn

El valor --dns-name-label debe ser único en Azure, por lo que el comando anterior anexa un número aleatorio a la
etiqueta de nombre DNS del contenedor. La salida del comando muestra el nombre de dominio completo (FQDN)
del contenedor, por ejemplo:

"aci-demo-25007.eastus.azurecontainer.io"

Una vez que se ha iniciado correctamente el contenedor, puede desplazarse a su FQDN en el explorador para
comprobar que la aplicación se ejecuta correctamente.

Implementación con plantillas de Azure Resource Manager


Puede especificar las propiedades de Azure Container Registry en una plantilla de Azure Resource Manager; para
ello, debe incluir la propiedad imageRegistryCredentials en la definición del grupo de contenedores. Por ejemplo,
puede especificar las credenciales del registro directamente:

[...]
"imageRegistryCredentials": [
{
"server": "imageRegistryLoginServer",
"username": "imageRegistryUsername",
"password": "imageRegistryPassword"
}
]
[...]

Para obtener la configuración de grupo de contenedores completa, consulte la referencia de plantillas de Resource
Manager.
Para más información acerca de cómo hacer referencia a secretos de Azure Key Vault en una plantilla de Resource
Manager, consulte Uso de Azure Key Vault para pasar el valor de parámetro seguro durante la implementación.

Implementación con Azure Portal


Si se mantienen imágenes de contenedor en un registro de contenedor de Azure, se puede crear fácilmente un
contenedor en Azure Container Instances a través de Azure Portal. Al usar el portal para implementar una instancia
de contenedor desde un registro de contenedor, tiene que habilitar la cuenta de administrador del registro. La
cuenta de administrador está diseñada para que un solo usuario acceda al registro, principalmente con fines de
prueba.
1. En Azure Portal, vaya al registro de contenedor.
2. Para confirmar que la cuenta de administrador está habilitada, seleccione Claves de acceso y en Usuario
administrador seleccione Habilitar .
3. Seleccione Repositorios , elija el repositorio desde el que va a implementar, haga clic con el botón derecho
en la etiqueta de la imagen de contenedor que desea implementar y seleccione Ejecutar instancia .

4. Escriba un nombre para el contenedor y un nombre para el grupo de recursos. También puede cambiar los
valores predeterminados si lo desea.
5. Una vez completada la implementación, puede ir al grupo de contenedores desde el panel de notificaciones
para buscar la dirección IP y otras propiedades.

Pasos siguientes
Para más información acerca de la autenticación de Azure Container Registry, consulte Autenticación con un
registro de contenedor de Azure.
Configuración de una acción de GitHub para crear
una instancia de contenedor
23/07/2020 • 14 minutes to read • Edit Online

Acciones de GitHub es un conjunto de características de GitHub para automatizar los flujos de trabajo de desarrollo
de software en el mismo lugar donde almacena el código y colabora en las solicitudes de incorporación de cambios
y problemas.
Utilice la acción de GitHub Deploy to Azure Container Instances para automatizar la implementación de un
contenedor en Azure Container Instances. La acción le permite establecer las propiedades de una instancia de
contenedor de manera similar a las del comando az container create.
En este artículo se muestra cómo configurar un flujo de trabajo en un repositorio de GitHub que realiza las
acciones siguientes:
Creación de una imagen desde Dockerfile
Inserción de la imagen en una instancia de Azure Container Registry
Implementación de la imagen de contenedor en una instancia de Azure Container Instance
En este artículo se muestran dos maneras de configurar el flujo de trabajo:
Configure un flujo de trabajo usted mismo en un repositorio de GitHub con la acción Deploy to Azure Container
Instances y otras acciones.
Utilice el comando az container app up en la extensión Implementar en Azure en la CLI de Azure. Este comando
simplifica la creación de un flujo de trabajo de GitHub y los pasos de implementación.

IMPORTANT
La acción de GitHub para Azure Container Instances está actualmente en versión preliminar. Las versiones preliminares están
a su disposición con la condición de que acepte los términos de uso adicionales. Es posible que algunos de los aspectos de
esta característica cambien antes de ofrecer disponibilidad general.

Prerrequisitos
Cuenta de GitHub : Cree una cuenta en https://github.com si aún no tiene una.
CLI de Azure : Para completar los pasos de la CLI de Azure, puede usar Azure Cloud Shell o una instalación local
de la CLI de Azure. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Registro de contenedor de Azure : Si no tiene uno, cree un registro de contenedor de Azure en el nivel Básico
mediante la CLI de Azure, Azure Portal u otros métodos. Tome nota del grupo de recursos que se utiliza para la
implementación, que se usa para el flujo de trabajo de GitHub.

Configuración del repositorio


Para ver los ejemplos de este artículo, utilice GitHub para bifurcar el siguiente repositorio:
https://github.com/Azure-Samples/acr-build-helloworld-node
Este repositorio contiene un Dockerfile y archivos de código fuente para crear una imagen de contenedor de
una pequeña aplicación web.
Asegúrese de Acciones esté habilitado para el repositorio. Navegue al repositorio bifurcado y seleccione
Configuración > Acciones . En Actions permissions (Permisos de acciones), asegúrese de que Enable
local and third par ty Actions for this repositor y (Habilitar Acciones locales y de terceros para este
repositorio) esté seleccionado.

Configuración de flujo de trabajo de GitHub


Creación de una entidad de servicio para la autenticación de Azure
En el flujo de trabajo de GitHub, debe proporcionar las credenciales de Azure para autenticarse en la CLI de Azure.
En el ejemplo siguiente se crea una entidad de servicio con el rol Colaborador limitado al grupo de recursos del
registro de contenedor.
En primer lugar, obtenga el identificador de recurso del grupo de recursos. Sustituya el nombre del grupo en el
siguiente comando az group show:

groupId=$(az group show \


--name <resource-group-name> \
--query id --output tsv)

Utilice az ad sp create-for-rbac para crear la entidad de servicio:

az ad sp create-for-rbac \
--scope $groupId \
--role Contributor \
--sdk-auth

La salida es parecida a esta:

{
"clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
"clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
"subscriptionId": "xxxx251c-xxxx-xxxx-xxxx-bf99a306xxxx",
"tenantId": "xxxx88bf-xxxx-xxxx-xxxx-2d7cd011xxxx",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}

Guarde la salida de JSON porque se usará en un paso posterior. Además, tome nota de clientId , que necesita para
actualizar la entidad de servicio en la sección siguiente.
Actualización de la entidad de servicio para la autenticación del registro
Actualice las credenciales de la entidad de servicio de Azure para habilitar los permisos de inserción y extracción en
el registro de contenedor. Este paso permite que el flujo de trabajo de GitHub utilice la entidad de servicio para
autenticarse en el registro de contenedor.
Obtenga el identificador de recurso del registro de contenedor. Sustituya el nombre del registro en el siguiente
comando az acr show:
registryId=$(az acr show \
--name <registry-name> \
--query id --output tsv)

Utilice az role assignment create para asignar el rol AcrPush, que proporciona acceso de inserción y extracción al
registro. Sustituya el id. de cliente de la entidad de servicio:

az role assignment create \


--assignee <ClientId> \
--scope $registryId \
--role AcrPush

Almacenamiento de las credenciales en el repositorio de GitHub


1. En la UI de GitHub, navegue al repositorio bifurcado y seleccione Configuración > Secretos .
2. Seleccione Add a new secret (Agregar un nuevo secreto) para agregar los siguientes secretos:

SEC RETO VA L UE

AZURE_CREDENTIALS Toda la salida JSON de la creación de la entidad de servicio

REGISTRY_LOGIN_SERVER Nombre del servidor de inicio de sesión del registro (todo en


minúsculas). Ejemplo: miregistro.azure.cr.io

REGISTRY_USERNAME clientId de la salida JSON de la creación de la entidad de


servicio

REGISTRY_PASSWORD clientSecret de la salida JSON de la creación de la entidad


de servicio

RESOURCE_GROUP Nombre del grupo de recursos que usó para limitar el ámbito
de la entidad de servicio

Creación del archivo de flujo de trabajo


1. En la UI de GitHub, seleccione Acciones > Nuevo flujo de trabajo .
2. Seleccione Set up a workflow yourself (Configurar un flujo de trabajo personalmente).
3. En Edit new file (Editar nuevo archivo), pegue el contenido de YAML siguiente para sobrescribir el código de
ejemplo. Acepte el nombre de archivo predeterminado main.yml o proporcione un nombre de archivo a su
elección.
4. Seleccione Star t commit (Iniciar confirmación) y, opcionalmente, proporcione descripciones breves y
ampliadas de la confirmación, y seleccione Commit new file (Confirmar nuevo archivo).
on: [push]
name: Linux_Container_Workflow

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@master

- name: 'Login via Azure CLI'


uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: 'Build and push image'


uses: azure/docker-login@v1
with:
login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

- name: 'Deploy to Azure Container Instances'


uses: 'azure/aci-deploy@v1'
with:
resource-group: ${{ secrets.RESOURCE_GROUP }}
dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
registry-username: ${{ secrets.REGISTRY_USERNAME }}
registry-password: ${{ secrets.REGISTRY_PASSWORD }}
name: aci-sampleapp
location: 'west us'

Validación del flujo de trabajo


Después de confirmar el archivo de flujo de trabajo, este se desencadena. Para revisar el progreso del flujo de
trabajo, vaya a Acciones > Flujos de trabajo .

Consulte Managing a workflow run para obtener información sobre cómo ver el estado y los resultados de cada
paso del flujo de trabajo.
Cuando se complete el flujo de trabajo, obtenga información sobre la instancia de contenedor denominada aci-
sampleapp mediante la ejecución del comando az container show. Sustituya el nombre del grupo de recursos:

az container show \
--resource-group <resource-group-name> \
--name aci-sampleapp \
--query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
--output table

La salida es parecida a esta:


FQDN ProvisioningState
--------------------------------- -------------------
aci-action01.westus.azurecontainer.io Succeeded

Una vez aprovisionada la instancia, navegue hasta el FQDN del contenedor en el explorador para ver la aplicación
web en ejecución.

Uso de la extensión Implementar en Azure


Como alternativa, utilice la extensión Implementar en Azure en la CLI de Azure para configurar el flujo de trabajo. El
comando az container app up de la extensión toma los parámetros de entrada del usuario para configurar un flujo
de trabajo que se va a implementar en Azure Container Instances.
El flujo de trabajo creado por la CLI de Azure es similar al flujo de trabajo que puede crear manualmente mediante
GitHub.
Requisitos previos adicionales
Además de los requisitos previos y de la configuración del repositorio para este escenario, debe instalar la
extensión Implementar en Azure para la CLI de Azure.
Ejecute el comando az extension add para instalar la extensión:

az extension add \
--name deploy-to-azure

Para obtener información sobre cómo buscar, instalar y administrar extensiones, consulte Uso de extensiones con la
CLI de Azure.
Ejecute az container app up :
Para ejecutar el comando az container app up, proporcione como mínimo:
El nombre de la instancia de Azure Container Registry, por ejemplo, miregistro
La dirección URL del repositorio de GitHub, por ejemplo,
https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Comando de ejemplo:

az container app up \
--acr myregistry \
--repository https://github.com/myID/acr-build-helloworld-node

Progreso del comando


Cuando se le solicite, proporcione sus credenciales de GitHub o proporcione un token de acceso personal
(PAT) de GitHub que tenga ámbitos de repositorio y de usuario para autenticarse en el registro. Si
proporciona las credenciales de GitHub, el comando crea un PAT automáticamente.
El comando crea secretos del repositorio para el flujo de trabajo:
Credenciales de la entidad de servicio para la CLI de Azure
Credenciales para el acceso a la instancia de Azure Container Registry
Después de que el comando confirme el archivo de flujo de trabajo en el repositorio, se desencadena el flujo
de trabajo.
La salida es parecida a esta:

[...]
Checking in file github/workflows/main.yml in the Github repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at: http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

Validación del flujo de trabajo


El flujo de trabajo implementa una instancia de Azure Container Instance con el nombre base del repositorio de
GitHub, en este caso acr-build-helloworld-node. En el explorador, puede examinar el vínculo proporcionado para
ver la aplicación web en ejecución. Si la aplicación escucha en un puerto distinto del 8080, especifíquelo en la
dirección URL en su lugar.
Para ver el estado del flujo de trabajo y los resultados de cada paso en la UI de GitHub, consulte Managing a
workflow run.

Limpieza de recursos
Detenga la instancia de contenedor con el comando az container delete:

az container delete \
--name <instance-name>
--resource-group <resource-group-name>

Para eliminar el grupo de recursos y todos los recursos que contiene, ejecute el comando az group delete:

az group delete \
--name <resource-group-name>

Pasos siguientes
Explore GitHub Marketplace para ver más acciones para automatizar el flujo de trabajo de desarrollo.
Cifrado de datos de implementación
23/07/2020 • 13 minutes to read • Edit Online

Al ejecutar los recursos de Azure Container Instances (ACI) en la nube, el servicio ACI recopila y conserva los datos
relacionados con los contenedores. ACI cifra automáticamente los datos al guardarlos en la nube. Este cifrado
protege los datos para cumplir los compromisos de cumplimiento y seguridad de la organización. ACI también
ofrece la opción de cifrar estos datos con una clave propia, lo que proporciona un mayor control sobre los datos
relacionados con las implementaciones de ACI.

Acerca del cifrado de datos de ACI


Los datos en ACI se cifran y descifran con el cifrado AES de 256 bits. Este está habilitado para todas las
implementaciones de ACI y no es necesario modificar la implementación ni los contenedores para usarlo. Esto
incluye los metadatos sobre la implementación, las variables de entorno, las claves que se pasan a los
contenedores y los registros que se conservan después de detener los contenedores para que pueda verlos. El
cifrado no afecta al rendimiento del grupo de contenedores y el cifrado no genera ningún costo adicional.

Administración de claves de cifrado


Puede confiar en las claves administradas por Microsoft para el cifrado de los datos de los contenedores, o puede
administrar el cifrado con sus propias claves. En la siguiente tabla se comparan estas opciones:

C L AVES A DM IN IST RA DA S P O R C L AVES A DM IN IST RA DA S P O R EL


M IC RO SO F T C L IEN T E

Operaciones de cifrado y descifrado Azure Azure

Almacenamiento de claves Almacén de claves de Microsoft Azure Key Vault

Responsabilidad de la rotación de claves Microsoft Customer

Acceso a la clave Solo Microsoft Microsoft, cliente

En el resto del documento se describen los pasos necesarios para cifrar los datos de implementación de ACI con su
clave (clave administrada por el cliente).

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.
Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos
preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno
local.
Para iniciar Azure Cloud Shell:

O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se copia
automáticamente el código en Cloud Shell.
O P C IÓ N E JEM P LO O VÍN C ULO

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.

Cifrado de datos con una clave administrada por el cliente


Crear una entidad de servicio para ACI
El primer paso es asegurarse de que el inquilino de Azure tiene asignada una entidad de servicio para conceder
permisos al servicio de Azure Container Instances.

IMPORTANT
Para ejecutar el siguiente comando y crear una entidad de servicio correctamente, confirme que tiene permisos para crear
entidades de servicio en el inquilino.

El siguiente comando de la CLI configurará la entidad de servicio de ACI en el entorno de Azure:

az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9

El resultado de la ejecución de este comando debe mostrar una entidad de servicio configurada con el valor
"displayName": "Azure Container Instance Service".
En caso de que no pueda crear correctamente la entidad de servicio:
confirme que tiene permisos para hacerlo en el inquilino
compruebe si ya existe una entidad de servicio en el inquilino para la implementación en ACI. Para ello, ejecute
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9 y use esa entidad de servicio en su lugar.

Creación de un recurso de Key Vault


Cree una instancia de Azure Key Vault mediante Azure Portal, la CLI o PowerShell.
En el caso de las propiedades del almacén de claves, siga estas instrucciones:
Nombre: se requiere un nombre único.
Suscripción: Elija una suscripción.
En Grupo de recursos, seleccione un grupo existente o cree uno y escriba un nombre para el grupo de recursos.
En el menú desplegable Ubicación elija una ubicación.
Puede dejar los valores predeterminados de las demás opciones o elegir otros en función de los requisitos
adicionales.
IMPORTANT
Al usar claves administradas por el cliente para cifrar una plantilla de implementación de ACI, se recomienda establecer las
dos propiedades siguientes en el almacén de claves, Eliminación temporal y No purgar. Estas propiedades no están
habilitadas de forma predeterminada, pero se pueden habilitar mediante PowerShell o la CLI de Azure tanto en un almacén
de claves nuevo como en uno existente.

Generar una nueva clave


Una vez creado el almacén de claves, navegue hasta el recurso en Azure Portal. En el menú de navegación
izquierdo de la hoja de recursos, en Configuración, haga clic en Claves . En la vista "Claves", haga clic en
"Generar/importar" para generar una nueva clave. Use cualquier nombre único para esta clave y establezca
cualquier otra preferencia en función de sus necesidades.

Establecer la directiva de acceso


Cree una nueva directiva de acceso para permitir que el servicio ACI tenga acceso a la clave.
Una vez generada la clave, en la hoja de recursos del almacén de claves, en Configuración, haga clic en
Directivas de acceso .
En la página "Directivas de acceso" del almacén de claves, haga clic en Agregar directiva de acceso .
Establezca los Permisos de las claves para incluir las opciones Obtener y Desencapsular clave .
En Seleccionar la entidad de seguridad, seleccione Ser vicio Azure Container Instance .
Haga clic en Agregar en la parte inferior.
La directiva de acceso debe mostrarse ahora en las directivas de acceso del almacén de claves.

Modificar la plantilla de implementación JSON

IMPORTANT
El cifrado de datos de implementación con una clave administrada por el cliente está disponible en la versión más reciente de
la API (2019-12-01) que se está implementando actualmente. Especifique esta versión de API en la plantilla de
implementación. Si tiene algún problema con este valor, póngase en contacto con el soporte técnico de Azure.

Una vez configuradas la clave del almacén de claves y la directiva de acceso, agregue las siguientes propiedades a
la plantilla de implementación de ACI. Obtenga más información sobre la implementación de recursos de ACI con
una plantilla en el Tutorial: Implementación de un grupo con varios contenedores con una plantilla de Resource
Manager.
En resources , establezca apiVersion en 2019-12-01 .
En la sección Propiedades del grupo de contenedores de la plantilla de implementación, agregue un elemento
encryptionProperties con los siguientes valores:
vaultBaseUrl : nombre DNS del almacén de claves, que se puede encontrar en la hoja de Información
general del recurso de almacén de claves en el portal.
keyName : nombre de la clave generada anteriormente.
keyVersion : versión actual de la clave. Para encontrar este valor, haga clic en la clave (debajo de "Claves"
en la sección Configuración del recurso de almacén de claves).
En las propiedades del grupo de contenedores, agregue una propiedad sku con el valor Standard . La
propiedad sku es obligatoria en la versión 2019-12-01 de la API.

El siguiente fragmento de plantilla muestra estas propiedades adicionales para cifrar los datos de implementación:

[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]

A continuación se muestra una plantilla completa, adaptada a partir de la plantilla de Tutorial: Implementación de
un grupo con varios contenedores con una plantilla de Resource Manager.

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/',
parameters('containerGroupName'))).ipAddress.ip]"
}
}
}

Implementar los recursos


Si ha creado y editado el archivo de plantilla en el escritorio, puede cargarlo en el directorio de Cloud Shell si lo
arrastra a dicho directorio.
Para crear un grupo de recursos, use el comando az group create.

az group create --name myResourceGroup --location eastus


Implemente la plantilla con el comando az group deployment create.

az group deployment create --resource-group myResourceGroup --template-file deployment-template.json

Al cabo de unos segundos, debe recibir una respuesta inicial de Azure. Una vez completada la implementación,
todos los datos relacionados con Azure que conserva el servicio ACI se cifrarán con la clave proporcionada.
Implementación en hosts dedicados
23/07/2020 • 4 minutes to read • Edit Online

"Dedicado" es una SKU de Azure Container Instances (ACI) que proporciona un entorno de proceso aislado y
dedicado para ejecutar contenedores de forma segura. El uso de la SKU dedicada da como resultado que cada
grupo de contenedores tenga un servidor físico dedicado en un centro de recursos de Azure, lo que garantiza un
aislamiento completo de la carga de trabajo para ayudar a satisfacer los requisitos de cumplimiento y seguridad de
su organización.
La SKU dedicada es adecuada para cargas de trabajo de contenedor que requieren aislamiento de la carga de
trabajo desde una perspectiva de servidor físico.

Prerrequisitos
El límite predeterminado de cualquier suscripción para usar la SKU dedicada es 0. Si desea usar esta SKU para
las implementaciones de contenedores de producción, cree una solicitud de soporte técnico de Azure para
aumentar el límite.

Uso de la SKU dedicada


IMPORTANT
El uso de la SKU dedicada solo está disponible en la versión de API más reciente (2019-12-01) que se está implementando
actualmente. Especifique esta versión de API en la plantilla de implementación.

A partir de la versión 2019-12-01 de la API, hay una propiedad sku en la sección Propiedades del grupo de
contenedores de una plantilla de implementación, que es necesaria para una implementación de ACI. Actualmente,
puede usar esta propiedad como parte de una plantilla de implementación de Azure Resource Manager para ACI.
Obtenga más información sobre la implementación de recursos de ACI con una plantilla en el Tutorial:
Implementación de un grupo con varios contenedores con una plantilla de Resource Manager.
La propiedad sku admite cualquiera de los siguientes valores:
Standard : la opción de implementación de ACI estándar, que sigue garantizando la seguridad de nivel de
hipervisor
Dedicated : se usa para el aislamiento de nivel de carga de trabajo con hosts físicos dedicados para el grupo de
contenedores

Modificar la plantilla de implementación JSON


En la plantilla de implementación, modifique o agregue las siguientes propiedades:
En resources , establezca apiVersion en 2019-12-01 .
En las propiedades del grupo de contenedores, agregue una propiedad sku con el valor Dedicated .

Este es un fragmento de ejemplo para la sección de recursos de una plantilla de implementación de grupo de
contenedores que usa la SKU dedicada:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"sku": "Dedicated",
"containers": {
[...]
}
}
}
]

A continuación, se muestra una plantilla completa que implementa un grupo de contenedores de ejemplo que
ejecuta una única instancia de contenedor:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"sku": "Dedicated",
"containers": [
{
"name": "container1",
"properties": {
"image": "nginx",
"command": [
"/bin/sh",
"-c",
"while true; do echo `date`; sleep 1000000; done"
],
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"environmentVariables": [],
"resources": {
"requests": {
"memoryInGB": 1.0,
"cpu": 1
}
}
}
}
],
"restartPolicy": "Always",
"ipAddress": {
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"type": "Public"
},
"osType": "Linux"
},
"tags": {}
}
]
}

Implementación del grupo de contenedores


Si ha creado y editado el archivo de plantilla de implementación en el escritorio, puede cargarlo en el directorio de
Cloud Shell si lo arrastra a dicho directorio.
Para crear un grupo de recursos, use el comando az group create.

az group create --name myResourceGroup --location eastus

Implemente la plantilla con el comando az deployment group create.

az deployment group create --resource-group myResourceGroup --template-file deployment-template.json

Al cabo de unos segundos, debe recibir una respuesta inicial de Azure. Se realizará una implementación correcta en
un host dedicado.
Implementación y administración de Azure Container
Instances mediante Azure Logic Apps
23/07/2020 • 5 minutes to read • Edit Online

Con Azure Logic Apps y el conector de Azure Container Instances, puede configurar tareas y flujos de trabajo
automatizados que implementan y administran grupos de contenedores. El conector de Container Instances admite
las siguientes acciones:
Creación o eliminación de un grupo de contenedores
Obtención de las propiedades de un grupo de contenedores
Obtención de una lista de grupos de contenedores
Obtención de los registros de una instancia de contenedor
Use estas acciones en las aplicaciones lógicas para tareas como la ejecución de una carga de trabajo de contenedor
en respuesta a un desencadenador de Logic Apps. También puede hacer que otras acciones usen la salida de las
acciones de Container Instances.
Este conector ofrece únicamente las acciones, por lo que, para iniciar la aplicación lógica, use un desencadenador
independiente, como por ejemplo Recurrence para ejecutar la carga de trabajo de un contenedor con regularidad.
O bien, puede que tenga que desencadenar una implementación del grupo de contenedores después de un evento
como la llegada de un correo electrónico de Outlook.
Si no está familiarizado con las aplicaciones lógicas, consulte ¿Qué es Azure Logic Apps?

Prerequisites
Suscripción a Azure. Si no tiene una suscripción de Azure, regístrese para obtener una cuenta gratuita de
Azure.
Conocimientos básicos sobre cómo crear aplicaciones lógicas y cómo crear y administrar instancias de
contenedor
La aplicación lógica desde donde quiere acceder a las instancia de contenedor. Para usar una acción, inicie la
aplicación lógica con otro desencadenador, por ejemplo, el desencadenador Recurrence .

Adición de una acción de instancia de contenedor


Al agregar un desencadenador o una acción que se conecta a un servicio o sistema por primera vez, el diseñador
de aplicaciones lógicas le pide que cree una conexión y que proporcione la información necesaria, que varía en
función de la conexión; por ejemplo:
Nombre que se va a usar para la nueva conexión.
Nombre del servidor o del sistema.
Sus credenciales de usuario o cuenta.
Tipo de autenticación que se debe usar.
La suscripción de Azure y el nombre de la puerta de enlace de datos que creó anteriormente al conectarse a los
orígenes de datos locales.
1. Inicie sesión en Azure Portal y abra la aplicación lógica en el diseñador de aplicaciones lógicas, si aún no lo
ha hecho.
2. Elija una ruta de acceso:
En el último paso para agregar una acción, elija Nuevo paso .
O bien
Entre los pasos en los que desee agregar una acción, mueva el puntero sobre la flecha. Elija el signo
más ( + ) que aparece y seleccione Agregar una acción .
3. En el cuadro de búsqueda, escriba "instancia de contenedor" como filtro. En la lista de acciones, seleccione la
acción del conector de Azure Container Instances que desee.
4. Proporcione un nombre para la conexión.
5. Proporcione los detalles necesarios para la acción seleccionada y continúe con la creación del flujo de
trabajo de la aplicación lógica.
Por ejemplo, seleccione Crear un grupo de contenedores y escriba las propiedades de un grupo de
contenedores y una o varias instancias de contenedor en el grupo, tal como se muestra en la siguiente imagen
(detalle parcial):

Referencia de conectores
Para obtener información técnica acerca de los desencadenadores, las acciones y los límites, que se detallan en la
descripción de OpenAPI (antes Swagger) del conector, consulte la página de referencia de los conectores o la
referencia de YAMLº del grupo de contenedores.
Pasos siguientes
Vea una aplicación lógica de ejemplo que ejecuta un contenedor en Azure Container Instances para analizar
la opinión del correo electrónico o del texto de Twitter.
Obtenga más información sobre otros conectores de Logic Apps
Ejecución de tareas en contenedores con directivas
de reinicio
23/07/2020 • 5 minutes to read • Edit Online

La facilidad y rapidez con que se implementan contenedores convierten a Azure Container Instances en una
plataforma convincente para la ejecución de tareas que se ejecutan una única vez, como compilaciones, pruebas
y representaciones de imágenes en una instancia de contenedor.
Gracias a una directiva de reinicio configurable, puede especificar que los contenedores se detengan cuando sus
procesos se hayan completado. Dado que las instancias de contenedor se facturan por segundo, solo se le cobra
por los recursos de proceso usados mientras el contenedor que ejecuta su tarea está en funcionamiento.
En los ejemplos presentados en este artículo se usa la CLI de Azure. Debe tener instalada localmente la CLI de
Azure, versión 2.0.21 o superior, o usar la CLI de Azure Cloud Shell.

Directiva de reinicio de contenedor


Cuando se crea un grupo de contenedores en Azure Container Instances, se puede especificar una de tres
configuraciones de directiva de reinicio.

DIREC T IVA DE REIN IC IO DESC RIP C IÓ N

Always Siempre se reinician los contenedores del grupo de


contenedores. Este es el valor de configuración
predeterminado aplicado cuando no se especifica ninguna
directiva de reinicio durante la creación del contenedor.

Never Nunca se reinician los contenedores del grupo de


contenedores. Los contenedores se ejecutan al menos una
vez.

OnFailure Los contenedores del grupo de contenedores se reinician


solo cuando se produce un error en el proceso ejecutado en
el contenedor (cuando se cierra con un código de salida
distinto de cero). Los contenedores se ejecutan al menos una
vez.

Especificación de una directiva de reinicio


El modo en que especifique una directiva de reinicio depende de cómo cree sus instancias de contenedor, es
decir, con la CLI de Azure, los cmdlets de Azure PowerShell o Azure Portal. En la CLI de Azure, especifique el
parámetro --restart-policy cuando llame a az container create.

az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mycontainerimage \
--restart-policy OnFailure

Ejemplo de ejecución hasta terminación


Para ver la directiva de reinicio en acción, cree una instancia de contenedor a partir de la imagen aci-wordcount
de Microsoft y especifique la directiva de reinicio OnFailure . Este contenedor de ejemplo ejecuta un script de
Python que, de forma predeterminada, analiza el texto de la obra Hamlet de Shakespeare, escribe las 10 palabras
más comunes en STDOUT y, a continuación, se cierra.
Ejecute el contenedor de ejemplo con el siguiente comando az container create:

az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure

Azure Container Instances inicia el contenedor y, luego, lo detiene cuando su aplicación (o script, en este caso) se
cierra. Cuando Azure Container Instances detiene un contenedor cuya directiva de reinicio es Never o
OnFailure , el estado del contenedor se establece en Terminado . Puede comprobar el estado de un contenedor
con el comando az container show:

az container show \
--resource-group myResourceGroup \
--name mycontainer \
--query containers[0].instanceView.currentState.state

Salida de ejemplo:

"Terminated"

Una vez que el estado del contenedor de ejemplo muestra Terminado, puede ver la salida de las tareas en los
registros del contenedor. Ejecute el comando az container logs para ver la salida del script:

az container logs --resource-group myResourceGroup --name mycontainer

Salida:

[('the', 990),
('and', 702),
('of', 628),
('to', 610),
('I', 544),
('you', 495),
('a', 453),
('my', 441),
('in', 399),
('HAMLET', 386)]

En este ejemplo se muestra la salida que el script envía a STDOUT. No obstante, puede que las tareas en
contenedor escriban su salida en almacenamiento persistente para su posterior recuperación. Por ejemplo, en un
recurso compartido de archivos de Azure.

Pasos siguientes
Los escenarios basados en tareas, como el procesamiento por lotes de un gran conjunto de datos con varios
contenedores, pueden aprovechar las variables de entorno o las líneas de comando personalizadas en tiempo de
ejecución.
Para más información acerca de cómo conservar la salida de los contenedores que se ejecutan hasta
completarse, consulte Montaje de un recurso compartido de archivos de Azure en Azure Container Instances.
Establecimiento de variables de entorno en
instancias de contenedor
23/07/2020 • 10 minutes to read • Edit Online

El establecimiento de variables de entorno en las instancias de contenedor le permite proporcionar configuración


dinámica de la aplicación o el script ejecutados por el contenedor. Esto es casi lo mismo que el argumento de
línea de comandos --env para docker run .
Para establecer las variables de entorno en un contenedor, debe especificarlas al crear una instancia del
contenedor. En este artículo se muestran ejemplos de cómo establecer variables de entorno cuando se inicia un
contenedor con la CLI de Azure, Azure PowerShell y Azure Portal.
Por ejemplo, si ejecuta la imagen de contenedor aci-wordcount, puede modificar su comportamiento mediante la
especificación de las siguientes variables de entorno:
NumWords: El número de palabras enviadas a STDOUT.
MinLength: El número mínimo de caracteres en una palabra para que se tenga en cuenta. Un número mayor
omite palabras comunes como "de" y "la".
Si tiene que pasar secretos como variables de entorno, Azure Container Instances admite valores seguros tanto
en contenedores Windows como Linux.

NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module
(Presentación del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az,
consulte Instalación de Azure PowerShell.

Ejemplo de la CLI de Azure


Para ver la salida predeterminada del contenedor aci-wordcount, ejecútelo en primer lugar con el comando az
container create (sin variables de entorno especificadas):

az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure

Para modificar la salida, inicie un segundo contenedor con el argumento --environment-variables agregado y
especifique valores para las variables NumWords y MinLength. (En este ejemplo, se supone que está ejecutando
la CLI en un shell de Bash o en Azure Cloud Shell. Si usa el símbolo del sistema de Windows, especifique las
variables con comillas dobles, como --environment-variables "NumWords"="5" "MinLength"="8" ).
az container create \
--resource-group myResourceGroup \
--name mycontainer2 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure \
--environment-variables 'NumWords'='5' 'MinLength'='8'

Una vez que el estado de ambos contenedores se muestre como Finalizado (use az container show para
comprobar el estado), muestre sus registros con az container logs para ver la salida.

az container logs --resource-group myResourceGroup --name mycontainer1


az container logs --resource-group myResourceGroup --name mycontainer2

La salida de los contenedores muestra cómo ha modificado el comportamiento de script del segundo contenedor
estableciendo las variables de entorno.
mycontainer1

[('the', 990),
('and', 702),
('of', 628),
('to', 610),
('I', 544),
('you', 495),
('a', 453),
('my', 441),
('in', 399),
('HAMLET', 386)]

mycontainer2

[('CLAUDIUS', 120),
('POLONIUS', 113),
('GERTRUDE', 82),
('ROSENCRANTZ', 69),
('GUILDENSTERN', 54)]

Ejemplo de Azure PowerShell


El establecimiento de las variables de entorno en PowerShell es similar a la CLI, pero usa el argumento de línea
de comandos -EnvironmentVariable .
En primer lugar, inicie el contenedor aci-wordcount en su configuración predeterminada con el comando New-
AzContainerGroup:

New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name mycontainer1 `
-Image mcr.microsoft.com/azuredocs/aci-wordcount:latest

Ahora, ejecute el siguiente comando New-AzContainerGroup. Este especifica las variables de entorno NumWords
y MinLength después de rellenar una variable de matriz, envVars :
$envVars = @{'NumWords'='5';'MinLength'='8'}
New-AzContainerGroup `
-ResourceGroupName myResourceGroup `
-Name mycontainer2 `
-Image mcr.microsoft.com/azuredocs/aci-wordcount:latest `
-RestartPolicy OnFailure `
-EnvironmentVariable $envVars

Una vez que el estado de ambos contenedores es Finalizado (use Get-AzContainerInstanceLog para comprobar
dicho estado), extraiga sus registros con el comando Get-AzContainerInstanceLog.

Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1


Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2

La salida de cada contenedor muestra cómo ha modificado la ejecución del script mediante el contenedor
estableciendo las variables de entorno.

PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer1


[('the', 990),
('and', 702),
('of', 628),
('to', 610),
('I', 544),
('you', 495),
('a', 453),
('my', 441),
('in', 399),
('HAMLET', 386)]

Azure:\
PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
[('CLAUDIUS', 120),
('POLONIUS', 113),
('GERTRUDE', 82),
('ROSENCRANTZ', 69),
('GUILDENSTERN', 54)]

Azure:\

Ejemplo de Azure Portal


Para establecer las variables de entorno cuando inicia un contenedor en Azure Portal, especifíquelas en la página
Avanzado cuando cree el contenedor.
1. En la página Avanzado , establezca Directiva de reinicio en En caso de error.
2. En Variables de entorno , escriba NumWords con un valor de 5 para la primera variable, y escriba
MinLength con un valor de 8 para la segunda variable.
3. Seleccione Revisar y crear para comprobar y, luego, implementar el contenedor.
Para ver los registros del contenedor, en Configuración , seleccione Contenedores y luego Registros . De
forma similar a la salida que se muestra en las secciones de la CLI y PowerShell anteriores, puede ver cómo se ha
modificado el comportamiento del script mediante las variables de entorno. Se muestran solo cinco palabras,
cada una con una longitud mínima de ocho caracteres.

Protección de valores
Los objetos con valores seguros están diseñados para contener información confidencial, como contraseñas o
claves de la aplicación. Utilizar valores seguros para las variables de entorno es más confiable y más flexible que
incluirlas en la imagen de su contenedor. Otra opción consiste en utilizar volúmenes secretos, según se describe
en Montaje de un volumen secreto en Azure Container Instances.
Las variables de entorno con valores seguros no son visibles en las propiedades del contenedor, solo se tiene
acceso a los valores desde dentro del contenedor. Por ejemplo, las propiedades del contenedor que se visualizan
en Azure Portal o con la CLI de Azure solo muestran el nombre de una variable segura, no su valor.
Establezca una variable de entorno segura especificando la propiedad secureValue en lugar del valor value
habitual para el tipo de variable. Las dos variables definidas en el siguiente YAML demuestran los dos tipos de
variable.
Implementación de YAML
Cree un archivo secure-env.yaml con el siguiente fragmento de código.

apiVersion: 2019-12-01
location: eastus
name: securetest
properties:
containers:
- name: mycontainer
properties:
environmentVariables:
- name: 'NOTSECRET'
value: 'my-exposed-value'
- name: 'SECRET'
secureValue: 'my-secret-value'
image: nginx
ports: []
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
osType: Linux
restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Ejecute el siguiente comando para implementar el grupo de contenedores con YAML (ajuste el nombre del grupo
de recursos según sea necesario):

az container create --resource-group myResourceGroup --file secure-env.yaml

Verificación de las variables de entorno


Ejecute el comando az container show para consultar las variables de entorno del contenedor:

az container show --resource-group myResourceGroup --name securetest --query


'containers[].environmentVariables'

La respuesta JSON muestra la clave y el valor de la variable de entorno no segura, sino únicamente el nombre de
la variable de entorno segura:

[
[
{
"name": "NOTSECRET",
"secureValue": null,
"value": "my-exposed-value"
},
{
"name": "SECRET",
"secureValue": null,
"value": null
}
]
]

Puede comprobar que se ha establecido la variable de entorno segura con el comando az container exec, que
permite ejecutar un comando en un contenedor en ejecución. Ejecute el siguiente comando para iniciar una
sesión de Bash interactiva en el contenedor:

az container exec --resource-group myResourceGroup --name securetest --exec-command "/bin/bash"

Cuando haya abierto un shell interactivo dentro del contenedor, tendrá acceso al valor de la variable SECRET :

root@caas-ef3ee231482549629ac8a40c0d3807fd-3881559887-5374l:/# echo $SECRET


my-secret-value

Pasos siguientes
Los escenarios basados en tareas, como el procesamiento por lotes de un gran conjunto de datos con varios
contenedores, pueden aprovechar las variables de entorno personalizadas en tiempo de ejecución. Para más
información sobre cómo ejecutar contenedores basados en tareas, consulte Ejecución de tareas en contenedores
con directivas de reinicio.
Establecimiento de la línea de comandos en una
instancia de contenedor para invalidar la operación
de línea de comandos predeterminada
23/07/2020 • 7 minutes to read • Edit Online

Cuando cree una instancia de contenedor, puede especificar una línea de comandos para invalidar la instrucción de
la línea de comandos predeterminada incorporada a la imagen de contenedor. Este comportamiento es similar al
argumento de línea de comandos --entrypoint para docker run .
Igual que configurar variables de entorno de instancias de contenedor, especificar una línea de comandos de inicio
es útil para los trabajos por lotes donde es necesario preparar cada contenedor de forma dinámica con la
configuración específica de la tarea.

Instrucciones de línea de comandos


De forma predeterminada, la línea de comandos especifica un único proceso que inicia sin un shell en el
contenedor. Por ejemplo, la línea de comandos puede ejecutar un archivo ejecutable o un script de Python.
El proceso puede especificar parámetros o argumentos adicionales.
Para ejecutar varios comandos, inicie la línea de comandos mediante el establecimiento de un entorno de
shell compatible con el sistema operativo del contenedor. Ejemplos:

SIST EM A O P ERAT IVO SH EL L P REDET ERM IN A DO

Ubuntu /bin/bash

Alpine /bin/sh

Windows cmd

Siga las convenciones del shell para combinar varios comandos para que se ejecuten en secuencia.
Según la configuración del contenedor, es posible que deba establecer una ruta de acceso completa al
ejecutable o a los argumentos de la línea de comandos.
Establezca una directiva de reinicio adecuada para la instancia de contenedor, según si la línea de comandos
especifica una tarea de ejecución prolongada o una tarea de una sola ejecución. Por ejemplo, una directiva
de reinicio de Never o OnFailure se recomienda para una tarea de una sola ejecución.
Si necesita información sobre el punto de entrada predeterminado establecido en una imagen de
contenedor, use el comando de inspección de imagen de docker.

Sintaxis de la línea de comandos


La sintaxis de la línea de comandos varía según la herramienta o la API de Azure usada para crear las instancias. Si
especifica un entorno de shell, observe también las convenciones de sintaxis del comando del shell.
Comando az container create: Pase una cadena con el parámetro --command-line . Ejemplo:
--command-line "python myscript.py arg1 arg2" .
Cmdlet New-AzureRmContainerGroup de Azure PowerShell: Pase una cadena con el parámetro -Command .
Ejemplo: -Command "echo hello" .
Azure Portal: En la propiedad Invalidación de comando de la configuración del contenedor, proporcione
una lista de cadenas separadas por comas sin comillas. Ejemplo: python, myscript.py, arg1, arg2 .
Plantilla de Resource Manager, archivo YAML o uno de los SDK de Azure: Especifique la propiedad de la línea
de comandos como una matriz de cadenas. Ejemplo: la matriz JSON
["python", "myscript.py", "arg1", "arg2"] de una plantilla de Resource Manager.

Si está familiarizado con la sintaxis de Dockerfile, este formato es similar al formato de exec de la
instrucción CMD.
Ejemplos
A Z URE C L I P O RTA L P L A N T IL L A

Comando único --command-line "python Invalidación del "command": ["python",


myscript.py arg1 arg2" comando : "myscript.py", "arg1",
"arg2"]
python, myscript.py,
arg1, arg2

Varios comandos --command-line Invalidación del "command":


"/bin/bash -c 'mkdir comando : ["/bin/bash", "-c",
test; touch "mkdir test; touch
test/myfile; tail -f /bin/bash, -c, mkdir test/myfile; tail -f
/dev/null'" test; touch /dev/null"]
test/myfile; tail -f
/dev/null

Ejemplo de la CLI de Azure


Por ejemplo, modifique el comportamiento de la imagen de contenedor microsoft/aci-wordcount, que analiza el
texto de la obra Hamlet de Shakespeare para encontrar con las palabras que se repiten con más frecuencia. En
lugar de analizar Hamlet, puede establecer una línea de comandos que apunte a un origen de texto diferente.
Para ver la salida del contenedor microsoft/aci-wordcount, cuando analice el texto predeterminado, ejecútela con
el siguiente comando az container create. No se especifica ninguna línea de comandos de inicio, por lo que se
ejecuta el comando del contenedor predeterminado. Con fines ilustrativos, este ejemplo establece variables de
entorno para buscar las tres palabras principales que tienen como mínimo cinco letras:

az container create \
--resource-group myResourceGroup \
--name mycontainer1 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--environment-variables NumWords=3 MinLength=5 \
--restart-policy OnFailure

Una vez que el estado del contenedor se muestre como Finalizado (use az container show para comprobar el
estado), muestre el registro con az container logs para ver la salida.

az container logs --resource-group myResourceGroup --name mycontainer1

Salida:

[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]


Ahora configure un segundo contenedor de ejemplo para analizar texto diferente mediante la especificación de
una línea de comandos diferente. El script de Python ejecutado por el contenedor, wordcount.py, acepta una
dirección URL como argumento y procesa el contenido de esa página en lugar del valor predeterminado.
Por ejemplo, para determinar las tres palabras principales que tienen cinco letras como mínimo en Romeo y
Julieta:

az container create \
--resource-group myResourceGroup \
--name mycontainer2 \
--image mcr.microsoft.com/azuredocs/aci-wordcount:latest \
--restart-policy OnFailure \
--environment-variables NumWords=3 MinLength=5 \
--command-line "python wordcount.py http://shakespeare.mit.edu/romeo_juliet/full.html"

Una vez más, cuando el contenedor muestra el estado Terminado, puede ver la salida en los registros del
contenedor:

az container logs --resource-group myResourceGroup --name mycontainer2

Salida:

[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]

Pasos siguientes
Los escenarios basados en tareas, como el procesamiento por lotes de un gran conjunto de datos con varios
contenedores, pueden aprovechar líneas de comandos personalizadas en tiempo de ejecución. Para más
información sobre cómo ejecutar contenedores basados en tareas, consulte Ejecución de tareas en contenedores
con directivas de reinicio.
Ejecución de un comando en una instancia de
contenedor de Azure en ejecución
23/07/2020 • 3 minutes to read • Edit Online

Azure Container Instances permite ejecutar un comando en un contenedor en ejecución. Ejecutar un comando en
un contenedor que ya inició resulta especialmente útil durante el desarrollo y la solución de problemas de las
aplicaciones. El uso más común de esta característica es para iniciar un shell interactivo a fin de que pueda
depurar problemas en un contenedor en ejecución.

Ejecución de un comando con la CLI de Azure


Ejecute un comando en un contenedor en ejecución con az container exec en la CLI de Azure:

az container exec --resource-group <group-name> --name <container-group-name> --exec-command "<command>"

Por ejemplo, para iniciar un shell de Bash en un contenedor de Nginx:

az container exec --resource-group myResourceGroup --name mynginx --exec-command "/bin/bash"

En la salida de ejemplo siguiente, el shell de Bash se inicia en un contenedor Linux en ejecución, lo que
proporciona un terminal en el que se ejecuta ls :

root@caas-83e6c883014b427f9b277a2bba3b7b5f-708716530-2qv47:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@caas-83e6c883014b427f9b277a2bba3b7b5f-708716530-2qv47:/# exit
exit
Bye.

En este ejemplo, el símbolo del sistema se inicia en un contenedor Nanoserver en ejecución:

az container exec --resource-group myResourceGroup --name myiis --exec-command "cmd.exe"


Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\>dir
Volume in drive C has no label.
Volume Serial Number is 76E0-C852

Directory of C:\

03/23/2018 09:13 PM <DIR> inetpub


11/20/2016 11:32 AM 1,894 License.txt
03/23/2018 09:13 PM <DIR> Program Files
07/16/2016 12:09 PM <DIR> Program Files (x86)
03/13/2018 08:50 PM 171,616 ServiceMonitor.exe
03/23/2018 09:13 PM <DIR> Users
03/23/2018 09:12 PM <DIR> var
03/23/2018 09:22 PM <DIR> Windows
2 File(s) 173,510 bytes
6 Dir(s) 21,171,609,600 bytes free

C:\>exit
Bye.

Grupos de varios contenedores


Si el grupo de contenedores tiene varios contenedores, como un contenedor de aplicación y un sidecar de
registro, especifique el nombre del contenedor en el cual ejecutar el comando con --container-name .
Por ejemplo, en el grupo de contenedores mynginx hay dos contenedores, nginx-app y logger. Para iniciar un shell
en el contenedor nginx-app:

az container exec --resource-group myResourceGroup --name mynginx --container-name nginx-app --exec-command


"/bin/bash"

Restricciones
Azure Container Instances actualmente permite iniciar un solo proceso con az container exec y no es posible pasar
argumentos de comando. Por ejemplo, no puede encadenar comandos como en sh -c "echo FOO && echo BAR" ni
ejecutar echo FOO .

Pasos siguientes
Obtenga información sobre otras herramientas para la solución de problemas y otros problemas comunes de
implementación en Solución de problemas de contenedor e implementación en Azure Container Instances.
Ejecución de un contenedor de inicialización para
tareas de configuración en un grupo de contenedores
23/07/2020 • 7 minutes to read • Edit Online

Azure Container Instances admite contenedores de inicialización en un grupo de contenedores. Los contenedores
de inicialización se ejecutan por completo antes de que se inicie el contenedor o contenedores de la aplicación. De
modo similar a los contenedores de inicialización de Kubernetes, utilice uno o varios contenedores de inicialización
para realizar la lógica de inicialización de los contenedores de la aplicación, como establecer cuentas, ejecutar
scripts de instalación o configurar bases de datos.
En este artículo se muestra cómo usar una plantilla de Azure Resource Manager para configurar un grupo de
contenedores con un contenedor de inicialización.

Cosas que debe saber


Versión de API : para implementar contenedores de inicialización al menos se requiere la versión 2019-12-
01 de la API de Azure Container Instances. Realice la implementación con una propiedad initContainers en
un archivo YAML o una plantilla de Resource Manager.
Orden de ejecución : los contenedores de inicialización se ejecutan en el orden especificado en la plantilla y
antes que otros contenedores. De forma predeterminada, puede especificar 59 contenedores de
inicialización, como máximo, por cada grupo de contenedores. En el grupo debe haber al menos un
contenedor que no sea de inicialización.
Entorno de host : los contenedores de inicialización se ejecutan en el mismo hardware que el resto de los
contenedores del grupo.
Recursos : no se especifican recursos para los contenedores de inicialización. Se les conceden los recursos
totales como la CPU y la memoria disponible para el grupo de contenedores. Mientras se ejecuta un
contenedor de inicialización, no se ejecuta ningún otro contenedor en el grupo.
Propiedades admitidas : los contenedores de inicialización pueden utilizar propiedades de grupo como
volúmenes, secretos e identidades administradas. Sin embargo, no pueden usar puertos ni una dirección IP
si están configurados para el grupo de contenedores.
Directiva de reinicio : cada contenedor de inicialización debe finalizar correctamente antes de que se inicie
el siguiente contenedor del grupo. Si un contenedor de inicialización no finaliza correctamente, su acción de
reinicio depende de la directiva de reinicio configurada para el grupo:

DIREC T IVA EN EL GRUP O DIREC T IVA EN L A IN IC IA L IZ A C IÓ N

Siempre OnFailure

OnFailure OnFailure

Nunca Nunca

Cargos : el grupo de contenedores incurre en cargos desde la primera implementación de un contenedor de


inicialización.
Ejemplo de plantilla de Resource Manager
Para empezar, copie el siguiente código JSON en un nuevo archivo denominado azuredeploy.json . La plantilla
configura un grupo de contenedores con un contenedor de inicialización y dos contenedores de aplicaciones:
El contenedor init1 ejecuta la imagen busybox desde Docker Hub. Se suspende durante 60 segundos y, a
continuación, escribe una cadena de línea de comandos en un archivo de un volumen emptyDir.
Ambos contenedores de aplicaciones ejecutan la imagen de contenedor aci-wordcount de Microsoft:
El contenedor Hamlet ejecuta la aplicación de recuento de palabras en su configuración predeterminada y
cuenta la frecuencia de palabras en la obra de Shakespeare Hamlet.
El contenedor de la aplicación Juliet lee la cadena de línea de comandos del volumen emptyDir para
ejecutar la aplicación de recuento de palabras en su lugar, en la obra Romeo y Julieta de Shakespeare.
Para obtener más información y ejemplos del uso de la imagen de aci-wordcount , consulte Establecimiento de
variables de entorno en instancias de contenedor.

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"sku": "Standard",
"initContainers": [
{
"name": "init1",
"properties": {
"image": "busybox",
"environmentVariables": [],
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/emptydir"
}
],
"command": [
"/bin/sh",
"-c",
"sleep 60; echo python wordcount.py
http://shakespeare.mit.edu/romeo_juliet/full.html > /mnt/emptydir/command_line.txt"
]
}
}
],
"containers": [
{
"name": "hamlet",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-wordcount",
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/emptydir"
}
],
"environmentVariables": [
{
"name": "NumWords",
"value": "3"
},
{ "name": "MinLength",
"value": "5"
}
],
"resources": {
"requests": {
"memoryInGB": 1.0,
"cpu": 1
}
}
}
},
{
"name": "juliet",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-wordcount",
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/emptydir"
}
],
"command": [
"/bin/sh",
"-c",
"$(cat /mnt/emptydir/command_line.txt)"
],
"environmentVariables": [
{
"name": "NumWords",
"value": "3"
},
{ "name": "MinLength",
"value": "5"
}
],
"resources": {
"requests": {
"memoryInGB": 1.0,
"cpu": 1
}
}
}
}
],
"restartPolicy": "OnFailure",
"osType": "Linux",
"volumes": [
{
"name": "emptydir1",
"emptyDir": {}
}
]
},
"tags": {}
}
]
}
Implementación de la plantilla
Para crear un grupo de recursos, use el comando az group create.

az group create --name myResourceGroup --location eastus

Implemente la plantilla con el comando az deployment group create.

az deployment group create \


--resource-group myResourceGroup \
--template-file azuredeploy.json

En un grupo con un contenedor de inicialización, el tiempo de implementación aumenta debido al tiempo que
tardan en completarse el contenedor o contenedores de inicialización.

Visualización de registros de contenedores


Para comprobar que el contenedor de inicialización se ejecutó correctamente, vea la salida del registro de los
contenedores de la aplicación mediante el comando az container logs. El argumento --container-name especifica el
contenedor del que se van a extraer registros. En este ejemplo, extraiga los registros de los contenedores hamlet y
juliet, que muestran una salida del comando diferente:

az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name hamlet

Salida:

[('HAMLET', 386), ('HORATIO', 127), ('CLAUDIUS', 120)]

az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name juliet

Salida:

[('ROMEO', 177), ('JULIET', 134), ('CAPULET', 119)]

Pasos siguientes
Los contenedores de inicialización ayudan a realizar tareas de instalación e inicialización de los contenedores de la
aplicación. Para más información sobre cómo ejecutar contenedores basados en tareas, consulte Ejecución de
tareas en contenedores con directivas de reinicio.
Azure Container Instances proporciona otras opciones para modificar el comportamiento de los contenedores de la
aplicación. Algunos ejemplos son:
Establecimiento de variables de entorno en instancias de contenedor
Establecimiento de la línea de comandos en una instancia de contenedor para invalidar la operación de línea de
comandos predeterminada
Cómo utilizar una identidad administrada con Azure
Container Instances
23/07/2020 • 21 minutes to read • Edit Online

Utilice identidades administradas para recursos de Azure si quiere ejecutar código en Azure Container Instances
que interactúe con otros servicios de Azure, sin mantener secretos ni credenciales en el código. La característica
facilita una implementación de Azure Container Instances con una identidad administrada automáticamente en
Azure Active Directory.
En este artículo, conocerá mejor las identidades administradas de Azure Container Instances y aprenderá a
realizar las siguientes tareas:
Habilitación de una identidad asignada por el usuario o asignada por el sistema en un grupo de contenedores
Concesión de acceso a la identidad a una instancia de Azure Key Vault
Uso de la identidad administrada para acceder a un almacén de claves desde un contenedor en ejecución
Adaptación de los ejemplos para habilitar y utilizar las identidades en Azure Container Instances para tener acceso
a otros servicios de Azure. Estos ejemplos son interactivos. Aunque, en la práctica, las imágenes de contenedor
ejecutarían el código para tener acceso a servicios de Azure.

IMPORTANT
Esta funcionalidad actualmente está en su versión preliminar. Las versiones preliminares están a su disposición con la
condición de que acepte los términos de uso adicionales. Es posible que algunos de los aspectos de esta característica
cambien antes de ofrecer disponibilidad general. Actualmente las identidades administradas en Azure Container Instances
solo se admiten con contenedores de Linux, aún no con contenedores de Windows.

¿Por qué usar una identidad administrada?


Utilice una identidad administrada en un contenedor en ejecución para autenticarse en cualquier servicio que
admita la autenticación de Azure AD sin tener que administrar credenciales en el código. En el caso de servicios
que no son compatibles con la autenticación de Azure AD, puede almacenar secretos en Azure Key Vault y usar la
identidad administrada para acceder al almacén de claves y recuperar las credenciales. Para más información
sobre las identidades administradas, vea ¿Qué es Managed Identities for Azure Resources?
Habilitación de una entidad administrada
Al crear un grupo de contenedores, habilite una o varias identidades administradas estableciendo una propiedad
ContainerGroupIdentity. También puede habilitar o actualizar las identidades administradas después de que se
ejecute un grupo de contenedores; cualquiera de estas acciones hace que el grupo de contenedores se reinicie.
Para establecer las identidades en un grupo de contenedores nuevo o existente, use la CLI de Azure, una plantilla
de Resource Manager, un archivo YAML u otra herramienta de Azure.
Azure Container Instances admite ambos tipos de identidades administradas de Azure: asignada por el usuario y
asignada por el sistema. En un grupo de contenedores, puede habilitar una identidad asignada por el sistema y
una o más identidades asignadas por el usuario. Si no está familiarizado con las identidades administradas de los
recursos de Azure, consulte la introducción.
Uso de una identidad administrada
Para usar una identidad administrada, la identidad debe tener acceso a uno o más recursos de servicio de Azure
(por ejemplo, una aplicación web, un almacén de claves o una cuenta de almacenamiento) en la suscripción. El
uso de una identidad administrada en un contenedor en ejecución es parecido a usar una identidad en una
máquina virtual de Azure. Vea las instrucciones de la máquina virtual sobre el uso de un token, la CLI de Azure o
de Azure PowerShell o los SDK de Azure.
Limitaciones
Actualmente no se puede usar una identidad administrada en un grupo de contenedores que se implementa
en una red virtual.
No se puede usar una identidad administrada para extraer una imagen de Azure Container Registry al crear un
grupo de contenedores. La identidad solo está disponible dentro de un contenedor en ejecución.

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.
Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos
preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno
local.
Para iniciar Azure Cloud Shell:

O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se copia
automáticamente el código en Cloud Shell.

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.
Si decide instalar y usar la CLI localmente, para este artículo es preciso que ejecute la versión 2.0.49 o posterior de
la CLI de Azure. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea
Instalación de la CLI de Azure.

Creación de una instancia de Azure Key Vault


En los ejemplos de este artículo se usa una identidad administrada de Azure Container Instances para acceder a
un secreto de Azure Key Vault.
En primer lugar, cree un grupo de recursos denominado myResourceGroup en la ubicación eastus con el
comando az group create siguiente:
az group create --name myResourceGroup --location eastus

Use el comando az keyvault create para crear un almacén de claves. Asegúrese de especificar un nombre de
almacén de claves único.

az keyvault create \
--name mykeyvault \
--resource-group myResourceGroup \
--location eastus

Almacene un secreto de ejemplo en el almacén de claves con el comando az keyvault secret set:

az keyvault secret set \


--name SampleSecret \
--value "Hello Container Instances" \
--description ACIsecret --vault-name mykeyvault

Continúe con los siguientes ejemplos para acceder al almacén de claves mediante una identidad administrada
asignada por el usuario o asignada por el sistema en Azure Container Instances.

Ejemplo 1: Uso de una identidad asignada por el usuario para acceder


a Azure Key Vault
Creación de una identidad
En primer lugar, cree una identidad en la suscripción con el comando az identity create. Puede usar el mismo
grupo de recursos empleado para crear el almacén de claves o uno diferente.

az identity create \
--resource-group myResourceGroup \
--name myACIId

Para utilizar la identidad en los pasos siguientes, use el comando az identity show para almacenar en variables los
identificadores de la entidad de servicio y del recurso de la identidad.

# Get service principal ID of the user-assigned identity


spID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)

# Get resource ID of the user-assigned identity


resourceID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query id --output tsv)

Concesión de acceso a la identidad asignada por el usuario al almacén de claves


Ejecute el comando az keyvault set-policy siguiente para establecer una directiva de acceso en el almacén de
claves. En el ejemplo siguiente se permite que la identidad asignada por el usuario obtenga secretos del almacén
de claves:
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--secret-permissions get

Habilitación de una identidad asignada por el usuario en un grupo de contenedores


Ejecute el siguiente comando az container create para crear una instancia de contenedor basada en la imagen
azure-cli de Microsoft. En este ejemplo se proporciona un solo grupo de contenedores que puede usarse para
ejecutar de forma interactiva la CLI de Azure con el fin de acceder a otros servicios de Azure. En esta sección, solo
se usa el sistema operativo base. Puede encontrar un ejemplo de cómo usar la CLI de Azure en el contenedor en
Habilitación de la identidad asignada por el sistema en un grupo de contenedores.
El parámetro --assign-identity pasa la identidad administrada asignada por el usuario al grupo. El comando de
ejecución prolongada mantiene el contenedor en ejecución. En este ejemplo se usa el mismo grupo de recursos
empleado para crear el almacén de claves, pero puede especificarse otro distinto.

az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity $resourceID \
--command-line "tail -f /dev/null"

En unos segundos, debería recibir una respuesta de la CLI de Azure que indica que la implementación ha
finalizado. Compruebe su estado con el comando az container show.

az container show \
--resource-group myResourceGroup \
--name mycontainer

La sección identity de la salida tiene un aspecto similar al siguiente, que muestra que la identidad está
establecida en el grupo de contenedores. El valor de principalID en userAssignedIdentities corresponde a la
entidad de servicio de la identidad que creó en Azure Active Directory:

[...]
"identity": {
"principalId": "null",
"tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-0903-4b79-a55a-
xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
"clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
"principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
}
}
},
[...]

Uso de la identidad asignada por el usuario para obtener un secreto del almacén de claves
Ahora puede usar la identidad administrada para acceder al almacén de claves de la instancia de contenedor en
ejecución. Inicie primero un shell de Bash en el contenedor:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"

Ejecute los siguientes comandos del shell de Bash en el contenedor. Para obtener un token de acceso a fin de usar
Azure Active Directory para autenticarse en el almacén de claves, ejecute el siguiente comando:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-
01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true -s

Salida:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN
3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expir
es_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","tok
en_type":"Bearer"}

Para almacenar el token de acceso en una variable para usar en los siguientes comandos para autenticarse,
ejecute el siguiente comando:

token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-
01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

Ahora puede usar el token de acceso para autenticarse en el almacén de claves y leer un secreto. No olvide
sustituir el nombre del almacén de claves en la dirección URL(https://mykeyvault.vault.azure.net/... ):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization:


Bearer $token"

La respuesta será similar a la siguiente, que muestra el secreto. En el código, podría analizar esta salida para
obtener el secreto. Utilice luego el secreto en una operación posterior para tener acceso a otro recurso de Azure.

{"value":"Hello Container
Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxx
xxxxxxxxxx","attributes":
{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-
encoding":"utf-8"}}

Ejemplo 2: Uso de una identidad asignada por el sistema para acceder


a Azure Key Vault
Habilitación de una identidad asignada por el sistema en un grupo de contenedores
Ejecute el siguiente comando az container create para crear una instancia de contenedor basada en la imagen
azure-cli de Microsoft. En este ejemplo se proporciona un solo grupo de contenedores que puede usarse para
ejecutar de forma interactiva la CLI de Azure con el fin de acceder a otros servicios de Azure.
El parámetro --assign-identity sin ningún valor adicional habilita una identidad administrada asignada por el
sistema en el grupo. El ámbito de la identidad es el grupo de recursos del grupo de contenedores. El comando de
ejecución prolongada mantiene el contenedor en ejecución. En este ejemplo se usa el mismo grupo de recursos
empleado para crear el almacén de claves, que se encuentra en el ámbito de la identidad.
# Get the resource ID of the resource group
rgID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity


az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mcr.microsoft.com/azure-cli \
--assign-identity --scope $rgID \
--command-line "tail -f /dev/null"

En unos segundos, debería recibir una respuesta de la CLI de Azure que indica que la implementación ha
finalizado. Compruebe su estado con el comando az container show.

az container show \
--resource-group myResourceGroup \
--name mycontainer

La sección identity de la salida tiene un aspecto similar al siguiente, que muestra que se crea una identidad
asignada por el sistema en Azure Active Directory:

[...]
"identity": {
"principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
[...]

Establezca una variable en el valor de principalId (identificador de la entidad de servicio) de la identidad para su
uso en pasos posteriores.

spID=$(az container show \


--resource-group myResourceGroup \
--name mycontainer \
--query identity.principalId --out tsv)

Concesión de acceso al grupo de contenedores al almacén de claves


Ejecute el comando az keyvault set-policy siguiente para establecer una directiva de acceso en el almacén de
claves. En el ejemplo siguiente se permite que la identidad administrada asignada por el sistema obtenga secretos
del almacén de claves:

az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--secret-permissions get

Uso de la identidad del grupo de contenedores para obtener un secreto del almacén de claves
Ahora puede usar la identidad administrada para acceder al almacén de claves de la instancia de contenedor en
ejecución. Inicie primero un shell de Bash en el contenedor:
az container exec \
--resource-group myResourceGroup \
--name mycontainer \
--exec-command "/bin/bash"

Ejecute los siguientes comandos del shell de Bash en el contenedor. En primer lugar, inicie sesión en la CLI de
Azure mediante la identidad administrada:

az login --identity

En el contenedor en ejecución, recupere el secreto del almacén de claves:

az keyvault secret show \


--name SampleSecret \
--vault-name mykeyvault --query value

Se recupera el valor del secreto:

"Hello Container Instances"

Habilitación de la identidad administrada con una plantilla de Resource


Manager
Para habilitar una identidad administrada en un grupo de contenedores con una plantilla de Resource Manager,
establezca la propiedad identity del objeto Microsoft.ContainerInstance/containerGroups con un objeto
ContainerGroupIdentity . Los siguientes fragmentos de código muestran la propiedad identity configurada para
diferentes escenarios. Vea Referencia de plantilla de Resource Manager. Especifique un valor mínimo de
apiVersion de 2018-10-01 .

Identidad asignada por el usuario


Una identidad asignada por el usuario es un identificador de recurso del formulario:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userA
ssignedIdentities/{identityName}"

Puede habilitar una o más identidades asignadas por el usuario.

"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}

Identidad asignada por el sistema

"identity": {
"type": "SystemAssigned"
}

Identidades asignadas por el sistema y por el usuario


En un grupo de contenedores, puede habilitar una identidad asignada por el sistema y una o más identidades
asignadas por el usuario.

"identity": {
"type": "System Assigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...

Habilitación de una identidad administrada con un archivo YAML


Para habilitar una identidad administrada en un grupo de contenedores implementados con un archivo YAML,
incluya el siguiente código YAML. Especifique un valor mínimo de apiVersion de 2018-10-01 .
Identidad asignada por el usuario
Una identidad asignada por el usuario es un identificador de recurso del formulario.

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userA
ssignedIdentities/{identityName}'

Puede habilitar una o más identidades asignadas por el usuario.

identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}

Identidad asignada por el sistema

identity:
type: SystemAssigned

Identidades asignadas por el sistema y por el usuario


En un grupo de contenedores, puede habilitar una identidad asignada por el sistema y una o más identidades
asignadas por el usuario.

identity:
type: SystemAssigned, UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}

Pasos siguientes
En este artículo, ha conocido las identidades administradas de Azure Container Instances y ha aprendido a realizar
las siguientes tareas:
Habilitación de una identidad asignada por el usuario o asignada por el sistema en un grupo de contenedores
Concesión de acceso a la identidad a una instancia de Azure Key Vault
Uso de la identidad administrada para acceder a un almacén de claves desde un contenedor en ejecución
Obtenga más información sobre las identidades administradas para recursos de Azure.
Vea un ejemplo de Azure SDK para Go sobre el uso de una identidad administrada para acceder a un
almacén de claves desde Azure Container Instances.
Implementación de instancias de contenedor que
usan recursos de GPU
23/07/2020 • 11 minutes to read • Edit Online

Para ejecutar determinadas cargas de trabajo de proceso intensivo en Azure Container Instances, implemente los
grupos de contenedores con recursos de GPU. Las instancias de contenedor en el grupo pueden acceder a una o
varias GPU NVIDIA Tesla mientras se ejecutan cargas de contenedor como CUDA y aplicaciones de aprendizaje
profundo.
En este artículo se muestra cómo agregar recursos de GPU al implementar un grupo de contenedores mediante
el uso de un archivo YAML o una plantilla de Resource Manager. También puede especificar los recursos de GPU
al implementar una instancia de contenedor mediante Azure Portal.

IMPORTANT
Esta funcionalidad actualmente está en su versión preliminar y se aplican algunas limitaciones. Las versiones preliminares
están a su disposición con la condición de que acepte los términos de uso adicionales. Es posible que algunos de los
aspectos de esta característica cambien antes de ofrecer disponibilidad general.

Limitaciones de vista previa


En la versión preliminar, las siguientes limitaciones se aplican al uso de recursos de GPU en grupos de
contenedores.
Disponibilidad en regiones
REGIO N S SO SK U DE GP U DISP O N IB L ES

Este de EE. UU., Oeste de Europa, Linux K80, P100, V100


Oeste de EE. UU. 2

Sudeste de Asia Linux P100, V100

Centro de la India Linux V100

Norte de Europa Linux K80

Con el tiempo se admitirán más regiones.


Tipos de sistemas operativos compatibles : solo Linux.
Limitaciones adicionales : no se pueden usar los recursos de GPU al implementar un grupo de contenedores
en una red virtual.

Acerca de los recursos de GPU


IMPORTANT
Los recursos de GPU solo están disponibles bajo solicitud. Para solicitar acceso a los recursos de GPU, envíe una solicitud
de soporte técnico de Azure.

Recuento y SKU
Para usar GPU en una instancia de contenedor, especifique un recurso de GPU con la siguiente información:
Recuento : el número de GPU: 1 , 2 o 4 .
SKU : SKU de GPU: K80 , P100 o V100 . Cada SKU asigna la GPU NVIDIA Tesla a una de las siguientes
familias de máquinas virtuales habilitadas para GPU de Azure:

SK U FA M IL IA DE VM

K80 NC

P100 NCv2

V100 NCv3

Disponibilidad de recursos
REC UEN TO DE USO M Á XIM O DE M EM O RIA A L M A C EN A M IEN
SO SK U DE GP U GP U CPU M Á XIM A ( GB ) TO ( GB )

Linux K80 1 6 56 50

Linux K80 2 12 112 50

Linux K80 4 24 224 50

Linux P100 1 6 112 50

Linux P100 2 12 224 50

Linux P100 4 24 448 50

Linux V100 1 6 112 50

Linux V100 2 12 224 50

Linux V100 4 24 448 50

Al implementar recursos de GPU, establezca los recursos de CPU y memoria apropiados para la carga de trabajo,
hasta los valores máximos mostrados en la siguiente anterior. Estos valores actualmente son mayores que los
recursos de CPU y memoria disponibles en los grupos de contenedores sin recursos de GPU.
Cosas que debe saber
Tiempo de implementación : la creación de un grupo de contenedores que contienen recursos de GPU
tarda hasta 8-10 minutos . Esto se debe al tiempo adicional para aprovisionar y configurar una VM de
GPU en Azure.
Precios : igual que en los grupos de contenedores sin recursos de GPU, Azure factura por los recursos
consumidos a lo largo de la duración de un grupo de contenedores con recursos GPU. La duración se
calcula desde el momento en que se extrae la imagen del primer contenedor hasta que el grupo de
contenedores finaliza. No incluye el tiempo de implementación del grupo de contenedores.
Consulte los detalles de los precios.
Controladores de CUDA : las instancias de contenedor con los recursos de GPU se aprovisionan
previamente con controladores de NVIDIA CUDA y tiempos de ejecución de contenedor, por lo que puede
usar imágenes de contenedor desarrolladas para cargas de trabajo de CUDA.
Se admite CUDA 9.0 en esta fase. Por ejemplo, puede usar las siguientes imágenes base para su archivo de
Docker:
nvidia/cuda:9.0-base-ubuntu16.04
tensorflow/tensorflow: 1.12.0-gpu-py3

Ejemplo de YAML
Una forma de agregar los recursos de GPU es implementar un grupo de contenedores mediante una archivo
YAML. Copie el siguiente archivo YAML en un nuevo archivo denominado gpu-deploy-aci.yaml y, después,
guárdelo. Este archivo YAML crea un grupo de contenedores denominado gpucontainergroup en el que se
especifica una instancia de contenedor con una GPU K80. La instancia ejecuta una aplicación de adición de vector
CUDA de ejemplo. Las solicitudes de recursos son suficientes para ejecutar la carga de trabajo.

additional_properties: {}
apiVersion: '2019-12-01'
name: gpucontainergroup
properties:
containers:
- name: gpucontainer
properties:
image: k8s-gcrio.azureedge.net/cuda-vector-add:v0.1
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
gpu:
count: 1
sku: K80
osType: Linux
restartPolicy: OnFailure

Implemente el grupo de contenedores con el comando az container create y especifique el nombre del archivo
YAML para el parámetro --file . Deberá proporcionar el nombre de un grupo de recursos y una ubicación para
el grupo de contenedores como eastus que admita los recursos de GPU.

az container create --resource-group myResourceGroup --file gpu-deploy-aci.yaml --location eastus

La implementación tarda varios minutos en completarse. A continuación, el contenedor se inicia y ejecuta una
operación de adición de vector CUDA. Ejecute el comando az container logs para ver la salida del registro:

az container logs --resource-group myResourceGroup --name gpucontainergroup --container-name gpucontainer

Salida:
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

Ejemplo de plantilla de Resource Manager


Otra manera de implementar un grupo de contenedores con recursos de GPU es usar una plantilla de Resource
Manager. Para empezar, cree un archivo llamado gpudeploy.json y copie el siguiente código JSON en él. Este
ejemplo implementa una instancia de contenedor con una GPU V100 que ejecuta un trabajo de aprendizaje
TensorFlow en relación con el conjunto de datos MNIST. Las solicitudes de recursos son suficientes para ejecutar
la carga de trabajo.

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "gpucontainergrouprm",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"containername": "gpucontainer",
"containerimage": "microsoft/samples-tf-mnist-demo:gpu"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('containername')]",
"properties": {
"image": "[variables('containerimage')]",
"resources": {
"requests": {
"cpu": 4.0,
"memoryInGb": 12.0,
"gpu": {
"count": 1,
"sku": "V100"
}
}
}
}
}
],
"osType": "Linux",
"restartPolicy": "OnFailure"
}
}
]
}
Implemente la plantilla con el comando az deployment group create. Deberá proporcionar el nombre de un
grupo de recursos que se creó en una región como eastus que admite recursos de GPU.

az deployment group create --resource-group myResourceGroup --template-file gpudeploy.json

La implementación tarda varios minutos en completarse. A continuación, el contenedor se inicia y ejecuta el


trabajo de TensorFlow. Ejecute el comando az container logs para ver la salida del registro:

az container logs --resource-group myResourceGroup --name gpucontainergrouprm --container-name gpucontainer

Salida:

2018-10-25 18:31:10.155010: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports


instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-10-25 18:31:10.305937: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with
properties:
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: ccb6:00:00.0
totalMemory: 11.92GiB freeMemory: 11.85GiB
2018-10-25 18:31:10.305981: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow
device (/device:GPU:0) -> (device: 0, name: Tesla K80, pci bus id: ccb6:00:00.0, compute capability: 3.7)
2018-10-25 18:31:14.941723: I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library
libcupti.so.8.0 locally
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting /tmp/tensorflow/input_data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting /tmp/tensorflow/input_data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting /tmp/tensorflow/input_data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting /tmp/tensorflow/input_data/t10k-labels-idx1-ubyte.gz
Accuracy at step 0: 0.097
Accuracy at step 10: 0.6993
Accuracy at step 20: 0.8208
Accuracy at step 30: 0.8594
...
Accuracy at step 990: 0.969
Adding run metadata for 999

Limpieza de recursos
Como el uso de recursos de GPU puede ser caro, asegúrese de que los contenedores no se ejecutan
inesperadamente durante largos períodos. Supervise los contenedores en Azure Portal o consulte el estado de un
grupo de contenedores con el comando az container show. Por ejemplo:

az container show --resource-group myResourceGroup --name gpucontainergroup --output table

Cuando termine de trabajar con las instancias de contenedor que creó, elimínelas con los siguientes comandos:

az container delete --resource-group myResourceGroup --name gpucontainergroup -y


az container delete --resource-group myResourceGroup --name gpucontainergrouprm -y

Pasos siguientes
Obtenga más información sobre cómo implementar un grupo de contenedores con un archivo YAML o una
plantilla de Resource Manager.
Obtenga más información sobre los tamaños de máquinas virtuales optimizadas para GPU en Azure.
Habilitación de un punto de conexión TLS en un
contenedor sidecar
23/07/2020 • 13 minutes to read • Edit Online

En este artículo se muestra cómo crear un grupo de contenedores con un contenedor de aplicaciones y un
contenedor sidecar que ejecutan un proveedor de TLS/SSL. Al configurar un grupo de contenedores con un punto
de conexión TLS independiente, se habilitan las conexiones TLS para la aplicación sin cambiar el código de la
aplicación.
Va a configurar un grupo de contenedores formado por dos contenedores:
Un contenedor de aplicaciones que ejecute una aplicación web sencilla mediante la imagen pública aci-
helloworld de Microsoft.
Un contenedor sidecar que ejecuta la imagen pública Nginx, configurada para usar TLS.
En este ejemplo, el grupo de contenedores solo expone el puerto 443 para Nginx con su dirección IP pública. Nginx
enruta las solicitudes HTTPS a la aplicación web complementaria, que escucha internamente en el puerto 80. Puede
adaptar el ejemplo para las aplicaciones de contenedor que escuchan en otros puertos.
Consulte Pasos siguientes para conocer otros enfoques para habilitar TLS en un grupo de contenedores.

Uso de Azure Cloud Shell


En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador.
Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos
preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.
Para iniciar Azure Cloud Shell:

O P C IÓ N E JEM P LO O VÍN C ULO

Seleccione Pruébelo en la esquina superior derecha de un


bloque de código. Solo con seleccionar Pruébelo no se copia
automáticamente el código en Cloud Shell.

Vaya a https://shell.azure.com o seleccione el botón Iniciar


Cloud Shell para abrir Cloud Shell en el explorador.

Seleccione el botón Cloud Shell en la barra de menús de la


esquina superior derecha de Azure Portal.

Para ejecutar el código de este artículo en Azure Cloud Shell:


1. Inicie Cloud Shell.
2. Seleccione el botón Copiar de un bloque de código para copiar el código.
3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl +Mayús +V en Windows y Linux, o
bien seleccione Cmd +Mayús +V en macOS.
4. Seleccione Entrar para ejecutar el código.
Puede usar Azure Cloud Shell o una instalación local de la CLI de Azure para completar este artículo. Si desea
usarlos de forma local, se recomienda la versión 2.0.55 o posterior. Ejecute az --version para encontrar la versión.
Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Creación de un certificado autofirmado


Para configurar Nginx como un proveedor de TLS, necesita un certificado TLS/SSL. En este artículo se muestra
cómo crear y configurar un certificado TLS/SSL autofirmado. Para escenarios de producción, debe obtener un
certificado de una entidad de certificación.
Para crear un certificado TLS/SSL autofirmado, utilice la herramienta OpenSSL, disponible en Azure Cloud Shell y
muchas distribuciones de Linux o una herramienta de cliente comparable en su sistema operativo.
En primer lugar, cree una solicitud de certificado (archivo .csr) en un directorio de trabajo local:

openssl req -new -newkey rsa:2048 -nodes -keyout ssl.key -out ssl.csr

Siga las indicaciones para agregar la información de identificación. En “Nombre común”, escriba el nombre de host
asociado al certificado. Cuando se le solicite una contraseña, presione Entrar sin escribir, para no tener que
introducir una contraseña.
Ejecute el siguiente comando para crear el certificado autofirmado (archivo .crt) desde la solicitud de certificado.
Por ejemplo:

openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt

Ahora debería ver tres archivos en el directorio: la solicitud de certificado ( ssl.csr ), la clave privada ( ssl.key ) y el
certificado autofirmado ( ssl.crt ). Usará ssl.key y ssl.crt en los pasos posteriores.

Configuración de Nginx para usar TLS


Crear el archivo de configuración de Nginx
En esta sección, creará un archivo de configuración para Nginx para usar TLS. Para empezar, copie el siguiente texto
en un nuevo archivo denominado nginx.conf . En Azure Cloud Shell, puede usar Visual Studio Code para crear el
archivo en el directorio de trabajo:

code nginx.conf

En location , establezca proxy_pass con el puerto correcto para la aplicación. En este ejemplo, se establece el
puerto 80 para el contenedor aci-helloworld .

# nginx Configuration File


# https://wiki.nginx.org/Configuration

# Run as a less privileged user for security reasons.


user nginx;

worker_processes auto;

events {
worker_connections 1024;
}

pid /var/run/nginx.pid;

http {
http {

#Redirect to https, using 307 instead of 301 to preserve post data

server {
listen [::]:443 ssl;
listen 443 ssl;

server_name localhost;

# Protect against the BEAST attack by not using SSLv3 at all. If you need to support older browsers
(IE6) you may need to add
# SSLv3 to the list of protocols below.
ssl_protocols TLSv1.2;

# Ciphers set to best allow protection from Beast, while providing forwarding secrecy, as defined by
Mozilla - https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-
GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-
RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-
SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-
AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-
SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-
SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;
ssl_prefer_server_ciphers on;

# Optimize TLS/SSL by caching session parameters for 10 minutes. This cuts down on the number of
expensive TLS/SSL handshakes.
# The handshake is the most CPU-intensive operation, and by default it is re-negotiated on every
new/parallel connection.
# By enabling a cache (of type "shared between all Nginx workers"), we tell the client to re-use the
already negotiated state.
# Further optimization can be achieved by raising keepalive_timeout, but that shouldn't be done unless
you serve primarily HTTPS.
ssl_session_cache shared:SSL:10m; # a 1mb cache can hold about 4000 sessions, so we can hold 40000
sessions
ssl_session_timeout 24h;

# Use a higher keepalive timeout to reduce the need for repeated handshakes
keepalive_timeout 300; # up from 75 secs default

# remember the certificate for a year and automatically connect to HTTPS


add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';

ssl_certificate /etc/nginx/ssl.crt;
ssl_certificate_key /etc/nginx/ssl.key;

location / {
proxy_pass http://localhost:80; # TODO: replace port if app listens on port other than 80

proxy_set_header Connection "";


proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}

Archivo de configuración y secretos con codificación Base64


Codifique en Base 64 el archivo de configuración de Nginx, el certificado TLS/SSL y la clave TLS. En la sección
siguiente, escriba el contenido codificado en un archivo YAML que se use para implementar el grupo de
contenedores.
cat nginx.conf | base64 > base64-nginx.conf
cat ssl.crt | base64 > base64-ssl.crt
cat ssl.key | base64 > base64-ssl.key

Implementar un grupo de contenedores


Ahora implemente el grupo de contenedores especificando las configuraciones de contenedor en un archivo YAML.
Crear un archivo YAML
Copie el siguiente código YAML en un nuevo archivo denominado deploy-aci.yaml . En Azure Cloud Shell, puede
usar Visual Studio Code para crear el archivo en el directorio de trabajo:

code deploy-aci.yaml

Escriba el contenido de los archivos con codificación Base64 donde se indique en secret . Por ejemplo, aplique
cat en cada uno de los archivos con codificación Base64 para ver su contenido. Durante la implementación, estos
archivos se agregan a un volumen secreto del grupo de contenedores. En este ejemplo, el volumen secreto se
monta en el contenedor de Nginx.
api-version: 2019-12-01
location: westus
name: app-with-ssl
properties:
containers:
- name: nginx-with-ssl
properties:
image: nginx
ports:
- port: 443
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx
- name: my-app
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
ports:
- port: 80
protocol: TCP
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumes:
- secret:
ssl.crt: <Enter contents of base64-ssl.crt here>
ssl.key: <Enter contents of base64-ssl.key here>
nginx.conf: <Enter contents of base64-nginx.conf here>
name: nginx-config
ipAddress:
ports:
- port: 443
protocol: TCP
type: Public
osType: Linux
tags: null
type: Microsoft.ContainerInstance/containerGroups

Implementación del grupo de contenedores


Cree un grupo de recursos con el comando az group create:

az group create --name myResourceGroup --location westus

Implemente el grupo de contenedores con el comando az container create y pase el archivo YAML como un
argumento.

az container create --resource-group <myResourceGroup> --file deploy-aci.yaml

Visualización del estado de la implementación


Para ver el estado de la implementación, use el siguiente comando az container show:

az container show --resource-group <myResourceGroup> --name app-with-ssl --output table

En una implementación correcta, el resultado es similar al siguiente:


Name ResourceGroup Status Image IP:ports
Network CPU/Memory OsType Location
------------ --------------- -------- ------------------------------------------------------- -------------
------ --------- --------------- -------- ----------
app-with-ssl myresourcegroup Running nginx, mcr.microsoft.com/azuredocs/aci-helloworld
52.157.22.76:443 Public 1.0 core/1.5 gb Linux westus

Comprobación de la conexión TLS


Use el explorador para ir a la dirección IP pública del grupo de contenedores. Por ejemplo, la dirección IP que se
muestra en este ejemplo es 52.157.22.76 , así que la URL es https://52.157.22.76 . Debe usar HTTPS para ver la
aplicación en ejecución, debido a la configuración del servidor de Nginx. Se produce un error al intentar conectar
mediante HTTP.

NOTE
Como en este ejemplo se usa un certificado autofirmado y no uno procedente de una entidad de certificación, el explorador
muestra una advertencia de seguridad al conectarse al sitio a través de HTTPS. Es posible que tenga que aceptar la
advertencia o ajustar la configuración del explorador o del certificado para pasar a la página. Este comportamiento es normal.

Pasos siguientes
En este artículo se ha mostrado cómo configurar un contenedor de Nginx para habilitar las conexiones TLS con una
aplicación web en ejecución en el grupo de contenedores. Puede adaptar este ejemplo a aplicaciones que escuchen
en puertos distintos al puerto 80. También puede actualizar el archivo de configuración de Nginx para que redirija
automáticamente las conexiones del servidor del puerto 80 (HTTP) con el fin de usar HTTPS.
Aunque en este artículo se usa Nginx en el contenedor sidecar, puede usar otro proveedor de TLS, como Caddy.
Si implementa el grupo de contenedores en una red virtual de Azure, hay otras opciones para habilitar un punto de
conexión TLS para una instancia de contenedor de back-end, entre ellas:
Azure Functions Proxies
Azure API Management
Azure Application Gateway: consulte una plantilla de implementación de muestra.
Exposición de una dirección IP estática para un grupo
de contenedores
23/07/2020 • 7 minutes to read • Edit Online

En este artículo se muestra una manera de exponer una dirección IP pública estática para un grupo de
contenedores mediante una instancia de Azure Application Gateway. Siga estos pasos cuando necesite un punto de
entrada estático para una aplicación en contenedor orientada externamente que se ejecute en Azure Container
Instances.
En este artículo se usa la CLI de Azure para crear los recursos para este escenario:
Una red virtual de Azure
Un grupo de contenedores implementado en la red virtual que hospeda una aplicación web pequeña
Una instancia de Application Gateway con una dirección IP de front-end pública, un agente de escucha para
hospedar un sitio web en la puerta de enlace y una ruta al grupo de contenedores de back-end
Mientras Application Gateway se esté ejecutando y el grupo de contenedores exponga una dirección IP privada
estable en la subred delegada de la red, se podrá acceder al grupo de contenedores en esta dirección IP pública.

NOTE
Azure cobra por una instancia de Application Gateway en función de la cantidad de tiempo que la puerta de enlace está
aprovisionada y disponible, así como de la cantidad de datos que procesa. Consulte Precios.

Creación de una red virtual


En un caso típico, es posible que ya tenga una instancia de Azure Virtual Network. Si no la tiene, cree una tal y
como se muestra con los siguientes comandos de ejemplo. La red virtual necesita subredes independientes para la
instancia de Application Gateway y el grupo de contenedores.
Si es necesario, cree un grupo de recursos de Azure. Por ejemplo:

az group create --name myResourceGroup --location eastus

Cree una red virtual con el comando az network vnet create. Este comando crea la subred myAGSubnet en la red.

az network vnet create \


--name myVNet \
--resource-group myResourceGroup \
--location eastus \
--address-prefix 10.0.0.0/16 \
--subnet-name myAGSubnet \
--subnet-prefix 10.0.1.0/24

Use el comando az network vnet subnet create para crear una subred para el grupo de contenedores de back-end.
Aquí se denomina myACISubnet.
az network vnet subnet create \
--name myACISubnet \
--resource-group myResourceGroup \
--vnet-name myVNet \
--address-prefix 10.0.2.0/24

Use el comando az network public-ip create para crear un recurso de IP pública estática. En un paso posterior, esta
dirección se configura como el front-end de Application Gateway .

az network public-ip create \


--resource-group myResourceGroup \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard

Creación de un grupo de contenedores


Ejecute el siguiente comando az container create para crear un grupo de contenedores en la red virtual que
configuró en el paso anterior.
El grupo se implementa en la subred myACISubnet y contiene una única instancia denominada appcontainer que
extrae la imagen aci-helloworld . Como se muestra en otros artículos de la documentación, esta imagen
empaqueta una pequeña aplicación web escrita en Node.js que sirve una página HTML estática.

az container create \
--name appcontainer \
--resource-group myResourceGroup \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--vnet myVNet \
--subnet myACISubnet

Si se implementa correctamente, se asigna una dirección IP privada el grupo de contenedores en la red virtual. Por
ejemplo, ejecute el siguiente comando az container show para recuperar la dirección IP del grupo:

az container show \
--name appcontainer --resource-group myResourceGroup \
--query ipAddress.ip --output tsv

La salida es parecida a esta: 10.0.2.4 .


Para usarla en un paso posterior, guarde la dirección IP en una variable de entorno:

ACI_IP=$(az container show \


--name appcontainer \
--resource-group myResourceGroup \
--query ipAddress.ip --output tsv)

Creación de una puerta de enlace de aplicaciones


Cree una instancia de Application Gateway en la red virtual siguiendo los pasos que se describen en la guía de
inicio rápido de Application Gateway. El comando az network application-gateway create siguiente crea una puerta
de enlace con una dirección IP de front-end pública y una ruta al grupo de contenedores de back-end. Consulte la
documentación de Application Gateway para obtener más información sobre la configuración de la puerta de
enlace.
az network application-gateway create \
--name myAppGateway \
--location eastus \
--resource-group myResourceGroup \
--capacity 2 \
--sku Standard_v2 \
--http-settings-protocol http \
--public-ip-address myAGPublicIPAddress \
--vnet-name myVNet \
--subnet myAGSubnet \
--servers "$ACI_IP"

Azure puede tardar hasta 15 minutos en crear la puerta de enlace de aplicaciones.

Prueba de la dirección IP pública


Ahora puede probar el acceso a la aplicación web que se ejecuta en el grupo de contenedores subyacente a
Application Gateway.
Ejecute el comando az network public-ip show para recuperar la dirección IP pública de front-end de la puerta de
enlace:

az network public-ip show \


--resource-group myresourcegroup \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv

La salida es una dirección IP pública, similar a: 52.142.18.133 .


Para ver la aplicación web en ejecución cuando esté configurada correctamente, vaya a la dirección IP pública de la
puerta de enlace en el explorador. El acceso correcto es similar al siguiente:

Pasos siguientes
Consulte una plantilla de inicio rápido para crear un grupo de contenedores con una instancia de contenedor de
WordPress como un servidor back-end subyacente a Application Gateway.
También puede configurar una instancia de Application Gateway con un certificado para la terminación SSL.
Consulte la introducción y el tutorial.
En función de su escenario, considere la posibilidad de usar otras soluciones de equilibrio de carga de Azure con
Azure Container Instances. Por ejemplo, use Azure Traffic Manager para distribuir el tráfico entre varias
instancias de contenedor y entre varias regiones. Consulte esta entrada de blog.
Montaje de un recurso compartido de archivos de
Azure en Azure Container Instances
23/07/2020 • 12 minutes to read • Edit Online

De forma predeterminada, Azure Container Instances no tiene estado. Si el contenedor se bloquea o se detiene,
se pierde todo su estado. Para conservar el estado más allá de la duración del contenedor, debe montar un
volumen desde un almacén externo. Como se muestra en este artículo, Azure Container Instances puede
montar un recurso compartido de archivos de Azure creado con Azure Files. Azure Files ofrece recursos
compartidos de archivos totalmente administrados en Azure Storage, a los que se puede acceder mediante el
protocolo de bloque de mensajes del servidor (SMB) estándar. El uso de un recurso compartido de archivos de
Azure con Azure Container Instances ofrece características de uso compartido de archivos similares al uso de
un recurso compartido de archivo de Azure con Azure Virtual Machines.

NOTE
El montaje de un recurso compartido de Azure Files está actualmente restringido a los contenedores Linux. Busque las
diferencias de plataforma actuales en la Introducción.
Montar un recurso compartido de Azure Files en una instancia de contenedor es similar a un montaje de enlace de
Docker. Tenga en cuenta que si monta un recurso compartido en un directorio de contenedor en el que existen archivos
o directorios, estos archivos o directorios quedan ocultos por el montaje y no son accesibles mientras se ejecuta el
contenedor.

Creación de un recurso compartido de archivos de Azure


Antes de utilizar un recurso compartido de archivos de Azure en Azure Container Instances, debe crearlo.
Ejecute el script siguiente para crear una cuenta de almacenamiento para hospedar el recurso compartido de
archivos y el propio recurso compartido. El nombre de la cuenta de almacenamiento debe ser único
globalmente, por lo que el script agrega un valor aleatorio en la cadena base.

# Change these four parameters as needed


ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare

# Create the storage account with the parameters


az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS

# Create the file share


az storage share create \
--name $ACI_PERS_SHARE_NAME \
--account-name $ACI_PERS_STORAGE_ACCOUNT_NAME

Obtención de las credenciales de almacenamiento


Para montar un recurso compartido de archivos de Azure como un volumen en Azure Container Instances,
necesita tres valores: el nombre de la cuenta de almacenamiento, el nombre del recurso compartido y la clave
de acceso de almacenamiento.
Nombre de la cuenta de almacenamiento : si ha usado el script anterior, el nombre de la cuenta de
almacenamiento se almacena en la variable $ACI_PERS_STORAGE_ACCOUNT_NAME . Para ver el nombre de la
cuenta, escriba:

echo $ACI_PERS_STORAGE_ACCOUNT_NAME

Nombre del recurso compar tido : este valor ya se conoce (se define como acishare en el script
anterior)
Clave de cuenta de almacenamiento : este valor puede encontrarse con el siguiente comando:

STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name


$ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv)
echo $STORAGE_KEY

Implementar contenedor y montar volumen: CLI


Para montar un recurso compartido de archivos de Azure como volumen en un contenedor mediante la CLI de
Azure, especifique el recurso compartido y el punto de montaje del volumen al crear el contenedor con az
container create. Si ha seguido los pasos anteriores, puede montar el recurso compartido que creó
anteriormente mediante el siguiente comando para crear un contenedor:

az container create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles \
--image mcr.microsoft.com/azuredocs/aci-hellofiles \
--dns-name-label aci-demo \
--ports 80 \
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $STORAGE_KEY \
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path /aci/logs/

El valor --dns-name-label debe ser único dentro de la región de Azure en la que se crea la instancia de
contenedor. Actualice el valor del comando anterior si recibe un mensaje de error de etiqueta de nombre
DNS al ejecutar el comando.

Administración de archivos en el volumen montado


Una vez que se inicie el contenedor, puede usar la aplicación web sencilla que se implementó mediante la
imagen aci-hellofiles de Microsoft para crear archivos de texto pequeños en el recurso compartido de archivos
de Azure de la ruta de montaje que especificó. Obtenga el nombre de dominio completo (FQDN) de la
aplicación web con el comando az container show:

az container show --resource-group $ACI_PERS_RESOURCE_GROUP \


--name hellofiles --query ipAddress.fqdn --output tsv

Tras guardar el texto con la aplicación, puede usar Azure Portal o una herramienta como el Explorador de
Microsoft Azure Storage para recuperar e inspeccionar el archivo o archivos escritos en el recurso compartido
de archivos.
Implementar contenedor y montar volumen: YAML
También puede implementar un grupo de contenedores y montar un volumen en un contenedor con la CLI de
Azure y una plantilla de YAML. La implementación mediante la plantilla YAML es el método preferido al
implementar grupos de contenedores que constan de varios contenedores.
La siguiente plantilla de YAML define un grupo de contenedores con un contenedor creado con la imagen
aci-hellofiles . El contenedor monta el recurso compartido de archivos de Azure acishare creado
anteriormente como un volumen. Donde se indique, escriba la clave de almacenamiento y el nombre de la
cuenta de almacenamiento que hospeda el recurso compartido de archivos.
Al igual que en el ejemplo de la CLI, el valor dnsNameLabel debe ser único dentro de la región de Azure en la
que se crea la instancia de contenedor. Si es necesario, actualice el valor en el archivo YAML.

apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
containers:
- name: hellofiles
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-hellofiles
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /aci/logs/
name: filesharevolume
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- port: 80
dnsNameLabel: aci-demo
volumes:
- name: filesharevolume
azureFile:
sharename: acishare
storageAccountName: <Storage account name>
storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups

Para implementar con la plantilla YAML, guarde el anterior código de YAML en un archivo denominado
deploy-aci.yaml y luego ejecute el comando az container create con el parámetro --file :

# Deploy with YAML template


az container create --resource-group myResourceGroup --file deploy-aci.yaml

Implementar contenedor y montar volumen: Resource Manager


Además de la implementación mediante la CLI y YAML, puede implementar un grupo de contenedores y
montar un volumen en un contenedor con una plantilla de Azure Resource Manager.
En primer lugar, rellene la matriz volumes en la sección properties del grupo de contenedores de la plantilla.
Luego, en todos los contenedores en los que quiera montar el volumen, rellene la matriz volumeMounts de la
sección properties de la definición del contenedor.
La siguiente plantilla de Resource Manager define un grupo de contenedores con un contenedor creado con la
imagen aci-hellofiles . El contenedor monta el recurso compartido de archivos de Azure acishare creado
anteriormente como un volumen. Donde se indique, escriba la clave de almacenamiento y el nombre de la
cuenta de almacenamiento que hospeda el recurso compartido de archivos.
Al igual que en los ejemplos anteriores, el valor dnsNameLabel debe ser único dentro de la región de Azure en
la que se crea la instancia de contenedor. Si es necesario, actualice el valor en la plantilla.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "hellofiles",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
},
"resources": [
{
"name": "file-share-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/aci/logs"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Storage account name>",
"storageAccountKey": "<Storage account key>"
}
}
]
}
}
]
}

Para implementar con la plantilla de Resource Manager, guarde el anterior código JSON en un archivo
denominado deploy-aci.json y luego ejecute el comando az deployment group create con el parámetro
--template-file :

# Deploy with Resource Manager template


az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json

Montaje de varios volúmenes


Para montar varios volúmenes en una instancia de contenedor, debe realizar la implementación con una
plantilla de Azure Resource Manager u otro método de programación. Para usar una plantilla o un archivo
YAML, proporcione los detalles del recurso compartido y defina los volúmenes al rellenar la matriz volumes de
la sección properties del archivo.
Por ejemplo, si ha creado dos recursos compartidos de Azure Files denominados share1 y share2 en la cuenta
de almacenamiento myStorageAccount, la matriz volumes de la plantilla de Resource Manager sería similar a
la siguiente:

"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]

A continuación, para cada contenedor del grupo de contenedores en el que desea montar los volúmenes,
rellene la matriz volumeMounts en la sección properties de la definición del contenedor. Por ejemplo, esto
monta los dos volúmenes, myvolume1 y myvolume2 definidos previamente:

"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]

Pasos siguientes
Aprenda a montar otros tipos de volúmenes en Azure Container Instances:
Montaje de un volumen de emptyDir en Azure Container Instances
Montaje de un volumen de gitRepo en Azure Container Instances
Montaje de un volumen secreto en Azure Container Instances
Montaje de un volumen secreto en Azure Container
Instances
23/07/2020 • 6 minutes to read • Edit Online

Puede usar un volumen secreto para suministrar información confidencial en los contenedores de un grupo de
contenedores. El volumen secreto almacena los secretos en los archivos del volumen, accesibles para los
contenedores del grupo de contenedores. Mediante el almacenamiento de secretos en un volumen secreto,
puede evitar agregar datos confidenciales, como claves SSH o credenciales de la base de datos, en el código de la
aplicación.
Una vez implementado con secretos en un grupo de contenedores, un volumen secreto es solo lectura.
Todos los volúmenes secretos están respaldados por tmpfs, un sistema de archivos basado en RAM; su
contenido nunca se escribe en el almacenamiento no volátil.

NOTE
Los volúmenes secretos están restringidos actualmente a los contenedores Linux. Obtenga información sobre cómo pasar
variables de entorno seguras para contenedores Windows y Linux en Establecimiento de variables de entorno. Aunque se
está trabajando para incorporar todas las características a los contenedores Windows, puede consultar las diferencias
actuales entre plataformas en la introducción.

Montaje de un volumen secreto: CLI de Azure


Para implementar un contenedor con uno o más secretos mediante la CLI de Azure, incluya los parámetros
--secrets y --secrets-mount-path en el comando az container create. En este ejemplo se monta un volumen
secreto que consta de dos archivos que contienen secretos, "mysecret1" y "mysecret2", en /mnt/secrets :

az container create \
--resource-group myResourceGroup \
--name secret-volume-demo \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--secrets mysecret1="My first secret FOO" mysecret2="My second secret BAR" \
--secrets-mount-path /mnt/secrets

La siguiente salida de az container exec muestra la apertura de un shell en el contenedor en ejecución, que
enumera los archivos incluidos en el volumen secreto y luego muestra su contenido:

az container exec \
--resource-group myResourceGroup \
--name secret-volume-demo --exec-command "/bin/sh"
/usr/src/app # ls /mnt/secrets
mysecret1
mysecret2
/usr/src/app # cat /mnt/secrets/mysecret1
My first secret FOO
/usr/src/app # cat /mnt/secrets/mysecret2
My second secret BAR
/usr/src/app # exit
Bye.

Montaje de un volumen secreto: YAML


También puede implementar grupos de contenedores con la CLI de Azure y una plantilla YAML. La
implementación mediante la plantilla YAML es el método preferido al implementar grupos de contenedores que
constan de varios contenedores.
Cuando se implementa con una plantilla YAML, los valores secretos deben estar codificados en Base64 en la
plantilla. Aunque los valores del secreto aparecen en texto sin formato dentro de los archivos en el contenedor.
La siguiente plantilla YAML define un grupo de contenedores con un solo contenedor que monta un volumen
secreto en /mnt/secrets . El volumen secreto tiene dos archivos que contienen secretos, "mysecret1" y
"mysecret2".

apiVersion: '2019-12-01'
location: eastus
name: secret-volume-demo
properties:
containers:
- name: aci-tutorial-app
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-helloworld:latest
ports: []
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /mnt/secrets
name: secretvolume1
osType: Linux
restartPolicy: Always
volumes:
- name: secretvolume1
secret:
mysecret1: TXkgZmlyc3Qgc2VjcmV0IEZPTwo=
mysecret2: TXkgc2Vjb25kIHNlY3JldCBCQVIK
tags: {}
type: Microsoft.ContainerInstance/containerGroups

Para implementar con la plantilla YAML, guarde el anterior código de YAML en un archivo denominado
deploy-aci.yaml y luego ejecute el comando az container create con el parámetro --file :

# Deploy with YAML template


az container create \
--resource-group myResourceGroup \
--file deploy-aci.yaml
Montaje de un volumen secreto: Resource Manager
Además de la implementación de CLI y YAML, puede implementar un grupo de contenedores con la plantilla de
Azure Resource Manager.
En primer lugar, rellene la matriz volumes en la sección properties del grupo de contenedores de la plantilla.
Cuando se implementa con una plantilla de Resource Manager, los valores secretos deben estar codificados en
Base64 en la plantilla. Aunque los valores del secreto aparecen en texto sin formato dentro de los archivos en el
contenedor.
A continuación, para cada contenedor del grupo de contenedores en el que quiera montar el volumen secreto,
rellene la matriz volumeMounts en la sección properties de la definición del contenedor.
La siguiente plantilla de Resource Manager define un grupo de contenedores con un solo contenedor que monta
un volumen secreto en /mnt/secrets . El volumen secreto tiene dos secretos, "mysecret1" y "mysecret2".
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "microsoft/aci-helloworld:latest"
},
"resources": [
{
"name": "secret-volume-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2018-10-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "secretvolume1",
"mountPath": "/mnt/secrets"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
]
},
"volumes": [
{
"name": "secretvolume1",
"secret": {
"mysecret1": "TXkgZmlyc3Qgc2VjcmV0IEZPTwo=",
"mysecret2": "TXkgc2Vjb25kIHNlY3JldCBCQVIK"
}
}
]
}
}
]
}

Para implementar con la plantilla de Resource Manager, guarde el anterior código JSON en un archivo
denominado deploy-aci.json y luego ejecute el comando az deployment group create con el parámetro
--template-file :
# Deploy with Resource Manager template
az deployment group create \
--resource-group myResourceGroup \
--template-file deploy-aci.json

Pasos siguientes
Volúmenes
Aprenda a montar otros tipos de volúmenes en Azure Container Instances:
Montaje de un recurso compartido de archivos de Azure en Azure Container Instances
Montaje de un volumen de emptyDir en Azure Container Instances
Montaje de un volumen de gitRepo en Azure Container Instances
Variables de entorno seguras
Otro método para especificar información confidencial en contenedores (incluidos los contenedores Windows)
es a través del uso de variables de entorno seguras.
Montaje de un volumen de emptyDir en Azure
Container Instances
23/07/2020 • 4 minutes to read • Edit Online

Aprenda a montar un volumen emptyDir para compartir datos entre los contenedores de un grupo de
contenedores en Azure Container Instances. Use los volúmenes emptyDir como memorias caché efímeras para
las cargas de trabajo en contenedores.

NOTE
El montaje de un volumen emptyDir está actualmente restringido a los contenedores de Linux. Aunque se está trabajando
para incorporar todas las características a los contenedores Windows, puede consultar las diferencias actuales entre
plataformas en la introducción.

Volumen emptyDir
El volumen emptyDir ofrece un directorio de escritura accesible para cada contenedor de un grupo de
contenedores. Los contenedores del grupo pueden leer y escribir los mismos archivos en el volumen, que puede
montarse mediante las mismas o distintas rutas de acceso en cada contenedor.
Algunos ejemplos de uso de un volumen emptyDir:
Espacio de desecho
Punto de control durante las tareas de ejecución prolongada
Almacenamiento de datos recuperados por un contenedor sidecar y atendidos por un contenedor de
aplicación
Los datos incluidos en un volumen emptyDir se conservan a través de bloqueos de contenedor. Pero no se
garantiza que se conserven los datos de un volumen emptyDir en los contenedores que se reinicien. Si detiene
un grupo de contenedores, el volumen emptyDir no se conserva.
El tamaño máximo de un volumen emptyDir de Linux es de 50 GB.

Montaje de un volumen emptyDir


Para montar un volumen emptyDir en una instancia de contenedor, debe realizar la implementación con una
plantilla de Azure Resource Manager, un archivo YAML u otro método de programación para implementar un
grupo de contenedores.
En primer lugar, rellene la matriz volumes en la sección properties del grupo de contenedores del archivo.
Luego, para cada contenedor del grupo de contenedores en el que quiera montar el volumen emptyDir, rellene la
matriz volumeMounts en la sección properties de la definición del contenedor.
Por ejemplo, la siguiente plantilla de Resource Manager crea un grupo de contenedores que consta de dos
contenedores y en cada uno de ellos se monta el volumen emptyDir:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "volume-demo-emptydir",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2018-10-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/empty"
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"volumeMounts": [
{
"name": "emptydir1",
"mountPath": "/mnt/empty"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
]
},
"volumes": [
{
"name": "emptydir1",
"emptyDir": {}
}
]
}
}
]
}

Para ver ejemplos de la implementación del grupo de contenedores, consulte Implementación de un grupo con
varios contenedores con una plantilla Resource Manager e Implementación de un grupo de varios contenedores
con un archivo YAML.

Pasos siguientes
Aprenda a montar otros tipos de volúmenes en Azure Container Instances:
Montaje de un recurso compartido de archivos de Azure en Azure Container Instances
Montaje de un volumen de gitRepo en Azure Container Instances
Montaje de un volumen secreto en Azure Container Instances
Montaje de un volumen de gitRepo en Azure
Container Instances
23/07/2020 • 7 minutes to read • Edit Online

Obtenga información acerca de cómo montar un volumen de gitRepo para clonar un repositorio de GIT en las
instancias de Container Instances.

NOTE
El montaje de un volumen de gitRepo está actualmente restringido a los contenedores Linux. Aunque se está trabajando
para incorporar todas las características a los contenedores Windows, puede consultar las diferencias actuales entre
plataformas en la introducción.

Volumen de gitRepo
El volumen de gitRepo monta un directorio y clona el repositorio de Git especificado en él en el inicio del
contenedor. Al usar un volumen de gitRepo en las instancias de Container Instances, puede evitar agregar el
código para hacerlo en las aplicaciones.
Al montar un volumen de gitRepo, puede establecer tres propiedades para configurar el volumen:

P RO P IEDA D O B L IGATO RIO DESC RIP C IÓ N

repository Sí Dirección URL completa, incluidos


http:// o https:// , del repositorio
de GIT que se va a clonar.

directory No Directorio en el que se debe clonar el


repositorio. La ruta de acceso no debe
contener " .. " ni empezar por ello. Si
especifica " . ", el repositorio se clona
en el directorio del volumen. De lo
contrario, el repositorio de GIT se clona
en un subdirectorio del nombre
indicado dentro del directorio del
volumen.

revision No Hash de confirmación de la revisión


que se va a clonar. Si no se especifica,
se clona la revisión de HEAD .

Montaje de un volumen de gitRepo: Azure CLI


Para montar un volumen de gitRepo al implementar instancias de contenedor con la CLI de Azure, utilice los
parámetros --gitrepo-url y --gitrepo-mount-path en el comando az container create. Opcionalmente, puede
especificar el directorio del volumen en que va a realizar la clonación ( --gitrepo-dir ) y el hash de confirmación
de la revisión que se va a clonar ( --gitrepo-revision ).
Este comando de ejemplo clona la aplicación de ejemplo aci-helloworld de Microsoft en /mnt/aci-helloworld en
la instancia de contenedor:
az container create \
--resource-group myResourceGroup \
--name hellogitrepo \
--image mcr.microsoft.com/azuredocs/aci-helloworld \
--dns-name-label aci-demo \
--ports 80 \
--gitrepo-url https://github.com/Azure-Samples/aci-helloworld \
--gitrepo-mount-path /mnt/aci-helloworld

Para comprobar que se ha montado el volumen de gitRepo, inicie un shell en el contenedor con az container exec
y enumere el directorio:

az container exec --resource-group myResourceGroup --name hellogitrepo --exec-command /bin/sh

/usr/src/app # ls -l /mnt/aci-helloworld/
total 16
-rw-r--r-- 1 root root 144 Apr 16 16:35 Dockerfile
-rw-r--r-- 1 root root 1162 Apr 16 16:35 LICENSE
-rw-r--r-- 1 root root 1237 Apr 16 16:35 README.md
drwxr-xr-x 2 root root 4096 Apr 16 16:35 app

Montaje de un volumen de gitRepo: Resource Manager


Para montar un volumen de GitRepo al implementar instancias de contenedor con un plantilla de Azure Resource
Manager, rellene la matriz volumes en la sección properties del grupo contenedor de la plantilla. Luego, en
todos los contenedores del grupo de contenedores en los que desee montar el volumen de GitRepo, rellene la
matriz volumeMounts en la sección properties de la definición del contenedor.
Por ejemplo, la siguiente plantilla de Resource Manager crea un grupo de contenedores que consta de un único
contenedor. El contenedor clona dos repositorios de GitHub especificados por los bloques del volumen de
gitRepo. El segundo volumen incluye propiedades adicionales que especifican un directorio en el que clonar y el
hash de confirmación de una revisión específica que se va a clonar.

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "microsoft/aci-helloworld:latest"
},
"resources": [
{
"name": "volume-demo-gitrepo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2018-02-01-preview",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "gitrepo1",
"mountPath": "/mnt/repo1"
},
{
"name": "gitrepo2",
"mountPath": "/mnt/repo2"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
]
},
"volumes": [
{
"name": "gitrepo1",
"gitRepo": {
"repository": "https://github.com/Azure-Samples/aci-helloworld"
}
},
{
"name": "gitrepo2",
"gitRepo": {
"directory": "my-custom-clone-directory",
"repository": "https://github.com/Azure-Samples/aci-helloworld",
"revision": "d5ccfcedc0d81f7ca5e3dbe6e5a7705b579101f1"
}
}
]
}
}
]
}

A continuación, se muestra la estructura del directorio resultante de los dos repositorios clonados definidos en la
plantilla anterior:

/mnt/repo1/aci-helloworld
/mnt/repo2/my-custom-clone-directory

Para ver un ejemplo de implementación de instancias de contenedor con una plantilla de Azure Resource
Manager, consulte Implementación de grupos de varios contenedores en Azure Container Instances.

Autenticación del repositorio de Git privado


Para montar un volumen de gitRepo para un repositorio Git privado, especifique las credenciales en la dirección
URL del repositorio. Normalmente, las credenciales tienen forma de un nombre de usuario y un token de acceso
personal (PAT) que concede acceso de ámbito al repositorio.
Por ejemplo, el parámetro --gitrepo-url de la CLI de Azure para un repositorio GitHub privado tendría un
aspecto similar al siguiente (donde "gituser" es el nombre de usuario de GitHub y "abcdef1234fdsa4321abcdef"
es el token de acceso personal del usuario):

--gitrepo-url https://gituser:abcdef1234fdsa4321abcdef@github.com/GitUser/some-private-repository

Para ver un repositorio GIT de Azure Repos, especifique cualquier nombre de usuario (puede usar
"azurereposuser" como en el ejemplo siguiente) en combinación con un token de acceso personal válido:

--gitrepo-url https://azurereposuser:abcdef1234fdsa4321abcdef@dev.azure.com/your-org/_git/some-private-
repository

Para más información acerca de los tokens de acceso personal para GitHub y Azure Repos, vea lo siguiente:
GitHub: Creating a personal access token for the command line (Creación de un token de acceso personal para la
línea de comandos)
Azure Repos: Create personal access tokens to authenticate access (Creación de tokens de acceso personales para
autenticar el acceso)

Pasos siguientes
Aprenda a montar otros tipos de volúmenes en Azure Container Instances:
Montaje de un recurso compartido de archivos de Azure en Azure Container Instances
Montaje de un volumen de emptyDir en Azure Container Instances
Montaje de un volumen secreto en Azure Container Instances
Configuración de sondeos de ejecución
23/07/2020 • 6 minutes to read • Edit Online

Las aplicaciones en contenedores pueden ejecutarse durante largos períodos de tiempo y provocar la interrupción
de estados que quizás deban repararse con un reinicio del contenedor. Azure Container Instances admite sondeos
de ejecución para que pueda configurar los contenedores dentro del grupo de contenedores para que se reinicien
si una funcionalidad crítica no funciona. El sondeo de ejecución se comporta como unsondeo de ejecución de
Kubernetes.
En este artículo se explica cómo implementar un grupo de contenedores que incluya un sondeo de ejecución y se
muestra el reinicio automático de un contenedor incorrecto simulado.
Azure Container Instances también admite sondeos de preparación, que se pueden configurar para asegurarse de
que el tráfico llega a un contenedor solo cuando esté listo para ello.

NOTE
Actualmente no se puede usar un sondeo de ejecución en un grupo de contenedores que se implementa en una red virtual.

Implementación de YAML
Cree un archivo liveness-probe.yaml con el siguiente fragmento de código. Este archivo define un grupo de
contenedores que consta de un contenedor NGNIX que, con el tiempo, se vuelve incorrecto.

apiVersion: 2019-12-01
location: eastus
name: livenesstest
properties:
containers:
- name: mycontainer
properties:
image: nginx
command:
- "/bin/sh"
- "-c"
- "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
ports: []
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
livenessProbe:
exec:
command:
- "cat"
- "/tmp/healthy"
periodSeconds: 5
osType: Linux
restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Ejecute el siguiente comando para implementar este grupo de contenedores con la configuración de YAML
anterior:
az container create --resource-group myResourceGroup --name livenesstest -f liveness-probe.yaml

Comando de inicio
La implementación incluye una propiedad command que define un comando de inicio que se ejecuta cuando el
contenedor comienza a ejecutarse por primera vez. Esta propiedad acepta una matriz de cadenas. Este comando
simula que el contenedor entra en un estado incorrecto.
En primer lugar, inicia una sesión de Bash y crea un archivo denominado healthy dentro del directorio /tmp .
Luego se suspenderá durante 30 segundos antes de eliminar el archivo y entrará en modo de suspensión durante
10 minutos:

/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

Comando de ejecución
Esta implementación define un livenessProbe que admite un comando de ejecución exec que actúa como
comprobación de la ejecución. Si este comando finaliza con un valor distinto de cero, el contenedor se eliminará y
se reiniciará para indicar que el archivo healthy no se encontró. Si este comando finaliza correctamente con el
código de salida 0, no se realizará ninguna acción.
La propiedad periodSeconds designa que el comando de ejecución debería ejecutarse cada 5 segundos.

Comprobación de la salida de ejecución


Durante los primeros 30 segundos, el archivo healthy creado por el comando de inicio existe. Cuando el
comando de ejecución comprueba la existencia del archivo healthy , el código de estado devuelve un 0, que indica
que la operación se realizó correctamente y que no se producirá ningún reinicio.
Después de 30 segundos, el comando cat /tmp/healthy comenzará a generar errores, lo que dará lugar a eventos
incorrectos y provocará su finalización.
Estos eventos se pueden ver desde Azure Portal o la CLI de Azure.

Al ver los eventos en Azure Portal, se desencadenarán eventos de tipo Unhealthy al producirse un error del
comando de ejecución. El evento posterior será del tipo Killing , lo que significa la eliminación de un contenedor
y que puede comenzar un reinicio. El recuento de reinicio del contenedor se incrementa cada vez que se produce
este evento.
Los reinicios se completan en contexto para recursos como las direcciones IP públicas y se conservará el contenido
específico de nodo.
Si el sondeo de ejecución sigue generando errores y desencadena demasiados reinicios, el contenedor provocará
un retraso de retroceso exponencial.

Sondeos de ejecución y directivas de reinicio


Las directivas de reinicio reemplazan el comportamiento de reinicio que desencadenan los sondeos de ejecución.
Por ejemplo, si establece una directiva restartPolicy = Never y un sondeo de ejecución, el grupo de contenedores
no se reiniciará si se produce una comprobación de ejecución errónea. En su lugar, el grupo de contenedores se
adherirá a la directiva de reinicio del grupo de contenedores de Never .

Pasos siguientes
Los escenarios basados en tareas pueden requerir un sondeo de ejecución para habilitar los reinicios automáticos
si una función de requisito previo no funciona correctamente. Para más información sobre cómo ejecutar
contenedores basados en tareas, consulte Ejecución de tareas en contenedores en Azure Container Instances.
Configuración de sondeos de preparación
23/07/2020 • 7 minutes to read • Edit Online

En el caso de las aplicaciones en contenedor que atienden el tráfico, puede que le interese comprobar que el
contenedor está listo para administrar las solicitudes entrantes. Azure Container Instances admite sondeos de
preparación para incluir configuraciones de modo que no se pueda acceder al contenedor bajo ciertas
condiciones. El sondeo de preparación funciona como un sondeo de preparación de Kubernetes. Por ejemplo,
puede que una aplicación contenedora tenga que cargar un conjunto de datos grande durante el inicio y no es
deseable que se reciban solicitudes durante este tiempo.
En este artículo se explica cómo implementar un grupo de contenedores que incluya un sondeo de preparación,
de tal forma que un contenedor solo reciba tráfico cuando el sondeo se realice correctamente.
Azure Container Instances también admite sondeos de ejecución, que se pueden configurar para hacer que un
contenedor en mal estado se reinicie automáticamente.

NOTE
Actualmente no se puede usar un sondeo de preparación en un grupo de contenedores que se implementa en una red
virtual.

Configuración de YAML
Por ejemplo, cree un archivo readiness-probe.yaml con el siguiente fragmento de código que incluya un sondeo
de preparación. Este archivo define un grupo de contenedores que consta de un contenedor que ejecuta una
aplicación web pequeña. La aplicación se implementa desde la imagen
mcr.microsoft.com/azuredocs/aci-helloworld pública. Esta aplicación en contenedor también se muestra en
Implementación de una instancia de contenedor en Azure mediante la CLI de Azure y otros inicios rápidos.
apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
containers:
- name: mycontainer
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
command:
- "/bin/sh"
- "-c"
- "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
readinessProbe:
exec:
command:
- "cat"
- "/tmp/ready"
periodSeconds: 5
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- protocol: tcp
port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups

Comando de inicio
La implementación incluye una propiedad command que define un comando de inicio que se ejecuta cuando el
contenedor comienza a ejecutarse por primera vez. Esta propiedad acepta una matriz de cadenas. Este comando
simula una hora en la que se ejecuta la aplicación web, pero el contenedor no está listo.
En primer lugar, inicia una sesión de shell y ejecuta un comando node para iniciar la aplicación web. También
inicia un comando de suspensión durante 240 segundos, tras lo cual crea un archivo llamado ready en el
directorio /tmp :

node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait

Comando Readiness
Este archivo YAML define un elemento readinessProbe que admite un comando de preparación exec que actúa
como comprobación de preparación. Este comando de preparación de ejemplo comprueba la existencia del
archivo ready en el directorio /tmp .
Cuando el archivo ready no existe, el comando de preparación se cierra con un valor distinto de cero; el
contenedor continúa ejecutándose, pero no se puede tener acceso a él. Cuando el comando se cierra
correctamente con un código de salida de 0, el contenedor está listo para su acceso.
La propiedad periodSeconds designa que el comando de preparación debe ejecutarse cada 5 segundos. El sondeo
de preparación se ejecuta durante la vigencia del grupo de contenedores.

Implementación de ejemplo
Ejecute el siguiente comando para implementar un grupo de contenedores con la configuración de YAML anterior:

az container create --resource-group myResourceGroup --file readiness-probe.yaml

Visualización de las comprobaciones de preparación


En este ejemplo, durante los primeros 240 segundos, el comando de preparación produce un error cuando
comprueba la existencia del archivo de ready . El código de estado devolvió señales de que el contenedor no está
listo.
Estos eventos se pueden ver desde Azure Portal o la CLI de Azure. Por ejemplo, el portal muestra que se
desencadenan eventos de tipo Unhealthy cuando se produce un error en el comando de preparación.

Comprobación de la preparación del contenedor


Después de iniciar el contenedor, puede comprobar que inicialmente no es accesible. Tras el aprovisionamiento,
obtenga la dirección IP del grupo de contenedores:

az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv

Intente acceder al sitio mientras se produce un error en el sondeo de preparación:

wget <ipAddress>

La salida muestra que el sitio no es accesible inicialmente:

$ wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...

Después de 240 segundos, el comando de preparación se ejecuta correctamente, lo que indica que el contenedor
está listo. Ahora, al ejecutar el comando wget , la operación se realiza correctamente:
$ wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’

index.html.1 100%[===============================================================>]
1.62K --.-KB/s in 0s

2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]

Cuando el contenedor está listo, también puede acceder a la aplicación web mediante un explorador web.

NOTE
El sondeo de preparación continúa ejecutándose mientras dure el grupo de contenedores. Si se produce un error en el
comando de preparación en un momento posterior, el contenedor vuelve a dejar de estar accesible.

Pasos siguientes
Un sondeo de preparación puede ser útil en escenarios donde intervienen grupos de varios contenedores que se
componen de contenedores dependientes. Para más información sobre los escenarios de varios contenedores,
consulte Grupos de contenedores en Azure Container Instances.
Detener o iniciar contenedores manualmente en
Azure Container Instances
23/07/2020 • 4 minutes to read • Edit Online

La opción directiva de reinicio configuración de un grupo de contenedores determina cómo las instancias de
contenedor se inician o detienen de forma predeterminada. Puede invalidar la configuración predeterminada
deteniendo o iniciando manualmente un grupo de contenedores.

Stop
Detenga manualmente un grupo de contenedores en ejecución, por ejemplo, mediante el comando az container
stop o Azure Portal. En ciertas cargas de trabajo de contenedor puede que quiera detener un grupo de
contenedores de ejecución prolongada después de un período definido para ahorrar en costos.
Cuando un grupo de contenedores entra en estado detenido, finaliza y recicla todos los contenedores del grupo.
No conserva el estado de los contenedores.
Cuando se reciclan los contenedores, los recursos se desasignan y la facturación se detiene para el grupo de
contenedores.
La acción de detención no tiene ningún efecto si el grupo de contenedores ya ha finalizado (se encuentre en estado
Correcto o Erróneo). Por ejemplo, un grupo de contenedores con tareas de contenedor de una sola ejecución que
se haya ejecutado correctamente finaliza con el estado Correcto. Los intentos por detener el grupo en ese estado
no cambian el estado.

Start
Cuando un grupo de contenedores está detenido, ya sea porque los contenedores finalizaron por sí mismos o
porque usted detuvo manualmente el grupo, puede iniciar los contenedores. Por ejemplo, use el comando az
container start o Azure Portal para iniciar manualmente los contenedores del grupo. Si se actualiza la imagen de
contenedor de cualquier contenedor, se extrae una nueva imagen.
Cuando se inicia un grupo de contenedores comienza una nueva implementación con la misma configuración de
contenedor. Esta acción puede ayudarle a volver a utilizar rápidamente una configuración de grupo de
contenedores conocida que funciona de la manera prevista. No tiene que crear un nuevo grupo de contenedores
para ejecutar la misma carga de trabajo.
Todos los contenedores en un grupo de contenedores se inician mediante esta acción. No se puede iniciar un
contenedor específico en el grupo.
Después de iniciar o reiniciar un grupo de contenedores manualmente, este se ejecuta según la configuración de la
directiva de reinicio.

Reinicio
Puede reiniciar un grupo de contenedores mientras se está ejecutando, por ejemplo, con el comando az container
restart. Esta acción permite reiniciar todos los contenedores del grupo. Si se actualiza la imagen de contenedor de
cualquier contenedor, se extrae una nueva imagen.
El reinicio de un grupo de contenedores es útil cuando desea solucionar un problema de implementación. Por
ejemplo, si una limitación de recursos temporal impide que los contenedores se ejecuten correctamente, reiniciar el
grupo puede solucionar el problema.
Todos los contenedores en un grupo de contenedores se reinician mediante esta acción. No se puede reiniciar un
contenedor específico en el grupo.
Después de reiniciar un grupo de contenedores manualmente, este se ejecuta según la configuración de la directiva
de reinicio.

Pasos siguientes
Obtenga más información sobre la configuración de la directiva de reinicio en Azure Container Instances.
Además de detener e iniciar manualmente un grupo de contenedores con la configuración existente, puede
actualizar la configuración de un grupo de contenedores en ejecución.
Actualización de contenedores en Azure Container
Instances
23/07/2020 • 7 minutes to read • Edit Online

Durante el funcionamiento normal de las instancias de contenedor, puede que sea necesario actualizar los
contenedores en ejecución de un grupo de contenedores. Por ejemplo, podría querer actualizar una propiedad,
como la versión de la imagen, un nombre DNS o una variable de entorno o actualizar una propiedad de un
contenedor cuya aplicación se ha bloqueado.
Para actualizar los contenedores de un grupo de contenedores en ejecución, vuelva a implementar un grupo
existente con al menos una propiedad modificada. Al actualizar un grupo de contenedores, todos los contenedores
en ejecución en el grupo se reinician en contexto, por lo general en el mismo host de contenedor subyacente.

NOTE
No se pueden actualizar los grupos de contenedores finalizados o eliminados. Una vez que un grupo de contenedores ha
finalizado (se encuentra en un estado correcto o con errores) o se ha eliminado, el grupo se debe implementar como nuevo.
Consulte otras limitaciones.

Actualización de un grupo de contenedores


Para actualizar un grupo de contenedores existente:
Emita el comando create (o use Azure Portal) y especifique el nombre de un grupo existente.
Modifique o agregue al menos una propiedad del grupo que admita su actualización cuando vuelva a realizar
la implementación. Algunas propiedades no admiten actualizaciones.
Establezca otras propiedades con los valores que proporcionó anteriormente. Si no establece un valor para una
propiedad, se revierte a su valor predeterminado.

TIP
Un archivo YAML ayuda a mantener una configuración de implementación de un grupo de contenedores y proporciona un
punto inicial para implementar un grupo actualizado. Si ha utilizado un método diferente para crear el grupo, puede exportar
la configuración a YAML mediante az container export.

Ejemplo
En el siguiente ejemplo de la CLI de Azure se actualiza un grupo de contenedores con una nueva etiqueta de
nombre DNS. Dado la propiedad de etiqueta del nombre DNS del grupo es una de las que se pueden actualizar, se
vuelve a implementar el grupo de contenedores y se reinician sus contenedores.
Implementación inicial con la etiqueta de nombre DNS myapplication-staging:

# Create container group


az container create --resource-group myResourceGroup --name mycontainer \
--image nginx:alpine --dns-name-label myapplication-staging

Actualice el grupo de contenedores con la nueva etiqueta de nombre DNS myapplication y establezca las demás
propiedades con los valores usados previamente:
# Update DNS name label (restarts container), leave other properties unchanged
az container create --resource-group myResourceGroup --name mycontainer \
--image nginx:alpine --dns-name-label myapplication

Ventajas de la actualización
La principal ventaja de actualizar un grupo de contenedores existente es una implementación más rápida. Al volver
a implementar un grupo de contenedores existente, sus capas de imagen de contenedor se extraen de las
almacenados en caché por la implementación anterior. En lugar de extraer todas las capas de imagen actualizadas
del Registro como se hace con las nuevas implementaciones, solo se extraen las capas modificadas (si existen).
Las aplicaciones basadas en imágenes de contenedor más grandes, como Windows Server Core, pueden
experimentar una considerable mejora en la velocidad de implementación al actualizarlas, en lugar de eliminarlas
y volver a implementarlas.

Limitaciones
No todas las propiedades de un grupo de contenedores admiten actualizaciones. Para cambiar algunas
propiedades de un grupo de contenedores, primero debe eliminar y volver a implementar el grupo. Consulte
Propiedades que requieren la eliminación del contenedor.
Todos los contenedores de un grupo de contenedores se reinician al actualizar el grupo de contenedores. No se
puede realizar una actualización o reinicio local de un contenedor específico en un grupo de varios
contenedores.
La dirección IP de un grupo de contenedores normalmente se mantiene entre actualizaciones, pero no se
garantiza que permanezca igual. Mientras el grupo de contenedores esté implementado en el mismo host
subyacente, conservará su dirección IP. Aunque no es habitual, hay algunos eventos internos de Azure que
pueden provocar una nueva implementación en un host diferente. Para mitigar este problema, se recomienda
utilizar una etiqueta de nombre DNS para las instancias de contenedor.
No se pueden actualizar los grupos de contenedores finalizados o eliminados. Una vez que se ha detenido un
grupo de contenedores (se encuentra en estado Terminado) o se ha eliminado, el grupo se implementa como
nuevo.

Propiedades que requieren la eliminación del contenedor


No todas las propiedades del grupo de contenedores se pueden actualizar. Por ejemplo, para cambiar la directiva
de reinicio de un contenedor, primero debe eliminar el grupo de contenedores y luego volver a crearlo.
Los cambios en estas propiedades requieren la eliminación del grupo de contenedores antes de volver a
implementarlo:
Tipo de SO
CPU, memoria o recursos de GPU
Directiva de reinicio
Perfil de red
Al eliminar un grupo de contenedores y volver a crearlo, no se reimplementa sino que se crea uno nuevo. Todas
las capas de imagen se extraen actualizadas del Registro, y no de las almacenadas en caché por una
implementación anterior. La dirección IP del contenedor también podría cambiar debido a que se implementa en
un host subyacente diferente.

Pasos siguientes
Se ha mencionado varias veces en este artículo el grupo de contenedores . Cada contenedor de Azure Container
Instances se implementa en un grupo de contenedores y los grupos de contenedores pueden contener más de un
contenedor.
Grupos de contenedores en Azure Container Instances
Implementación de grupos de varios contenedores
Detener o iniciar contenedores manualmente en Azure Container Instances
Supervisión de los recursos de los contenedores en
Azure Container Instances
23/07/2020 • 6 minutes to read • Edit Online

Azure Monitor proporciona información acerca de los recursos de proceso que utilizan las instancias de
contenedor. Esta información sobre el uso de los recursos le ayuda a determinar cuál es la mejor configuración de
recursos para los grupos de contenedores. Azure Monitor también proporciona métricas que realizan un
seguimiento de la actividad en la red en sus instancias de contenedor.
En este documento, se explica cómo se recopilan las métricas de Azure Monitor para instancias de contenedor
mediante Azure Portal y la CLI de Azure.

IMPORTANT
Las métricas de Azure Monitor de Azure Container Instances están actualmente en versión preliminar y se aplican algunas
limitaciones. Las versiones preliminares están a su disposición con la condición de que acepte los términos de uso
adicionales. Es posible que algunos de los aspectos de esta característica cambien antes de ofrecer disponibilidad general.

Limitaciones de vista previa


En este momento, las métricas de Azure Monitor solamente están disponibles para los contenedores de Linux.

Métricas disponibles
Azure Monitor proporciona las siguientes métricas para Azure Container Instances. Estas métricas están
disponibles para grupos de contenedores y contenedores individuales. De forma predeterminada, las métricas se
agregan como promedios.
Uso de CPU : medido en millares de núcleos . 1 millar de núcleos corresponde a 1/1000 de un núcleo de
CPU, por lo que 500 millares de núcleos representan un uso de 0,5 de un núcleo de CPU.
Uso de memoria en bytes.
Bytes de red recibidos por segundo y Bytes de red transmitidos por segundo .

Obtención de métricas mediante Azure Portal


Cuando se crea un grupo de contenedores, los datos de Azure Monitor están disponibles en Azure Portal. Para ver
las métricas de un grupo de contenedores, vaya a la página Información general del grupo de contenedores.
Aquí puede ver los gráficos creados previamente para cada una de las métricas disponibles.
En un grupo de contenedores que contenga varios contenedores, utilice una dimensión para representar las
métricas por contenedor. Para crear un gráfico utilizando las métricas de cada contenedor, siga estos pasos:
1. En la página Información general página, seleccione uno de los gráficos de métricas, como CPU .
2. Seleccione el botón Apply splitting (Aplicar división) y, después, seleccione Nombre del contenedor .
Obtención de métricas mediante la CLI de Azure
Las métricas de las instancias de contenedor también pueden obtenerse mediante la CLI de Azure. En primer lugar,
debe utilizar el siguiente comando para obtener el identificador del grupo de contenedores. Sustituya
<resource-group> por el nombre del grupo de recursos y <container-group> por el nombre del grupo de
contenedores.

CONTAINER_GROUP=$(az container show --resource-group <resource-group> --name <container-group> --query id --


output tsv)

Utilice el comando siguiente para obtener las métricas de uso de la CPU .

az monitor metrics list --resource $CONTAINER_GROUP --metric CPUUsage --output table

Timestamp Name Average


------------------- --------- ---------
2019-04-23 22:59:00 CPU Usage
2019-04-23 23:00:00 CPU Usage
2019-04-23 23:01:00 CPU Usage 0.0
2019-04-23 23:02:00 CPU Usage 0.0
2019-04-23 23:03:00 CPU Usage 0.5
2019-04-23 23:04:00 CPU Usage 0.5
2019-04-23 23:05:00 CPU Usage 0.5
2019-04-23 23:06:00 CPU Usage 1.0
2019-04-23 23:07:00 CPU Usage 0.5
2019-04-23 23:08:00 CPU Usage 0.5
2019-04-23 23:09:00 CPU Usage 1.0
2019-04-23 23:10:00 CPU Usage 0.5

Cambie el valor del parámetro --metric en el comando para obtener otras métricas admitidas. Por ejemplo,
utilice el comando siguiente para obtener las métricas de uso de la memoria .

az monitor metrics list --resource $CONTAINER_GROUP --metric MemoryUsage --output table

Timestamp Name Average


------------------- ------------ ----------
2019-04-23 22:59:00 Memory Usage
2019-04-23 23:00:00 Memory Usage
2019-04-23 23:01:00 Memory Usage 0.0
2019-04-23 23:02:00 Memory Usage 8859648.0
2019-04-23 23:03:00 Memory Usage 9181184.0
2019-04-23 23:04:00 Memory Usage 9580544.0
2019-04-23 23:05:00 Memory Usage 10280960.0
2019-04-23 23:06:00 Memory Usage 7815168.0
2019-04-23 23:07:00 Memory Usage 7739392.0
2019-04-23 23:08:00 Memory Usage 8212480.0
2019-04-23 23:09:00 Memory Usage 8159232.0
2019-04-23 23:10:00 Memory Usage 8093696.0

En un grupo de varios contenedores, la dimensión containerName se puede agregar para devolver métricas de
cada contenedor.

az monitor metrics list --resource $CONTAINER_GROUP --metric MemoryUsage --dimension containerName --output
table

Timestamp Name Containername Average


------------------- ------------ -------------------- -----------
2019-04-23 22:59:00 Memory Usage aci-tutorial-app
2019-04-23 23:00:00 Memory Usage aci-tutorial-app
2019-04-23 23:01:00 Memory Usage aci-tutorial-app 0.0
2019-04-23 23:02:00 Memory Usage aci-tutorial-app 16834560.0
2019-04-23 23:03:00 Memory Usage aci-tutorial-app 17534976.0
2019-04-23 23:04:00 Memory Usage aci-tutorial-app 18329600.0
2019-04-23 23:05:00 Memory Usage aci-tutorial-app 19742720.0
2019-04-23 23:06:00 Memory Usage aci-tutorial-app 14786560.0
2019-04-23 23:07:00 Memory Usage aci-tutorial-app 14651392.0
2019-04-23 23:08:00 Memory Usage aci-tutorial-app 15470592.0
2019-04-23 23:09:00 Memory Usage aci-tutorial-app 15450112.0
2019-04-23 23:10:00 Memory Usage aci-tutorial-app 15339520.0
2019-04-23 22:59:00 Memory Usage aci-tutorial-sidecar
2019-04-23 23:00:00 Memory Usage aci-tutorial-sidecar
2019-04-23 23:01:00 Memory Usage aci-tutorial-sidecar 0.0
2019-04-23 23:02:00 Memory Usage aci-tutorial-sidecar 884736.0
2019-04-23 23:03:00 Memory Usage aci-tutorial-sidecar 827392.0
2019-04-23 23:04:00 Memory Usage aci-tutorial-sidecar 831488.0
2019-04-23 23:05:00 Memory Usage aci-tutorial-sidecar 819200.0
2019-04-23 23:06:00 Memory Usage aci-tutorial-sidecar 843776.0
2019-04-23 23:07:00 Memory Usage aci-tutorial-sidecar 827392.0
2019-04-23 23:08:00 Memory Usage aci-tutorial-sidecar 954368.0
2019-04-23 23:09:00 Memory Usage aci-tutorial-sidecar 868352.0
2019-04-23 23:10:00 Memory Usage aci-tutorial-sidecar 847872.0

Pasos siguientes
Para más información sobre la supervisión en Azure, consulte esta introducción a la supervisión de Azure.
Aprenda a crear alertas de métricas para recibir notificaciones cuando una métrica de Azure Container Instances
traspase un umbral.
Recuperación de eventos y registros de contenedor
en Azure Container Instances
23/07/2020 • 4 minutes to read • Edit Online

Cuando haya un contenedor que se comporte de manera inadecuada en Azure Container Instances, empiece por
ver sus registros con az container logs y transmitir su salida estándar y error estándar con az container attach.
También puede ver registros y eventos para instancias de contenedor en el Azure Portal, o bien enviar datos de
registro y eventos para los grupos de contenedores a los registros de Azure Monitor.

Ver registros
Para ver los registros desde el código de la aplicación dentro de un contenedor, puede utilizar el comando az
container logs.
A continuación se muestra la salida del registro del contenedor basado en tareas de ejemplo en Establecer la línea
de comando en una instancia de contenedor, después de haber proporcionado una dirección URL no válida
mediante una invalidación de la línea de comandos:

az container logs --resource-group myResourceGroup --name mycontainer

Traceback (most recent call last):


File "wordcount.py", line 11, in <module>
urllib.request.urlretrieve (sys.argv[1], "foo.txt")
File "/usr/local/lib/python3.6/urllib/request.py", line 248, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "/usr/local/lib/python3.6/urllib/request.py", line 223, in urlopen
return opener.open(url, data, timeout)
File "/usr/local/lib/python3.6/urllib/request.py", line 532, in open
response = meth(req, response)
File "/usr/local/lib/python3.6/urllib/request.py", line 642, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/lib/python3.6/urllib/request.py", line 570, in error
return self._call_chain(*args)
File "/usr/local/lib/python3.6/urllib/request.py", line 504, in _call_chain
result = func(*args)
File "/usr/local/lib/python3.6/urllib/request.py", line 650, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

Flujos de salida como adjuntos


El comandoaz container attach proporciona información de diagnóstico durante el inicio del contenedor. Una vez
que el contenedor se ha iniciado, transmite STDOUT y STDERR a la consola local.
Por ejemplo, este es el resultado de la salida del contenedor basado en tareas en Establecer la línea de comandos
en una instancia de contenedor, después de haber proporcionado una dirección URL válida de un archivo de texto
grande para procesar:

az container attach --resource-group myResourceGroup --name mycontainer


Container 'mycontainer' is in state 'Unknown'...
Container 'mycontainer' is in state 'Waiting'...
Container 'mycontainer' is in state 'Running'...
(count: 1) (last timestamp: 2019-03-21 19:42:39+00:00) pulling image "mcr.microsoft.com/azuredocs/aci-
wordcount:latest"
Container 'mycontainer1' is in state 'Running'...
(count: 1) (last timestamp: 2019-03-21 19:42:39+00:00) pulling image "mcr.microsoft.com/azuredocs/aci-
wordcount:latest"
(count: 1) (last timestamp: 2019-03-21 19:42:52+00:00) Successfully pulled image
"mcr.microsoft.com/azuredocs/aci-wordcount:latest"
(count: 1) (last timestamp: 2019-03-21 19:42:55+00:00) Created container
(count: 1) (last timestamp: 2019-03-21 19:42:55+00:00) Started container

Start streaming logs:


[('the', 22979),
('I', 20003),
('and', 18373),
('to', 15651),
('of', 15558),
('a', 12500),
('you', 11818),
('my', 10651),
('in', 9707),
('is', 8195)]

Obtención de eventos de diagnóstico


Si el contenedor no se implementa correctamente, revise la información de diagnóstico proporcionada por el
proveedor de recursos de Azure Container Instances. Para ver los eventos del contenedor, ejecute el comando az
container show:

az container show --resource-group myResourceGroup --name mycontainer

La salida incluye las propiedades básicas del contenedor, junto con los eventos de implementación (que se
muestran aquí truncados):
{
"containers": [
{
"command": null,
"environmentVariables": [],
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
...
"events": [
{
"count": 1,
"firstTimestamp": "2019-03-21T19:46:22+00:00",
"lastTimestamp": "2019-03-21T19:46:22+00:00",
"message": "pulling image \"mcr.microsoft.com/azuredocs/aci-helloworld\"",
"name": "Pulling",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "2019-03-21T19:46:28+00:00",
"lastTimestamp": "2019-03-21T19:46:28+00:00",
"message": "Successfully pulled image \"mcr.microsoft.com/azuredocs/aci-helloworld\"",
"name": "Pulled",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "2019-03-21T19:46:31+00:00",
"lastTimestamp": "2019-03-21T19:46:31+00:00",
"message": "Created container",
"name": "Created",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "2019-03-21T19:46:31+00:00",
"lastTimestamp": "2019-03-21T19:46:31+00:00",
"message": "Started container",
"name": "Started",
"type": "Normal"
}
],
"previousState": null,
"restartCount": 0
},
"name": "mycontainer",
"ports": [
{
"port": 80,
"protocol": null
}
],
...
}
],
...
}

Pasos siguientes
Obtenga información sobre cómo solucionar problemas comunes de contenedor e implementación en Azure
Container Instances.
Más información sobre cómo enviar datos de registro y eventos para grupos de contenedores a registros de Azure
Monitor.
Registro de instancias y grupos de contenedores
con registros de Azure Monitor
23/07/2020 • 10 minutes to read • Edit Online

Las áreas de trabajo de Log Analytics proporcionan una ubicación centralizada para almacenar y consultar datos
de registro no solo de los recursos de Azure, sino también de los recursos locales y de los recursos de otras
nubes. Azure Container Instances incluye compatibilidad integrada para el envío de registros y datos de evento a
los registros de Azure Monitor.
Para enviar un registro de grupo de contenedores y datos de eventos a los registros de Azure Monitor,
especifique una clave y un identificador de un área de trabajo de Log Analytics existente al configurar un grupo
de contenedores.
En las secciones siguientes se describe cómo crear un grupo de contenedores con el registro habilitado y cómo
consultar registros. También puede actualizar un grupo de contenedores con un identificador de área de trabajo
y una clave de área de trabajo para habilitar el registro.

NOTE
Este artículo se ha actualizado recientemente para usar el término registros de Azure Monitor en lugar de Log Analytics.
Los datos de registro siguen almacenándose en un área de trabajo de Log Analytics y siguen recopilándose y analizándose
por el mismo servicio de Log Analytics. Estamos actualizando la terminología para reflejar mejor el rol de los registros de
Azure Monitor. Consulte Azure Monitor terminology changes (Cambios en la terminología de Azure Monitor) para obtener
más información.

NOTE
Actualmente, solo puede enviar datos de eventos desde instancias de contenedor de Linux a Log Analytics.

Prerrequisitos
Para habilitar el registro en las instancias de los contenedores, necesita lo siguiente:
Área de trabajo de Log Analytics
CLI de Azure (o Cloud Shell)

Obtención de las credenciales de Log Analytics


Azure Container Instances necesita permiso para enviar datos a su área de trabajo de Log Analytics. Para
conceder este permiso y habilitar el registro, es preciso proporcionar el identificador del área de trabajo de Log
Analytics y una de sus claves (la principal o la secundaria) al crear el grupo de contenedores.
Para obtener el identificador y la clave principal del área de trabajo de Log Analytics:
1. Vaya al área de trabajo de Log Analytics en Azure Portal
2. En Configuración , seleccione Configuración avanzada .
3. Seleccione Orígenes conectados > Ser vidores de Windows (o Ser vidores de Linux , ya que tanto el
identificador como las claves son las mismas para ambos)
4. Anote el valor de:
ID. DEL ÁREA DE TRABAJO
CL AVE PRINCIPAL

Creación de un grupo de contenedores


Ahora que tiene el identificador y la clave principal del área de trabajo de Log Analytics, ya puede crear un grupo
de contenedores con el registro habilitado.
En los ejemplos siguientes se muestran dos maneras de crear un grupo de contenedores formado por un solo
contenedor fluentd: CLI de Azure y la CLI de Azure con una plantilla de YAML. El contenedor fluentd genera varias
líneas de salida en su configuración predeterminada. Dado que esta salida se envía a su área de trabajo de Log
Analytics, sirve para mostrar la visualización y consulta de registros.
Implementación con la CLI de Azure
Para implementar con la CLI de Azure, especifique los parámetros --log-analytics-workspace y
--log-analytics-workspace-key en el comando az container create. Antes de ejecutar el siguiente comando,
reemplace los dos valores de área de trabajo por los valores obtenidos en el paso anterior (y actualice el nombre
del grupo de recursos).

az container create \
--resource-group myResourceGroup \
--name mycontainergroup001 \
--image fluent/fluentd \
--log-analytics-workspace <WORKSPACE_ID> \
--log-analytics-workspace-key <WORKSPACE_KEY>

Implementación con YAML


Utilice este método si prefiere implementar grupos de contenedores con YAML. El siguiente fragmento de código
YAML define un grupo de contenedores con un solo contenedor. Copie el código YAML en un nuevo archivo y
sustituya LOG_ANALYTICS_WORKSPACE_ID y LOG_ANALYTICS_WORKSPACE_KEY por los valores que obtuvo en el paso
anterior. Guarde el archivo con el nombre deploy-aci.yaml .

apiVersion: 2019-12-01
location: eastus
name: mycontainergroup001
properties:
containers:
- name: mycontainer001
properties:
environmentVariables: []
image: fluent/fluentd
ports: []
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
osType: Linux
restartPolicy: Always
diagnostics:
logAnalytics:
workspaceId: LOG_ANALYTICS_WORKSPACE_ID
workspaceKey: LOG_ANALYTICS_WORKSPACE_KEY
tags: null
type: Microsoft.ContainerInstance/containerGroups

A continuación, ejecute el siguiente comando para implementar el grupo de contenedores. Reemplace


myResourceGroup por un grupo de recursos de su suscripción (o bien cree antes un grupo de recursos
denominado "myResourceGroup"):
az container create --resource-group myResourceGroup --name mycontainergroup001 --file deploy-aci.yaml

Debería recibir una respuesta de Azure con detalles de implementación poco después de emitir el comando.

Ver registros
Una vez que haya implementado el grupo de contenedores, las primeras entradas de registro pueden tardar
varios minutos (hasta 10) en aparecer en Azure Portal. Para ver los registros del grupo de contenedores en la
tabla ContainerInstanceLog_CL :
1. Vaya al área de trabajo de Log Analytics en Azure Portal
2. En General , seleccione Registros .
3. Escriba la consulta siguiente: ContainerInstanceLog_CL | limit 50
4. Seleccione Ejecutar .
Debería ver que la consulta muestra varios resultados. Si no ve ninguno, espere unos minutos y seleccione el
botón Ejecutar para volver a ejecutar la consulta. De forma predeterminada, las entradas del registro aparecen
en formato de tabla . Luego puede expandir una fila para ver el contenido de una entrada de registro individual.

Ver eventos
También puede ver los eventos de las instancias de contenedor en Azure Portal. Los eventos incluyen la hora a la
que se crea la instancia y el momento en que se inicia. Para ver los datos de evento en la tabla
ContainerEvent_CL :

1. Vaya al área de trabajo de Log Analytics en Azure Portal


2. En General , seleccione Registros .
3. Escriba la consulta siguiente: ContainerEvent_CL | limit 50
4. Seleccione Ejecutar .
Debería ver que la consulta muestra varios resultados. Si no ve ninguno, espere unos minutos y seleccione el
botón Ejecutar para volver a ejecutar la consulta. De forma predeterminada, las entradas aparecen en formato
de tabla . Luego puede expandir una fila para ver el contenido de una entrada individual.
Consulta de registros de contenedores
Los registros de Azure Monitor incluyen un amplio lenguaje de consulta para poder extraer información de miles
de líneas de la salida del registro.
La estructura básica de una consulta consiste en la tabla de origen (en este artículo, ContainerInstanceLog_CL o
ContainerEvent_CL ) seguida de una serie de operadores separados por el carácter de barra vertical ( | ). Puede
encadenar varios operadores para refinar los resultados y realizar funciones avanzadas.
Para ver los resultados de una consulta de ejemplo, pegue la siguiente consulta en el cuadro de texto de consulta
y seleccione el botón Ejecutar para ejecutar la consulta. Esta consulta muestra todas las entradas de registro
cuyo campo "Message" contiene la palabra "warn":

ContainerInstanceLog_CL
| where Message contains "warn"

También se admiten consultas más complejas. Por ejemplo, esta consulta muestra solo las entradas de registro
del grupo de contenedores "mycontainergroup001" generadas en la última hora:

ContainerInstanceLog_CL
| where (ContainerGroup_s == "mycontainergroup001")
| where (TimeGenerated > ago(1h))

Pasos siguientes
Registros de Azure Monitor
Para más información acerca de cómo realizar consultas en registros y configurar alertas en registros de Azure
Monitor, consulte:
Descripción de las búsquedas de registros en los registros de Azure Monitor
Alertas unificadas en Azure Monitor
Supervisión de la CPU y la memoria de los contenedores
Para obtener información acerca de la supervisión de los recursos de CPU y de memoria de un instancia de
contenedor, consulte:
Supervisión de los recursos de los contenedores en Azure Container Instances.
Solución de problemas habituales de Azure
Container Instances
23/07/2020 • 16 minutes to read • Edit Online

En este artículo se muestra cómo solucionar problemas habituales al administrar o implementar contenedores en
Azure Container Instances. Consulte también las preguntas más frecuentes.
Si necesita soporte adicional, consulte las opciones disponibles de Ayuda y sopor te técnico en Azure Portal.

Problemas durante la implementación del grupo de contenedores


Convenciones de nomenclatura
Al definir la especificación de contenedor, ciertos parámetros requieren tener en cuenta las restricciones de
nomenclatura. A continuación se muestra una tabla con requisitos específicos para las propiedades del grupo de
contenedores. Para obtener más información, consulte Convenciones de nomenclatura en el Centro de
arquitectura de Azure y Reglas y restricciones de nomenclatura para los recursos de Azure.

USO DE
M AY ÚSC UL A S Y C A RA C T ERES PAT RÓ N
Á M B ITO L EN GT H M IN ÚSC UL A S VÁ L IDO S SUGERIDO E JEM P LO

Nombre de 1-63 Minúsculas Caracteres <name>-<role>- web-batch-


contenedor1 alfanuméricos y container<number> container1
guion en
cualquier lugar,
excepto el primer
o último carácter

Puertos del Entre 1 y 65 535 Entero Un número <port-number> 443


contenedor entero
comprendido
entre 1 y 65 535

Etiqueta de 5-63 No distingue Caracteres <name> frontend-


nombre DNS mayúsculas de alfanuméricos y site1
minúsculas guion en
cualquier lugar,
excepto el primer
o último carácter

Variable de 1-63 No distingue Caracteres <name> MY_VARIABLE


entorno mayúsculas de alfanuméricos y
minúsculas guion bajo () en
cualquier lugar,
excepto el primer
o último carácter
USO DE
M AY ÚSC UL A S Y C A RA C T ERES PAT RÓ N
Á M B ITO L EN GT H M IN ÚSC UL A S VÁ L IDO S SUGERIDO E JEM P LO

Nombre del 5-63 Minúsculas Caracteres <name> batch-output-


volumen alfanuméricos y volume
guiones en
cualquier lugar,
excepto el primer
o último carácter.
No puede
contener dos
guiones
consecutivos.

1 La restricción también incluye nombres de grupos de contenedores cuando no se especifican

independientemente de las instancias de contenedor, por ejemplo, con implementaciones del comando
az container create .

Versión del sistema operativo de imagen no admitida


Si se especifica una imagen que Azure Container Instances no admite, se devuelve un error
OsVersionNotSupported . El error es similar a la siguiente, donde {0} es el nombre de la imagen que intentó
implementar:

{
"error": {
"code": "OsVersionNotSupported",
"message": "The OS version of image '{0}' is not supported."
}
}

Este error se suele encontrar con más frecuencia al implementar imágenes de Windows basadas en una versión
de canal semianual (SAC) 1709 o 1803, que no se admiten. Para obtener imágenes de Windows admitidas en
Azure Container Instances, consulte las preguntas más frecuentes.
No se puede extraer la imagen
Si inicialmente Azure Container Instances no puede extraer su imagen, lo reintenta durante un período de tiempo.
Si la operación de extracción de imágenes sigue generando errores, ACI acaba por no realizar la implementación
y se muestra un error Failed to pull image .
Para resolver este problema, elimine la instancia de contenedor y vuelva a intentar la implementación. Asegúrese
de que existe la imagen en el registro y de que ha escrito correctamente el nombre de imagen.
Si no se puede extraer la imagen, se muestran eventos similares al siguiente en la salida de az container show:
"events": [
{
"count": 3,
"firstTimestamp": "2017-12-21T22:56:19+00:00",
"lastTimestamp": "2017-12-21T22:57:00+00:00",
"message": "pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
"name": "Pulling",
"type": "Normal"
},
{
"count": 3,
"firstTimestamp": "2017-12-21T22:56:19+00:00",
"lastTimestamp": "2017-12-21T22:57:00+00:00",
"message": "Failed to pull image \"mcr.microsoft.com/azuredocs/aci-hellowrld\": rpc error: code 2 desc
Error: image t/aci-hellowrld:latest not found",
"name": "Failed",
"type": "Warning"
},
{
"count": 3,
"firstTimestamp": "2017-12-21T22:56:20+00:00",
"lastTimestamp": "2017-12-21T22:57:16+00:00",
"message": "Back-off pulling image \"mcr.microsoft.com/azuredocs/aci-hellowrld\"",
"name": "BackOff",
"type": "Normal"
}
],

Error de recurso no disponible


Debido a la carga variable de recursos regionales en Azure, podría recibir el siguiente error al intentar
implementar una instancia del contenedor:
The requested resource with 'x' CPU and 'y.z' GB memory is not available in the location 'example region' at
this moment. Please retry with a different resource request or in another location.

Este error indica que, debido a una carga elevada en la región en la que está intentando la implementación, no se
pueden asignar los recursos especificados para el contenedor en ese momento. Utilice uno o varios de los
siguientes pasos de mitigación para ayudar a resolver el problema.
Compruebe que la configuración de implementación del contenedor se encuentra dentro de los parámetros
definidos en Region availability for Azure Container Instances (Disponibilidad de regiones en instancias de
Azure Container)
Especifique la configuración de CPU y memoria más baja para el contenedor
Implemente en una región distinta de Azure
Implemente en un momento posterior

Problemas durante el tiempo de ejecución del grupo de contenedores


El contenedor se cierra y se reinicia continuamente (sin proceso de ejecución prolongada)
Los grupos de contenedores tienen una directiva de reinicio establecida en Always (Siempre) de forma
predeterminada, por lo que los contenedores del grupo de contenedores siempre se reinician después de
ejecutarse hasta su finalización. Es posible que deba cambiar este valor a OnFailure (En caso de error) o Never
(Nunca) si va a ejecutar contenedores basados en tareas. Si especifica OnFailure y sigue observando reinicios
continuos, podría haber un problema con la aplicación o el script que se ejecuta en el contenedor.
Al ejecutar grupos de contenedores sin procesos de ejecución prolongada, es posible que vea cierres y reinicios
repetidos con imágenes como Ubuntu o Alpine. La conexión mediante EXEC no funcionará porque el contenedor
no tiene ningún proceso que lo mantenga activo. Para resolver este problema, incluya un comando de inicio
similar al siguiente con la implementación del grupo de contenedores para mantener el contenedor en ejecución.
## Deploying a Linux container
az container create -g MyResourceGroup --name myapp --image ubuntu --command-line "tail -f /dev/null"

## Deploying a Windows container


az container create -g myResourceGroup --name mywindowsapp --os-type Windows --image
mcr.microsoft.com/windows/servercore:ltsc2019
--command-line "ping -t localhost"

La API de Container Instances y Azure Portal incluyen una propiedad restartCount . Para comprobar el número
de reinicios de un contenedor, puede usar el comando az container show de la CLI de Azure. En la siguiente salida
de ejemplo (que se ha truncado por razones de brevedad), puede ver la propiedad restartCount al final de la
salida.

...
"events": [
{
"count": 1,
"firstTimestamp": "2017-11-13T21:20:06+00:00",
"lastTimestamp": "2017-11-13T21:20:06+00:00",
"message": "Pulling: pulling image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "2017-11-13T21:20:14+00:00",
"lastTimestamp": "2017-11-13T21:20:14+00:00",
"message": "Pulled: Successfully pulled image \"myregistry.azurecr.io/aci-tutorial-app:v1\"",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "2017-11-13T21:20:14+00:00",
"lastTimestamp": "2017-11-13T21:20:14+00:00",
"message": "Created: Created container with id
bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
"type": "Normal"
},
{
"count": 1,
"firstTimestamp": "2017-11-13T21:20:14+00:00",
"lastTimestamp": "2017-11-13T21:20:14+00:00",
"message": "Started: Started container with id
bf25a6ac73a925687cafcec792c9e3723b0776f683d8d1402b20cc9fb5f66a10",
"type": "Normal"
}
],
"previousState": null,
"restartCount": 0
...
}

NOTE
La mayoría de las imágenes de contenedor para las distribuciones de Linux establecen una shell, como bash, como el
comando predeterminado. Puesto que un shell por sí mismo no es un servicio de ejecución prolongada, estos
contenedores se cierran inmediatamente y caen en un bucle de reinicio cuando se configuran con la directiva de reinicio
predeterminada Always .

El contenedor tarda mucho tiempo en iniciar


Los tres factores principales que contribuyen al tiempo de inicio del contenedor en Azure Container Instances
son:
Tamaño de las imágenes
Ubicación de las imágenes
Imágenes en caché
Las imágenes de Windows tienen consideraciones adicionales.
Tamaño de las imágenes
Si el contenedor tarda mucho tiempo en iniciar, pero al final se realiza correctamente, comience por mirar el
tamaño de la imagen del contenedor. Como Azure Container Instances extrae la imagen del contenedor a
petición, el tiempo de inicio está directamente relacionado con su tamaño.
Puede ver el tamaño de la imagen del contenedor mediante el comando docker images en la CLI de Docker:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcr.microsoft.com/azuredocs/aci-helloworld latest 7367f3256b41 15 months ago 67.6MB

La clave para mantener tamaños de imagen pequeños es asegurarse de que la imagen final no contiene nada que
no sea necesario en tiempo de ejecución. Una manera de hacerlo es con compilaciones en varias etapas. Las
compilaciones en varias etapas hacen más sencillo asegurarse de que la imagen final contiene solo los artefactos
necesarios para la aplicación y no los del contenido extra que se requiere en tiempo de compilación.
Ubicación de las imágenes
Otra forma de reducir el impacto de la extracción de la imagen en el tiempo de inicio del contenedor es hospedar
la imagen del contenedor con Azure Container Registry en la misma región en la que van a implementar las
instancias de contenedor. Esto reduce la ruta de acceso de red que debe recorrer la imagen del contenedor, lo que
reduce significativamente el tiempo de descarga.
Imágenes en caché
Azure Container Instances usa un mecanismo de almacenamiento en caché para acelerar el tiempo de inicio del
contenedor para las imágenes creadas con imágenes de base de Windows, incluidas nanoserver:1809 ,
servercore:ltsc2019 y servercore:1809 . También se almacenan en caché las imágenes de Linux usadas
comúnmente, como ubuntu:1604 y alpine:3.6 . Para obtener una lista actualizada de imágenes y etiquetas en
caché, use la API List Cached Images.

NOTE
El uso de imágenes basadas en Windows Server 2019 en Azure Container Instances está en versión preliminar.

Preparación para la red lenta de contenedores de Windows


Durante la creación inicial, los contenedores de Windows pueden no tener conectividad de entrada o salida hasta
un máximo de 30 segundos (o, en raras ocasiones, incluso más). Si la aplicación contenedora necesita una
conexión a Internet, agregue una lógica de retraso y reintento para dejar 30 segundos para el establecimiento de
la conectividad de Internet. Después de la instalación inicial, las redes de contenedores se deben reanudar
adecuadamente.
No se puede conectar a la API de Docker subyacente ni ejecutar contenedores con privilegios
Azure Container Instances no expone acceso directo a la infraestructura subyacente que hospeda los grupos de
contenedores. Esto incluye el acceso a la API de Docker que se ejecuta en el host del contenedor y la ejecución de
contenedores con privilegios elevados. Si se requiere la interacción de Docker, compruebe la documentación de
referencia de REST para ver lo que admite la API de ACI. Si falta algo, envíe una solicitud en los foro de
comentarios de ACI.
Las direcciones IP del grupo de contenedores pueden no estar accesibles debido a que los puertos no
coinciden
Azure Container Instances no admite aún la asignación de puertos con la configuración normal de Docker. Si
encuentra una dirección IP de grupo de contenedores no accesible y cree que debería serlo, asegúrese de que ha
configurado la imagen de contenedor para que escuche a los mismos puertos que expone en el grupo de
contenedores con la propiedad ports .
Si desea confirmar que Azure Container Instances escucha en el puerto que configuró en la imagen de
contenedor, pruebe una implementación de la imagen aci-helloworld que expone el puerto. Ejecute también la
aplicación aci-helloworld para que escuche en el puerto. aci-helloworld acepta una variable de entorno
opcional PORT para invalidar el puerto 80 predeterminado en el que escucha. Por ejemplo, para probar el
puerto 9000, establezca la variable de entorno al crear el grupo de contenedores:
1. Configure el grupo de contenedores para que exponga el puerto 9000 y pase el número de puerto como
el valor de la variable de entorno. El ejemplo tiene el formato adecuado para el shell de Bash. Si prefiere
otro shell como PowerShell o el símbolo del sistema, deberá ajustar la asignación de variables según
corresponda.

az container create --resource-group myResourceGroup \


--name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld \
--ip-address Public --ports 9000 \
--environment-variables 'PORT'='9000'

2. Busque la dirección IP del grupo de contenedores en la salida del comando de az container create .
Busque el valor de ip .
3. Una vez aprovisionado el contenedor correctamente, vaya a la dirección IP y al puerto de la aplicación
contenedora en el explorador, por ejemplo, 192.0.2.0:9000 .
Debería ver el mensaje "Welcome to Azure Container Instances!" (Bienvenida a Azure Container Instances)
que muestra la aplicación web.
4. Cuando haya terminado con el contenedor, elimínelo con el comando az container delete :

az container delete --resource-group myResourceGroup --name mycontainer

Pasos siguientes
Obtenga información sobre cómo recuperar eventos y registros de contenedor para ayudar a depurar los
contenedores.
Referencia de YAML: Azure Container Instances
23/07/2020 • 15 minutes to read • Edit Online

En este artículo se abordan la sintaxis y las propiedades del archivo YAML compatible con Azure Container
Instances para configurar un grupo de contenedores. Use un archivo YAML para especificar la configuración del
grupo en el comando az container create en la CLI de Azure.
Un archivo YAML es una manera cómoda de configurar un grupo de contenedores para implementaciones
reproducibles. Es una alternativa concisa al uso de una plantilla de Resource Manager o los SDK de Azure
Container Instances para crear o actualizar un grupo de contenedores.

NOTE
Esta referencia se aplica a los archivos YAML para la versión de la API REST de Azure Container Instances 2018-10-01 .

Schema
A continuación se muestra el esquema para el archivo YAML, con comentarios para resaltar las principales
propiedades. Para obtener una descripción de las propiedades de este esquema, vea la sección Valores de
propiedad.

name: string # Name of the container group


apiVersion: '2018-10-01'
location: string
tags: {}
identity:
type: string
userAssignedIdentities: {}
properties: # Properties of container group
containers: # Array of container instances in the group
- name: string # Name of an instance
properties: # Properties of an instance
image: string # Container image used to create the instance
command:
- string
ports: # External-facing ports exposed on the instance, must also be set in group ipAddress property
- protocol: string
port: integer
environmentVariables:
- name: string
value: string
secureValue: string
resources: # Resource requirements of the instance
requests:
memoryInGB: number
cpu: number
gpu:
count: integer
sku: string
limits:
memoryInGB: number
cpu: number
gpu:
count: integer
sku: string
volumeMounts: # Array of volume mounts for the instance
- name: string
mountPath: string
mountPath: string
readOnly: boolean
livenessProbe:
exec:
command:
- string
httpGet:
path: string
port: integer
scheme: string
initialDelaySeconds: integer
periodSeconds: integer
failureThreshold: integer
successThreshold: integer
timeoutSeconds: integer
readinessProbe:
exec:
command:
- string
httpGet:
path: string
port: integer
scheme: string
initialDelaySeconds: integer
periodSeconds: integer
failureThreshold: integer
successThreshold: integer
timeoutSeconds: integer
imageRegistryCredentials: # Credentials to pull a private image
- server: string
username: string
password: string
restartPolicy: string
ipAddress: # IP address configuration of container group
ports:
- protocol: string
port: integer
type: string
ip: string
dnsNameLabel: string
osType: string
volumes: # Array of volumes available to the instances
- name: string
azureFile:
shareName: string
readOnly: boolean
storageAccountName: string
storageAccountKey: string
emptyDir: {}
secret: {}
gitRepo:
directory: string
repository: string
revision: string
diagnostics:
logAnalytics:
workspaceId: string
workspaceKey: string
logType: string
metadata: {}
networkProfile: # Virtual network profile for container group
id: string
dnsConfig: # DNS configuration for container group
nameServers:
- string
searchDomains: string
options: string
Valores de propiedad
Las tablas siguientes describen los valores que debe establecer en el esquema.
Objeto Microsoft.ContainerInstance/containerGroups
N O M B RE T IP O O B L IGATO RIO VA L UE

name string Sí Nombre del grupo de


contenedores.

apiVersion enum Sí 2018-10-01

ubicación string No Ubicación del recurso.

etiquetas object No Etiquetas del recurso.

identity object No Identidad del grupo de


contenedores, si está
configurada. - Objeto
ContainerGroupIdentity

properties object Sí Objeto


ContainerGroupProperties

Objeto ContainerGroupIdentity
N O M B RE T IP O O B L IGATO RIO VA L UE

type enum No Tipo de identidad utilizado


para el grupo de
contenedores. El tipo
"SystemAssigned,
UserAssigned" incluye una
identidad creada
implícitamente y un
conjunto de identidades
asignadas por el usuario. El
tipo "None" quitará las
identidades del grupo de
contenedores. -
SystemAssigned,
UserAssigned,
SystemAssigned,
UserAssigned, None
N O M B RE T IP O O B L IGATO RIO VA L UE

userAssignedIdentities object No Lista de identidades de


usuario asociadas con el
grupo de contenedores. Las
referencias clave del
diccionario de identidades
de usuario serán los
identificadores de recursos
de Azure Resource Manager
con el formato
"/subscriptions/{subscription
Id}/resourceGroups/{resourc
eGroupName}/providers/Mi
crosoft.ManagedIdentity/us
erAssignedIdentities/{identit
yName}".

Objeto ContainerGroupProperties
N O M B RE T IP O O B L IGATO RIO VA L UE

containers array Sí Contenedores del grupo de


contenedores. - Objeto
Container

imageRegistryCredentials array No Credenciales del registro de


imágenes por las que se
crea el grupo de
contenedores. - Objeto
ImageRegistryCredential

restartPolicy enum No Directiva de reinicio para


todos los contenedores del
grupo de contenedores. -
Always Reiniciar siempre-
OnFailure Reiniciar con un
error - Never No reiniciar
nunca. - Always, OnFailure,
Never

ipAddress object No Tipo de dirección IP del


grupo de contenedores. -
Objeto IpAddress

osType enum Sí Tipo de sistema operativo


requerido por los
contenedores del grupo de
contenedores. - Windows o
Linux

volumes array No Lista de volúmenes que


pueden montar los
contenedores de este grupo
de contenedores. - Objeto
Volume
N O M B RE T IP O O B L IGATO RIO VA L UE

diagnóstico object No Información de diagnóstico


de un grupo de
contenedores. - Objeto
ContainerGroupDiagnostics

networkProfile object No Información de perfil de red


de un grupo de
contenedores. - Objeto
ContainerGroupNetworkPro
file

dnsConfig object No Información de


configuración DNS de un
grupo de contenedores. -
Objeto DnsConfiguration

Objeto Container
N O M B RE T IP O O B L IGATO RIO VA L UE

name string Sí Nombre proporcionado por


el usuario de la instancia de
contenedor.

properties object Sí Propiedades de la instancia


de contenedor. - Objeto
ContainerProperties

Objeto ImageRegistryCredential
N O M B RE T IP O O B L IGATO RIO VA L UE

server string Sí Servidor de registro de


imagen de Docker sin un
protocolo como "http" y
"https".

username string Sí Nombre de usuario del


registro privado.

password string No Contraseña del registro


privado.

Objeto IpAddress
N O M B RE T IP O O B L IGATO RIO VA L UE

ports array Sí Lista de puertos expuestos


en el grupo de
contenedores. - Objeto Port

type enum Sí Especifica si la dirección IP


se expone a la red pública
de Internet o una red virtual
privada. - Pública o privada
N O M B RE T IP O O B L IGATO RIO VA L UE

ip string No Dirección IP expuesta a la


red pública de Internet.

dnsNameLabel string No Etiqueta del nombre DNS


para la IP.

Objeto Volume
N O M B RE T IP O O B L IGATO RIO VA L UE

name string Sí El nombre del objeto visual.

azureFile object No Volumen de archivos de


Azure. - Objeto
AzureFileVolume

emptyDir object No Volumen de directorio vacío.

secret object No Volumen secreto.

gitRepo object No Volumen de repositorio GIT.


- Objeto GitRepoVolume

Objeto ContainerGroupDiagnostics
N O M B RE T IP O O B L IGATO RIO VA L UE

logAnalytics object No Información de Log


Analytics del grupo de
contenedores. - Objeto
LogAnalytics

Objeto ContainerGroupNetworkProfile
N O M B RE T IP O O B L IGATO RIO VA L UE

id string Sí Identificador de un perfil de


red.

Objeto DnsConfiguration
N O M B RE T IP O O B L IGATO RIO VA L UE

nameServers array Sí Servidores DNS para el


grupo de contenedores. -
cadena

searchDomains string No Dominios de búsqueda de


DNS para la búsqueda del
nombre de host en el grupo
de contenedores.

opciones string No Opciones de DNS para el


grupo de contenedores.
Objeto ContainerProperties
N O M B RE T IP O O B L IGATO RIO VA L UE

imagen string Sí Nombre de la imagen


utilizada para crear la
instancia de contenedor.

command array No Comandos para ejecutar


dentro de la instancia de
contenedor en el formato
de ejecución. - cadena

ports array No Puertos expuestos en la


instancia de contenedor. -
Objeto ContainerPort

environmentVariables array No Variables de entorno para


establecer en la instancia de
contenedor. - Objeto
EnvironmentVariable

resources object Sí Requisitos de los recursos


de la instancia de
contenedor. - Objeto
ResourceRequirements

volumeMounts array No Montajes de volumen


disponibles para la instancia
de contenedor. - Objeto
VolumeMount

livenessProbe object No Sondeo de ejecución. -


Objeto ContainerProbe

readinessProbe object No Sondeo de preparación. -


Objeto ContainerProbe

Objeto Port
N O M B RE T IP O O B L IGATO RIO VA L UE

protocol enum No Protocolo asociado al


puerto. - TCP o UDP

port integer Sí Número del puerto.

Objeto AzureFileVolume
N O M B RE T IP O O B L IGATO RIO VA L UE

shareName string Sí Nombre del recurso


compartido de archivos de
Azure que se va a montar
como un volumen.
N O M B RE T IP O O B L IGATO RIO VA L UE

readOnly boolean No Marca que indica si el


recurso compartido de
archivos de Azure montado
como un volumen es de
solo lectura.

storageAccountName string Sí Nombre de la cuenta de


almacenamiento que
contiene el recurso
compartido de archivos de
Azure.

storageAccountKey string No Clave de acceso de la cuenta


de almacenamiento utilizada
para acceder al recurso
compartido de archivos de
Azure.

Objeto GitRepoVolume
N O M B RE T IP O O B L IGATO RIO VA L UE

directory string No Nombre del directorio de


destino. No debe contener
".." ni empezar así. Si se
proporciona ".", el directorio
de volumen será el
repositorio de GIT. De lo
contrario, si se especifica, el
volumen contendrá el
repositorio de GIT en el
subdirectorio con el nombre
especificado.

repository string Sí Dirección URL del


repositorio

revision string No Hash de confirmación para


la revisión especificada.

Objeto LogAnalytics
N O M B RE T IP O O B L IGATO RIO VA L UE

workspaceId string Sí Identificador del área de


trabajo de Log Analytics

workspaceKey string Sí Clave del área de trabajo de


Log Analytics

logType enum No Tipo de registro que se va a


usar. - ContainerInsights o
ContainerInstanceLogs

metadata object No Metadatos de Log Analytics.


Objeto ContainerPort
N O M B RE T IP O O B L IGATO RIO VA L UE

protocol enum No Protocolo asociado al


puerto. - TCP o UDP

port integer Sí Número de puerto expuesto


en el grupo de
contenedores.

Objeto EnvironmentVariable
N O M B RE T IP O O B L IGATO RIO VA L UE

name string Sí Nombre de la variable de


entorno.

value string No Valor de la variable de


entorno.

secureValue string No Valor de la variable de


entorno segura.

Objeto ResourceRequirements
N O M B RE T IP O O B L IGATO RIO VA L UE

Solicitudes object Sí Solicitudes de los recursos


de la instancia de
contenedor. - Objeto
ResourceRequests

límites object No Límites de los recursos de la


instancia de contenedor. -
Objeto ResourceLimits

Objeto VolumeMount
N O M B RE T IP O O B L IGATO RIO VA L UE

name string Sí Nombre del montaje de


volumen.

mountPath string Sí La ruta de acceso dentro del


contenedor en la que se
debe montar el volumen.
No debe contener dos
puntos (:).

readOnly boolean No Marca que indica si el


montaje del volumen es de
solo lectura.

Objeto ContainerProbe
N O M B RE T IP O O B L IGATO RIO VA L UE

exec object No Comando de ejecución para


sondear - objeto
ContainerExec

httpGet object No La configuración de http get


para sondear - objeto
ContainerHttpGet

initialDelaySeconds integer No Segundos de retardo


iniciales.

periodSeconds integer No Período de segundos.

failureThreshold integer No Umbral de error.

successThreshold integer No Umbral correcto.

timeoutSeconds integer No Tiempo de espera en


segundos.

Objeto ResourceRequests
N O M B RE T IP O O B L IGATO RIO VA L UE

memoryInGB number Sí Solicitud de memoria en GB


de esta instancia de
contenedor.

cpu number Sí Solicitud de CPU de esta


instancia de contenedor.

gpu object No Solicitud de GPU de esta


instancia de contenedor. -
Objeto GpuResource

Objeto ResourceLimits
N O M B RE T IP O O B L IGATO RIO VA L UE

memoryInGB number No Límite de memoria en GB de


esta instancia de
contenedor.

cpu number No Límite de CPU de esta


instancia de contenedor.

gpu object No Límite de GPU de esta


instancia de contenedor. -
Objeto GpuResource

Objeto ContainerExec
N O M B RE T IP O O B L IGATO RIO VA L UE

command array No Comandos para ejecutar


dentro del contenedor. -
cadena

Objeto ContainerHttpGet
N O M B RE T IP O O B L IGATO RIO VA L UE

path string No Ruta de acceso que se va a


sondear.

port integer Sí Número de puerto que se


va a sondear.

scheme enum No Esquema. - http o https

Objeto GpuResource
N O M B RE T IP O O B L IGATO RIO VA L UE

count integer Sí Recuento del recurso de


GPU.

sku enum Sí SKU del recurso de GPU. -


K80, P100, V100

Pasos siguientes
Vea el tutorial Implementación de un grupo de varios contenedores con un archivo YAML.
Vea ejemplos de uso de un archivo YAML para implementar grupos de contenedores en una red virtual o para
montar un volumen externo.
Preguntas más frecuentes sobre Azure Container
Instances
23/07/2020 • 9 minutes to read • Edit Online

En este artículo se abordan las preguntas más frecuentes sobre Azure Container Instances.

Implementación
¿Qué tamaño puede tener mi imagen de contenedor?
El tamaño máximo de una imagen de contenedor implementable en Azure Container Instances es de 15 GB. Es
posible que pueda implementar imágenes de mayor tamaño según la disponibilidad exacta en el momento de la
implementación, pero no es seguro.
El tamaño de la imagen de contenedor afecta al tiempo que tarda en implementarse, por lo que, generalmente, le
interesará que las imágenes de contenedor sean lo más pequeñas posible.
¿Cómo puedo acelerar la implementación de mi contenedor?
Dado que uno de los principales factores determinantes en el tiempo de implementación es el tamaño de imagen,
busque formas de reducir el tamaño. Quite las capas que no necesite o reduzca el tamaño de las capas de la
imagen (seleccionando una imagen de sistema operativo de base menos pesada). Por ejemplo, si ejecuta
contenedores de Linux, considere la posibilidad de usar Alpine como imagen de base en lugar de un servidor de
Ubuntu completo. Asimismo, para contenedores de Windows, use una imagen de base de Nano Server si es
posible.
También debe comprobar la lista de imágenes previamente almacenadas en caché en Azure Container Images,
disponible a través de la API List Cached Images. Es posible que pueda desactivar una capa de imagen de una de
las imágenes previamente almacenadas en caché.
Consulte una guía más detallada sobre cómo reducir el tiempo de inicio del contenedor.
¿Qué imágenes de sistema operativo de base de Windows se admiten?

NOTE
Debido a problemas de compatibilidad con versiones anteriores tras las actualizaciones de Windows en 2020, las siguientes
versiones de imagen incluyen el número de versión mínimo que se recomienda usar en la imagen de base. Las
implementaciones actuales que usan versiones de imagen anteriores no se ven afectadas, pero las nuevas implementaciones
deben adaptarse a las siguientes imágenes de base.

Imágenes de base de Windows Server 2016


Nano Server: sac2016 , 10.0.14393.3506 o más reciente
Windows Server Core: ltsc2016 , 10.0.14393.3506 o más reciente

NOTE
No se admiten las imágenes de Windows basadas en las versiones de Canal semianual 1709 o 1803.

Imágenes de base de Windows Server 2019 y cliente (versión preliminar)


Nano Server: 1809 , 10.0.17763.1040 o más reciente
Windows Server Core: ltsc2019 , 1809 , 10.0.17763.1040 o más reciente
Windows: 1809 , 10.0.17763.1040 o más reciente
¿Qué capas de imagen .NET o .NET Core debo usar en mi contenedor?
Use la imagen más pequeña que satisfaga sus requisitos. Para Linux, puede usar una imagen runtime-alpine de
.NET Core, que se admite desde el lanzamiento de .NET Core 2.1. Para Windows, si está utilizando .NET Framework
completo, deberá usar una imagen de Windows Server Core (imagen runtime-only, como, por ejemplo, 4.7.2-
windowsservercore-ltsc2016). Las imágenes runtime-only son más pequeñas pero no admiten cargas de trabajo
que requieran el SDK de .NET.

Disponibilidad y cuotas
¿Cuántos núcleos y qué memoria debo asignar para mis contenedores o para el grupo de contenedores?
Realmente, esto depende de su carga de trabajo. Empiece poco a poco y pruebe el rendimiento para ver cómo
funcionan los contenedores. Supervise el uso de recursos de CPU y memoria y, a continuación, agregue núcleos o
memoria en función del tipo de procesos que implementa en el contenedor.
Asegúrese de comprobar también la disponibilidad de recursos para la región de implementación para los límites
superiores en los núcleos de CPU y memoria disponibles para cada grupo de contenedores.

NOTE
La infraestructura subyacente al servicio utiliza una pequeña cantidad de los recursos de un grupo de contenedores. Los
contenedores pueden acceder a la mayoría de los recursos asignados al grupo, pero no a todos. Por este motivo, debe
planear un pequeño búfer de recursos al solicitar los recursos para los contenedores del grupo.

¿En qué infraestructura subyacente se ejecuta ACI?


Azure Container Instances pretende ser un servicio de contenedores a petición sin servidor, por lo que queremos
que se centre en el desarrollo de los contenedores y no en la infraestructura. Para aquellos que tengan curiosidad o
quieran hacer comparaciones de rendimiento, ACI se ejecuta en conjuntos de máquinas virtuales de Azure de
varios SKU, principalmente de las series F y D. Esperamos que esto cambie en el futuro, ya que seguimos
desarrollando y optimizando el servicio.
Deseo implementar miles de núcleos en ACI: ¿puedo aumentar mi cuota?
Sí (a veces). Consulte el artículo sobre cuotas y límites para conocer las cuotas actuales y qué límites se pueden
aumentar por solicitud.
¿Puedo implementar con más de 4 núcleos y 16 GB de RAM?
Todavía no. Actualmente, estos son los valores máximos para un grupo de contenedores. Póngase en contacto con
el soporte técnico de Azure para trasladarle solicitudes o requisitos específicos.
¿Cuándo estará ACI en una región específica?
La disponibilidad regional actual se encuentra publicada aquí. Si tiene un requisito para una región específica,
póngase en contacto con el soporte técnico de Azure.

Características y escenarios
¿Cómo se puede escalar un grupo de contenedores?
Actualmente, el escalado no está disponible para contenedores o grupos de contenedores. Si necesita ejecutar más
instancias, use nuestra API para automatizar y crear más solicitudes de creación de grupos de contenedores en el
servicio.
¿Qué características están disponibles para las instancias que se ejecutan en una red virtual personalizada?
Puede implementar grupos de contenedores en una red virtual de Azure que elija y delegar las direcciones IP
privadas a los grupos de contenedores para redirigir el tráfico dentro de la red virtual a través de los recursos de
Azure. La implementación de un grupo de contenedores en una red virtual está disponible actualmente para
cargas de trabajo de producción en un subconjunto de regiones de Azure.

Precios
¿Cuándo empieza a ejecutarse el medidor?
La duración del grupo de contenedores se calcula desde el momento en que empezamos a extraer la imagen del
primer contenedor (para una implementación nueva) o se reinicia el grupo de contenedores (si ya se ha
implementado), y hasta que se detenga el grupo de contenedores. Consulte los detalles en Precios de Container
Instances.
¿Dejo de recibir cargos cuando se detienen los contenedores?
Los medidores dejan de ejecutarse cuando se detiene el grupo de contenedores completo. Mientras que un
contenedor del grupo de contenedores se esté ejecutando, mantenemos los recursos por si desea iniciar los
contenedores de nuevo.

Pasos siguientes
Más información sobre Azure Container Instances.
Solución de problemas habituales de Azure Container Instances.

También podría gustarte