Dela via


Så här konfigurerar du alternativ för att skapa containrar för IoT Edge-moduler

Gäller för:Bockmarkering för IoT Edge 1.5 IoT Edge 1.5

Viktigt!

IoT Edge 1.5 LTS är den version som stöds. IoT Edge 1.4 LTS upphör från och med den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Med parametern createOptions i distributionsmanifestet kan du konfigurera modulcontainrarna vid körning. Den här parametern utökar kontrollen över modulerna och gör att du kan utföra uppgifter som att begränsa modulens åtkomst till värdenhetens resurser eller konfigurera nätverk.

IoT Edge-moduler körs som Docker-kompatibla containrar på din IoT Edge-enhet. Docker erbjuder många alternativ för att skapa containrar, och dessa alternativ gäller även för IoT Edge-moduler. Mer information finns i Skapa alternativ för Docker-container.

Alternativ för att skapa format

IoT Edge-distributionsmanifestet accepterar alternativ för att skapa formaterade som JSON. Ta till exempel de skapa-alternativ som automatiskt ingår för varje edgeHub-modul:

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "5671/tcp": [
        {
          "HostPort": "5671"
        }
      ],
      "8883/tcp": [
        {
          "HostPort": "8883"
        }
      ],
      "443/tcp": [
        {
          "HostPort": "443"
        }
      ]
    }
  }
}

Det här edgeHub-exemplet använder parametern HostConfig.PortBindings för att mappa exponerade portar på containern till en port på värdenheten.

Om du använder Azure IoT Edge-tillägget för Visual Studio eller Visual Studio Code skriver du skapa-alternativen i JSON-format i deployment.template.json-filen . När du sedan använder tillägget för att skapa IoT Edge-lösningen eller generera distributionsmanifestet, stränger det JSON i det format som IoT Edge-körningen förväntar sig. Till exempel:

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"

Viktigt!

Azure IoT Edge Visual Studio Code-tillägget är i underhållsläge. Verktyget iotedgedev är det rekommenderade verktyget för att utveckla IoT Edge-moduler.

docker inspect Använd kommandot för att skriva skapa alternativ. Kör modulen lokalt med hjälp docker run <container name> av som en del av din utvecklingsprocess. När du har fått modulen att fungera som du vill ha den kör docker inspect <container name>du . Det här kommandot matar ut modulinformationen i JSON-format. Leta upp de parametrar som du har konfigurerat och kopiera JSON. Till exempel:

Skärmbild av resultatet av kommandot

Vanliga scenarier

Alternativ för att skapa containrar stöder olika scenarier. Här är de vanligaste lösningarna för att skapa IoT Edge-lösningar:

Mappa värdporten till modulporten

Om modulen behöver kommunicera med en tjänst utanför IoT Edge-lösningen och inte använder meddelandedirigering för att göra det, måste du mappa en värdport till en modulport.

Dricks

Portmappning krävs inte för modul-till-modul-kommunikation på samma enhet. Om modul A behöver fråga ett API som finns i modul B kan det göra det utan någon portmappning. Modul B måste exponera en port i dess dockerfile. Exempel: EXPOSE 8080 Sedan kan modul A fråga API:et med hjälp av modul B:s namn. Exempel: http://ModuleB:8080/api

Kontrollera först att en port i modulen exponeras för att lyssna efter anslutningar. Du kan göra detta med hjälp av en EXPOSE-instruktion i dockerfile. Exempel: EXPOSE 8080 Instruktionen exponerar som standard TCP-protokollet om det inte anges, eller så kan du ange UDP.

Använd sedan inställningen PortBindings i gruppen HostConfig i Docker-containern för att skapa alternativ för att mappa den exponerade porten i modulen till en port på värdenheten. Om du till exempel exponerade port 8080 i modulen och vill mappa den till port 80 på värdenheten, skulle skapandealternativen i template.json-filen se ut som i följande exempel:

"createOptions": {
  "HostConfig": {
    "PortBindings": {
      "8080/tcp": [
        {
          "HostPort": "80"
        }
      ]
    }
  }
}

När konfigurationen är strängifierad för distributionsmanifestet ser den ut så här:

"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"

Begränsa modulminne och CPU-användning

Deklarera hur mycket av värdresurserna som en modul kan använda. Den här kontrollen säkerställer att en modul inte förbrukar för mycket minne eller PROCESSOR, vilket hindrar andra processer från att köras på enheten. Du kan hantera de här inställningarna med alternativ för att skapa Docker-container i gruppen HostConfig , inklusive:

  • Minne: Minnesgräns i byte. Till exempel 268435456 byte = 256 MB.
  • MemorySwap: Total minnesgräns (minne + växling). Till exempel 536870912 byte = 512 MB.
  • NanoCpus: CPU-kvot i enheter på 10–9 (1 miljarddels) processorer. Till exempel 2500000000 nanocpus = 0,25 CPU.

I template.json format skulle dessa värden se ut som i följande exempel:

"createOptions": {
  "HostConfig": {
    "Memory": 268435456,
    "MemorySwap": 536870912,
    "NanoCpus": 250000000
  }
}

När de har stringifierats för det slutliga distributionsmanifestet ser dessa värden ut som i följande exempel:

"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"

GPU-optimera en IoT Edge-modul

Om du kör IoT Edge-modulen på en GPU-optimerad virtuell dator kan du även aktivera en IoT Edge-modul för att ansluta till din GPU. Om du vill göra detta med en befintlig modul lägger du till några specifikationer i :createOptions

{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}

Bekräfta de här inställningarna med kommandot Docker inspect för att visa den nya inställningen i en JSON-utskrift.

sudo docker inspect <YOUR-MODULE-NAME>

Mer information om hur din enhet och virtuella dator ansluter till en GPU finns i Konfigurera, ansluta och verifiera en IoT Edge-modul för en GPU.

Nästa steg

Fler exempel på hur du skapar alternativ i praktiken finns i dessa IoT Edge-exempel: