Hoy traemos como podemos tener nuestros containers en Azure Container Instances, a ver que os parece.
Precio
El coste de los containers dependerá del número de CPU/Memoria desde 1GB/1CPU con un coste aprox. de 35€ mes arrancado todo el día para el Grupo de containers.
Precios de Container Instances | Microsoft Azure

Portal
Vamos a crearnos un Container instances desde Azure Portal, buscamos en el marketplace Container Instances.

Introducimos nuestros valores.
- Subscripción, seleccionamos de nuestra lista si tenemos varias.
- Resource Group, seleccionamos o creamos uno nuevo.
- Container name, nombre para el container instance.
- Region, seleccionar la que mejor nos venga.
- Availability zones, si queremos alta disponibilidad (tiene coste adicional)
- Image source, desde donde vamos a coger la imagen
- Image type, Public/Private seleccionamos la deseada.
- Image, nombre de la imagen en mi caso voy a seleccionar “nginx”.
- OS type, Linux o Windows (Dependerá de la imagen)
- Size, seleccionamos el hardware requerido.

En la pestaña de Networking podemos seleccionar Publi/Private/None, None no tendrá red estará aislado.
Private, necesitaremos seleccionar.
- Virtual network, seleccionamos una vnet o creamos una nueva.
- Subnet, lo mismo seleccionamos o creamos (no podemos usar una que contenga máquinas virtuales)
- Ports, puertos que usaremos en el container.

Public, introducimos un nombre DNS público y puerto utilizados.

En advanced, seleccionamos la política de Reinicio y agregamos variable de entorno si se requiere.

Revisamos y creamos nuestro container instance.

Una vez creamos navegamos a la página y listo.

CLI
Ahora vamos a crear un container instances mediante Azure CLI.
Abriremos una conexión bash, para ello, podremos pinchar en el icono en la parte superior del portal de azure o abrir la web directamente shell.azure.com

Abrirá la conexión al CLI, en la parte superior izquierda, seleccionamos BASH

Crear Resource Group
Si no tenemos creado el resource group, realizaremos los siguientes pasos.
Seleccionamos la subscripción si tenemos varias.
az account subscription list -o table #Listado de subscripciones
az account set --subscription "Subscripción"
Creamos el Resource Group.
az account list-locations -o table #Listado de locations
az group create --name <Mi Resource Group> --location <Location Azure>
Crear vnet y Subnet
Si necesitamos una nueva red para nuestro entorno, lo crearemos con los siguientes comandos.
az network vnet create \
--name <Nombre Vnet> \
--resource-group <Mi Resource Group> \
--subnet-name <Nombre Subnet> \
--address-prefixes 10.10.0.0/16 \
--subnet-prefixes 10.10.0.0/24
Crear Container Instance
Creamos nuestro container instance.
- resource-group, Nombre del resource Group.
- name, Nombre del container.
- image, imagen a descargar.
- dns-name-label, nombre dns publica.
- ports, puertos para el container
- vnet, Nombre de la virtual network (Requiere el parametro subnet)
- subnet, Nombre de la Subnet (Requiere el parametro vnet)
#Acceso publico
az container create --resource-group <Mi Resource Group> --name Democontainer --image nginx --dns-name-label aci-demo --ports 80
#Acceso Privado
az container create --resource-group <Mi Resource Group> --name <Nombre Container> --image nginx --ports 80 --subnet <Subnet> --vnet <virtual network>
Desplegar con YAML
Necesitaremos generar un fichero YAML con la configuración de nuestro Container Instance.
Yo voy a generar un container de Grafana y otro de Minecraft que vicio, sería algo como lo siguiente:
apiVersion: '2021-10-01'
location: francecentral
name: demo-container
properties:
containers:
- name: grafana
properties:
image: grafana/grafana-oss:latest
resources:
requests:
cpu: 1.0
memoryInGb: 1.0
ports:
- port: 3000
environmentVariables:
- name: GF_SECURITY_ADMIN_PASSWORD
value: password
- name: minecraft
properties:
image: itzg/minecraft-bedrock-server
ports:
- port: 19132
resources:
requests:
cpu: 1.0
memoryInGb: 1.0
environmentVariables:
- name: GAMEMODE
value: survival
- name: EULA
value: TRUE
- name: DIFFICULTY
value: normal
- name: SERVER_NAME
value: MordorCraft
- name: MAX_PLAYERS
value: 1
osType: Linux
ipAddress:
type: Public
ports:
- protocol: udp
port: 19132
- protocol: tcp
port: 3000
tags: null
type: Microsoft.ContainerInstance/containerGroups
Abrimos la consola y subimos el fichero YAML

Podemos listar los ficheros para confirmar.

Lanzamos la creación del container con el nombre del fichero.
az container create --resource-group <ResourceGroup> --file <File>.yml
Me genera un container instance con mi IP publica y DNS con los 2 containers.

En containers, aparecerá su estado “running”.

Accedemos al grafana http://FQDN-IP:3000

Para el Minecraft me creo un servidor externo, y accedo para una partidita.

En el log del container aparecerán las conexiones y desconexiones de mi cuenta.

Volumen Azure Files
Ahora vamos a almacenar los datos de los container en un repositorio de Azure Files.
Storage Account
Nos crearemos un storage account para almacenar la información.
Portal
Vamos al portal a marketplace y buscamos storage Account.

Ponemos nuestro datos, vamos a lo barato “performance- standard” y “Redundancy- LRS”, el resto por defecto y vamos a crear.

Vamos al Storage Account > File Shares, creamos un share de tier Hot

En Access key, cogemos la key.

CLI
Para crealo con Azure CLI, utilizamos los siguientes comandos.
# Creación storage Account
az storage account create \
--resource-group 'SPOKE-MPN-END1' \
--name 'demomordorcontainer' \
--location 'francecentral' \
--sku Standard_LRS
# Creación de File Shares
az storage share create \
--name 'containermordor' \
--account-name 'demomordorcontainer'
#Conseguir el Access Key
STORAGE_KEY=$(az storage account keys list --resource-group 'SPOKE-MPN-END1' --account-name 'demomordorcontainer' --query "[0].value" --output tsv)
echo $STORAGE_KEY
YAML
Vamos a desplegar Minecraft almacenando los datos en nuestro storage account, creo un share llamado minecraft.
Creamos nuestro container con YAML, agregaremos los parametros de volumes.
apiVersion: '2021-10-01'
location: francecentral
name: demo-container
properties:
containers:
- name: minecraft
properties:
image: itzg/minecraft-bedrock-server
ports:
- port: 19132
protocol: udp
resources:
requests:
cpu: 1.0
memoryInGb: 1.0
environmentVariables:
- name: GAMEMODE
value: survival
- name: EULA
value: TRUE
- name: DIFFICULTY
value: normal
- name: SERVER_NAME
value: MordorCraft
- name: MAX_PLAYERS
value: 1
volumeMounts:
- mountPath: /data/worlds
name: minecraftmordor
osType: Linux
ipAddress:
type: Public
ports:
- protocol: udp
port: 19132
volumes:
- name: minecraftmordor
azureFile:
sharename: minecraft
storageAccountName: demomordorcontainer
storageAccountKey: GlCpm/gUEQBiVo0hhJCWs6m8/roHs7By+/RizDY0oomL9PhcuAHYXT+gvNEJSv95Ah7AQzstNBgo+ASt3k3WUA==
tags: null
type: Microsoft.ContainerInstance/containerGroups
Si nos conectamos al container, veremos el montaje del disco.

Veremos los ficheros dentro de nuestro share.
