Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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.
NOTE
El uso de imágenes basadas en Windows Server 2019 en Azure Container Instances está en versión preliminar.
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.
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.
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:
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.
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"
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:
Limpieza de recursos
Cuando haya terminado con el contenedor, puede eliminarlo con el comando az container delete:
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:
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:
Felicidades. Con tan solo implementar algunos valores, ha implementado una aplicación de acceso público en
Azure Container Instances.
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.
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:
El estado de aprovisionamiento, el nombre de dominio completo (FQDN) y la dirección IP del contenedor aparecen
en la salida del cmdlet:
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:
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]"
}
}
}
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.
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.
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
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.
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:
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
docker images
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aci-tutorial-app latest 5c745774dfa9 39 seconds ago 68.1 MB
La salida del comando docker run muestra el identificador del contenedor en ejecución si el comando se realizó
correctamente:
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.
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:
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.
Por ejemplo:
Login Succeeded
Result
------------------------
mycontainerregistry082.azurecr.io
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 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
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
Por ejemplo:
Result
----------------
aci-tutorial-app
Para ver las etiquetas de una imagen concreta, use el comando az acr repository show-tags.
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 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.
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:
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.
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:
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.
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.
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
Implemente el grupo de contenedores con el comando az container create y pase el archivo YAML como un
argumento:
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:
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 .
Salida:
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.
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.
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:
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 .
Salida:
Every 3s: curl -I http://localhost 2020-07-02 20:36:41
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.
[...]
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.
https://myfunctionapp.azurewebsites.net/api/HttpTrigger
[...]
> 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 :
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
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.
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
Plantillas de ejemplo
P L A N T IL L A DESC RIP C IÓ N
Aplicaciones
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
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.
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.
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.
Puertos por IP 5
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.
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
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
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
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.
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.
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.
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
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
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
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.
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
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 )
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.
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.
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ó:
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.
/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 :
Una vez completada la implementación, ejecute el comando az container show para mostrar su estado. Salida
del ejemplo:
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:
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 .
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.
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
# 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.
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.
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.
[...]
"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.
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.
az ad sp create-for-rbac \
--scope $groupId \
--role Contributor \
--sdk-auth
{
"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:
SEC RETO VA L UE
RESOURCE_GROUP Nombre del grupo de recursos que usó para limitar el ámbito
de la entidad de servicio
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@master
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
Una vez aprovisionada la instancia, navegue hasta el FQDN del contenedor en el explorador para ver la aplicación
web en ejecució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
[...]
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/
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.
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).
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 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.
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]"
}
}
}
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.
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
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": {}
}
]
}
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 .
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.
az container create \
--resource-group myResourceGroup \
--name mycontainer \
--image mycontainerimage \
--restart-policy OnFailure
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:
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
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.
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.
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)]
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.
La salida de cada contenedor muestra cómo ha modificado la ejecución del script mediante el contenedor
estableciendo las variables de entorno.
Azure:\
PS Azure:\> Get-AzContainerInstanceLog -ResourceGroupName myResourceGroup -ContainerGroupName mycontainer2
[('CLAUDIUS', 120),
('POLONIUS', 113),
('GERTRUDE', 82),
('ROSENCRANTZ', 69),
('GUILDENSTERN', 54)]
Azure:\
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):
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:
Cuando haya abierto un shell interactivo dentro del contenedor, tendrá acceso al valor de la variable SECRET :
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.
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.
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
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.
Salida:
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:
Salida:
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.
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.
C:\>dir
Volume in drive C has no label.
Volume Serial Number is 76E0-C852
Directory of C:\
C:\>exit
Bye.
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.
Siempre OnFailure
OnFailure OnFailure
Nunca Nunca
{
"$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.
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.
az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name hamlet
Salida:
az container logs \
--resource-group myResourceGroup \
--name myContainerGroup \
--container-name juliet
Salida:
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.
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:
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.
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.
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/... ):
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"}}
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.
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
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userA
ssignedIdentities/{identityName}"
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
"identity": {
"type": "SystemAssigned"
}
"identity": {
"type": "System Assigned, UserAssigned",
"userAssignedIdentities": {
"myResourceID1": {
}
}
}
...
'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userA
ssignedIdentities/{identityName}'
identity:
type: UserAssigned
userAssignedIdentities:
{'myResourceID1':{}}
identity:
type: SystemAssigned
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.
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
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.
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:
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
{
"$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.
Salida:
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:
Cuando termine de trabajar con las instancias de contenedor que creó, elimínelas con los siguientes comandos:
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.
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.
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 .
worker_processes auto;
events {
worker_connections 1024;
}
pid /var/run/nginx.pid;
http {
http {
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
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
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
Implemente el grupo de contenedores con el comando az container create y pase el archivo YAML como un
argumento.
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.
Cree una red virtual con el comando az network vnet create. Este comando crea la subred myAGSubnet en la red.
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 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
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.
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:
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.
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 :
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 :
"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.
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.
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 :
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.
{
"$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:
Para comprobar que se ha montado el volumen de gitRepo, inicie un shell en el contenedor con az container exec
y enumere el directorio:
/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
{
"$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.
--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:
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.
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.
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 :
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 show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv
wget <ipAddress>
$ 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
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.
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:
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.
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.
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 .
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 .
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
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:
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)
az container create \
--resource-group myResourceGroup \
--name mycontainergroup001 \
--image fluent/fluentd \
--log-analytics-workspace <WORKSPACE_ID> \
--log-analytics-workspace-key <WORKSPACE_KEY>
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
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 :
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.
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
independientemente de las instancias de contenedor, por ejemplo, con implementaciones del comando
az container create .
{
"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"
}
],
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
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 .
$ 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.
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 :
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.
Objeto ContainerGroupIdentity
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ContainerGroupProperties
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto Container
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ImageRegistryCredential
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto IpAddress
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto Volume
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ContainerGroupDiagnostics
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ContainerGroupNetworkProfile
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto DnsConfiguration
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto Port
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto AzureFileVolume
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto GitRepoVolume
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto LogAnalytics
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto EnvironmentVariable
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ResourceRequirements
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto VolumeMount
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ContainerProbe
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ResourceRequests
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ResourceLimits
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ContainerExec
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto ContainerHttpGet
N O M B RE T IP O O B L IGATO RIO VA L UE
Objeto GpuResource
N O M B RE T IP O O B L IGATO RIO VA L UE
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.
NOTE
No se admiten las imágenes de Windows basadas en las versiones de Canal semianual 1709 o 1803.
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.
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.