Dela via


Containrar i Azure Container Apps

Azure Container Apps hanterar information om Kubernetes och containerorkestrering åt dig. Du kan använda valfri körmiljö, valfritt programmeringsspråk och valfri utvecklingsstack för containrar i Azure Container Apps.

Azure Container Apps: Containrar

Azure Container Apps stöder:

  • Alla Linux-baserade x86-64-containeravbildningarlinux/amd64
  • Containrar från alla offentliga eller privata containerregister
  • Valfria sidovagns- och initcontainrar

Bland funktionerna finns även:

  • Appar använder konfigurationsavsnittet template för att definiera containeravbildningen och andra inställningar. Ändringar i konfigurationsavsnittet template utlöser en ny revision av containerappen.
  • Om en container kraschar startas den automatiskt om.

Jobbfunktionerna omfattar:

  • Jobbkörningar använder konfigurationsavsnittet template för att definiera containeravbildningen och andra inställningar när varje körning startar.
  • Om en container avslutas med en slutkod som inte är noll markeras jobbkörningen som misslyckad. Du kan konfigurera ett jobb för att försöka utföra misslyckade körningar igen.

Konfiguration

De flesta containerappar har en enda container. I avancerade scenarier kan en app också ha sidovagns- och init-containrar. I en containerappsdefinition visas huvudappen och dess sidovagnscontainrar i matrisen containers properties.template i avsnittet och init-containrar visas i matrisen initContainers . Följande utdrag visar tillgängliga konfigurationsalternativ när du konfigurerar en apps containrar.

{
  "properties": {
    "template": {
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "env": [
            {
              "name": "HTTP_PORT",
              "value": "80"
            },
            {
              "name": "SECRET_VAL",
              "secretRef": "mysecret"
            }
          ],
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/appsettings",
              "volumeName": "appsettings-volume"
            }
          ],
          "probes": [
            {
              "type": "liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "liveness probe"
                  }
                ]
              },
              "initialDelaySeconds": 7,
              "periodSeconds": 3
            },
            {
              "type": "readiness",
              "tcpSocket": {
                "port": 8081
              },
              "initialDelaySeconds": 10,
              "periodSeconds": 3
            },
            {
              "type": "startup",
              "httpGet": {
                "path": "/startup",
                "port": 8080,
                "httpHeaders": [
                  {
                    "name": "Custom-Header",
                    "value": "startup probe"
                  }
                ]
              },
              "initialDelaySeconds": 3,
              "periodSeconds": 3
            }
          ]
        }
      ]
    },
    "initContainers": [
      {
        "name": "init",
        "image": "[parameters('init_container_image')]",
        "resources": {
          "cpu": 0.25,
          "memory": "0.5Gi"
        },
        "volumeMounts": [
          {
            "mountPath": "/appsettings",
            "volumeName": "appsettings-volume"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Inställning beskrivning Kommentarer
image Containeravbildningens namn för containerappen. Det här värdet har formen repository/<IMAGE_NAME>:<TAG>.
name Eget namn på containern. Används för rapportering och identifiering.
command Containerns startkommando. Motsvarar Docker-startpunktsfältet.
args Starta kommandoargument. Poster i matrisen kopplas samman för att skapa en parameterlista som ska skickas till startkommandot.
env En matris med namn/värde-par som definierar miljövariabler. Använd secretRef i stället för fältet value för att referera till en hemlighet.
resources.cpu Antalet processorer som allokerats till containern. Se krav för vCPU och minnesallokering
resources.memory Mängden RAM-minne som har allokerats till containern. Se krav för vCPU och minnesallokering
volumeMounts En matris med volymmonteringsdefinitioner. Du kan definiera en tillfällig eller permanent lagringsvolym för din container. Mer information om lagringsvolymer finns i Använda lagringsmonteringar i Azure Container Apps.
probes En matris med hälsoavsökningar aktiverade i containern. Mer information om avsökningsinställningar finns i Hälsoavsökningar i Azure Container Apps.

krav för vCPU- och minnesallokering

När du använder förbrukningsplanen måste det totala antalet processorer och minne som allokerats till alla containrar i en containerapp lägga till upp till någon av följande kombinationer.

vCPU:er (kärnor) Minne
0.25 0.5Gi
0.5 1.0Gi
0.75 1.5Gi
1.0 2.0Gi
1.25 2.5Gi
1.5 3.0Gi
1.75 3.5Gi
2.0 4.0Gi
2.25 4.5Gi
2.5 5.0Gi
2.75 5.5Gi
3.0 6.0Gi
3.25 6.5Gi
3.5 7.0Gi
3.75 7.5Gi
4.0 8.0Gi

Kommentar

Appar som använder förbrukningsplanen i en miljö med endast förbrukning är begränsade till högst 2 kärnor och 4Gi minne.

Flera containrar

I avancerade scenarier kan du köra flera containrar i en enda containerapp. Använd endast det här mönstret i specifika fall där containrarna är tätt kopplade.

För de flesta mikrotjänstscenarier är bästa praxis att distribuera varje tjänst som en separat containerapp.

Flera containrar i samma containerapp delar hårddisk- och nätverksresurser och upplever samma programlivscykel.

Det finns två sätt att köra ytterligare containrar i en containerapp: sidovagnscontainrar och init-containrar.

Sidovagnscontainrar

Du kan definiera flera containrar i en enda containerapp för att implementera sidovagnsmönstret.

Exempel på sidovagnscontainrar är:

  • En agent som läser loggar från den primära appcontainern på en delad volym och vidarebefordrar dem till en loggningstjänst.

  • En bakgrundsprocess som uppdaterar en cache som används av den primära appcontainern på en delad volym.

Dessa scenarier är exempel och representerar inte de enda sätten du kan implementera en sidovagn på.

Om du vill köra flera containrar i en containerapp lägger du till fler än en container i containers containerappmallens matris.

Init-containrar

Du kan definiera en eller flera init-containrar i en containerapp. Init-containrar körs före den primära appcontainern och används för att utföra initieringsuppgifter som att ladda ned data eller förbereda miljön.

Init-containrar definieras i matrisen initContainers för containerappmallen. Containrarna körs i den ordning de definieras i matrisen och måste slutföras innan den primära appcontainern startar.

Kommentar

Init-containrar i appar som använder den dedikerade planen eller som körs i en miljö med endast förbrukning kan inte komma åt hanterad identitet vid körning.

Containerregister

Du kan distribuera avbildningar som finns i privata register genom att ange autentiseringsuppgifter i Container Apps-konfigurationen.

Om du vill använda ett containerregister definierar du registret i matrisen registries properties.configuration i avsnittet i resursmallen för containerappen. Fältet passwordSecretRef identifierar namnet på hemligheten i matrisnamnet secrets där du definierade lösenordet.

{
  ...
  "registries": [{
    "server": "docker.io",
    "username": "my-registry-user-name",
    "passwordSecretRef": "my-password-secret-name"
  }]
}

Sparade autentiseringsuppgifter används för att hämta en containeravbildning från det privata registret när appen distribueras.

I följande exempel visas hur du konfigurerar autentiseringsuppgifter för Azure Container Registry i en containerapp.

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "docker-hub-password",
        "value": "my-docker-hub-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "docker.io",
        "username": "someuser",
        "passwordSecretRef": "docker-hub-password"
      }
    ]
  }
}

Kommentar

Docker Hub begränsar antalet Nedladdningar av Docker-avbildningar. När gränsen har nåtts startar inte containrar i din app. Använd ett register med tillräckliga gränser, till exempel Azure Container Registry för att undvika det här problemet.

Hanterad identitet med Azure Container Registry

Du kan använda en hanterad Azure-identitet för att autentisera med Azure Container Registry i stället för att använda ett användarnamn och lösenord. Mer information finns i Hanterade identiteter i Azure Container Apps.

Om du vill använda hanterad identitet med ett register måste identiteten vara aktiverad i appen och den måste vara tilldelad acrPull roll i registret. Om du vill konfigurera registret använder du resurs-ID:t för hanterad identitet för en användartilldelad identitet eller system för den systemtilldelade identiteten identity i registrets egenskap. Konfigurera inte ett användarnamn och lösenord när du använder hanterad identitet.

{
    "identity": {
        "type": "SystemAssigned,UserAssigned",
        "userAssignedIdentities": {
            "<IDENTITY1_RESOURCE_ID>": {}
        }
    }
    "properties": {
        "configuration": {
            "registries": [
            {
                "server": "myacr1.azurecr.io",
                "identity": "<IDENTITY1_RESOURCE_ID>"
            },
            {
                "server": "myacr2.azurecr.io",
                "identity": "system"
            }]
        }
        ...
    }
}

Mer information om hur du konfigurerar användartilldelade identiteter finns i Lägga till en användartilldelad identitet.

Begränsningar

Azure Container Apps har följande begränsningar:

  • Privilegierade containrar: Azure Container Apps tillåter inte privilegierat containerläge med åtkomst på värdnivå.

  • Operativsystem: Linux-baserade (linux/amd64) containeravbildningar krävs.

  • Maximal bildstorlek:

    • Förbrukningsarbetsbelastningsprofilen stöder containeravbildningar på totalt upp till 8 GB för varje app eller jobbreplik.
    • Dedikerade arbetsbelastningsprofiler stöder större containeravbildningar. Eftersom en dedikerad arbetsbelastningsprofil kan köra flera appar eller jobb delar flera containeravbildningar det tillgängliga diskutrymmet. Den faktiska bildstorleken som stöds varierar beroende på resurser som används av andra appar och jobb.

Nästa steg