Montare un volume gitRepo in Istanze di Azure Container

Informazioni su come montare un volume gitRepo per clonare un repository Git in Istanze di Container.

Nota

Il montaggio di un volume gitRepo è attualmente limitato ai contenitori di Linux. Mentre stiamo lavorando per portare tutte le funzionalità ai contenitori di Windows, è possibile trovare le differenze correnti della piattaforma nella panoramica.

Volume gitRepo

Il volume gitRepo monta una directory e clona il repository Git specificato al suo interno all'avvio del contenitore. Usando un volume gitRepo in Istanze di Container, è possibile evitare di aggiungere il codice per eseguire questa operazione nelle applicazioni.

Quando si monta un volume gitRepo, è possibile impostare tre proprietà per configurare il volume:

Proprietà Obbligatoria Descrizione
repository URL completo, incluso http:// o https://, del repository Git da clonare.
directory No Directory in cui clonare il repository. Il percorso non deve contenere né iniziare con "..". Se si specifica ".", il repository viene clonato nella directory del volume. In caso contrario il repository Git viene clonato in una sottodirectory del nome dato all'interno della directory del volume.
revision No Hash commit della revisione da clonare. Se non specificato, la revisione HEAD viene clonata.

Montare un volume gitRepo: interfaccia della riga di comando di Azure

Per montare un volume gitRepo quando si distribuiscono le istanze di contenitore con l'interfaccia della riga di comando di Azure, fornire i parametri --gitrepo-url e --gitrepo-mount-path al comando az container create. Facoltativamente, è possibile specificare la directory del volume in cui eseguire la clonazione (--gitrepo-dir) e l'hash commit della revisione da clonare (--gitrepo-revision).

Questo comando di esempio clona l'applicazione /mnt/aci-helloworld di esempio Microsoft aci-helloworld nell'istanza del contenitore:

az container create \
    --resource-group myResourceGroup \
    --name hellogitrepo \
    --image mcr.microsoft.com/azuredocs/aci-helloworld \
    --dns-name-label aci-demo \
    --ports 80 \
    --gitrepo-url https://github.com/Azure-Samples/aci-helloworld \
    --gitrepo-mount-path /mnt/aci-helloworld

Per verificare che il volume gitRepo sia stato montato, avviare una shell nel contenitore con az container exec ed elencare la directory:

az container exec --resource-group myResourceGroup --name hellogitrepo --exec-command /bin/sh
/usr/src/app # ls -l /mnt/aci-helloworld/
total 16
-rw-r--r--    1 root     root           144 Apr 16 16:35 Dockerfile
-rw-r--r--    1 root     root          1162 Apr 16 16:35 LICENSE
-rw-r--r--    1 root     root          1237 Apr 16 16:35 README.md
drwxr-xr-x    2 root     root          4096 Apr 16 16:35 app

Montare un volume gitRepo: Resource Manager

Per montare un volume gitRepo quando si distribuiscono le istanze di contenitore con un modello di Azure Resource Manager, popolare la matrice volumes nella sezione properties del gruppo di contenitore del modello. Successivamente, per ogni contenitore del gruppo di contenitori in cui si desidera montare il volume gitRepo, popolare la matrice volumeMounts nella sezione properties della definizione del contenitore.

Ad esempio, il modello di Resource Manager seguente crea un gruppo di contenitori costituito da un solo contenitore. Il contenitore clona due repository GitHub specificati dai blocchi del volume gitRepo. Il secondo volume include proprietà aggiuntive che specificano una directory in cui eseguire la clonazione e l'hash commit di una revisione specifica da clonare.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "container1name": "aci-tutorial-app",
    "container1image": "mcr.microsoft.com/azuredocs/aci-helloworld"
  },
  "resources": [
    {
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2021-03-01",
      "name": "volume-demo-gitrepo",
      "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"
            }
          }
        ]
      }
    }
  ]
}

La struttura della directory risultante dei due repository clonati definiti nel modello precedente è:

/mnt/repo1/aci-helloworld
/mnt/repo2/my-custom-clone-directory

Per un esempio di distribuzione di Istanze di Container con un modello di Azure Resource Manager, vedere Deploy multi-container groups in Azure Container Instances (Distribuire gruppi multicontenitore in Istanze di Container Azure).

Autenticazione del repository privato

Per montare un volume gitRepo per un repository Git privato, specificare le credenziali nell'URL del repository. In genere, le credenziali sono sotto forma di un nome utente e un token di accesso personale (PAT) che concede l'accesso con ambito al repository.

Ad esempio, il parametro dell'interfaccia della riga di comando di Azure --gitrepo-url per un repository di GitHub privato sarà simile al seguente (dove "gituser" è il nome utente di GitHub e "abcdef1234fdsa4321abcdef" è il token di accesso personale dell'utente):

--gitrepo-url https://gituser:abcdef1234fdsa4321abcdef@github.com/GitUser/some-private-repository

Per un repository Git di Azure Repos, specificare il nome utente (come nell'esempio seguente, è possibile usare "azurereposuser") in combinazione con un token di accesso personale valido:

--gitrepo-url https://azurereposuser:abcdef1234fdsa4321abcdef@dev.azure.com/your-org/_git/some-private-repository

Per altre informazioni sui token di accesso personale per GitHub e Azure Repos, vedere gli argomenti seguenti:

GitHub: Creazione di un token di accesso personale per la riga di comando

Azure Repos: Create personal access tokens to authenticate access (Creare token di accesso personale per autenticare l'accesso)

Passaggi successivi

Informazioni su come montare altri tipi di volume in Istanze di Azure Container: