IoT Edge 모듈의 컨테이너 만들기 옵션을 구성하는 방법

적용 대상:IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4는 지원되는 릴리스입니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

배포 매니페스트의 createOptions 매개 변수를 사용하면 런타임에 모듈 컨테이너를 구성할 수 있습니다. 이 매개 변수는 모듈에 대한 제어를 확장하고 호스트 디바이스의 리소스에 대한 모듈의 액세스를 허용하거나 제한하거나 네트워킹을 구성하는 등의 작업을 허용합니다.

IoT Edge 모듈은 IoT Edge 디바이스에서 Docker 호환 컨테이너로 구현됩니다. Docker는 컨테이너를 만들기 위한 많은 옵션을 제공하며, 이러한 옵션은 IoT Edge 모듈에도 적용됩니다. 자세한 내용은 Docker 컨테이너 만들기 옵션을 참조 하세요.

만들기 옵션 형식 지정

IoT Edge 배포 매니페스트는 JSON 형식의 만들기 옵션을 허용합니다. 예를 들어, 모든 edgeHub 모듈에 대해 자동으로 포함되는 만들기 옵션을 사용합니다.

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

이 edgeHub 예제에서는 HostConfig.PortBindings 매개 변수를 사용하여 컨테이너의 노출된 포트를 호스트 디바이스의 포트에 매핑합니다.

Visual Studio 또는 Visual Studio Code용 Azure IoT Edge 확장을 사용하는 경우 deployment.template.json 파일에서 JSON 형식으로 만들기 옵션을 작성할 수 있습니다. 그런 다음, 확장을 사용하여 IoT Edge 솔루션을 빌드하거나 배포 매니페스트를 생성하는 경우 확장은 IoT Edge 런타임에 필요한 형식으로 JSON을 문자열 변환합니다. 예시:

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

Important

Azure IoT Edge Visual Studio Code 확장은 기본 테넌트 모드입니다. iotedgedev 도구는 IoT Edge 모듈을 개발하는 데 권장되는 도구입니다.

만들기 옵션을 작성하는 한 가지 팁은 명령을 사용하는 것입니다 docker inspect . 개발 프로세스 docker run <container name>의 일부로 . 모듈이 원하는 방식으로 작동하면 docker inspect <container name>을 실행합니다. 이 명령은 모듈 세부 정보를 JSON 형식으로 출력합니다. 구성한 매개 변수를 찾고 JSON을 복사합니다. 예시:

Screenshot of the results of the command docker inspect edgeHub.

일반적인 시나리오

컨테이너 만들기 옵션을 사용하면 많은 시나리오가 가능하지만 IoT Edge 솔루션을 빌드할 때 가장 자주 발생하는 몇 가지 시나리오는 다음과 같습니다.

모듈 포트에 호스트 포트 매핑

모듈이 IoT Edge 솔루션 외부의 서비스와 통신해야 하고 메시지 라우팅을 사용하지 않는 경우 호스트 포트를 모듈 포트에 매핑해야 합니다.

이 포트 매핑은 동일한 디바이스에서 모듈 간 통신에 필요하지 않습니다. 모듈 A가 모듈 B에서 호스트되는 API를 쿼리해야 하는 경우 포트 매핑 없이 쿼리할 수 있습니다. 모듈 B는 dockerfile에서 포트를 공개해야 합니다(예: EXPOSE 8080). 그런 다음, 모듈 A는 모듈 B의 이름을 사용하여 API를 쿼리할 수 있습니다(예: http://ModuleB:8080/api).

먼저 모듈 내 포트가 연결을 수신 대기하도록 공개되는지 확인합니다. dockerfile에서 EXPOSE 명령을 사용하여 이 작업을 수행할 수 있습니다. 예들 들어 EXPOSE 8080입니다. 노출 명령은 지정하지 않으면 기본적으로 TCP 프로토콜로 설정되거나 UDP를 지정할 수 있습니다.

그런 다음 Docker 컨테이너 만들기 옵션의 HostConfig 그룹에서 PortBindings 설정을 사용하여 모듈의 노출된 포트를 호스트 디바이스의 포트에 매핑합니다. 예를 들어 모듈 내에 포트 8080을 노출하고 호스트 디바이스의 포트 80에 매핑하려는 경우 template.json 파일의 만들기 옵션은 다음 예제와 같습니다.

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

배포 매니페스트에 대해 문자열화되면 동일한 구성은 다음 예제와 같습니다.

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

모듈 메모리 및 CPU 사용량 제한

모듈이 사용할 수 있는 호스트 리소스의 양을 선언할 수 있습니다. 이 컨트롤은 한 모듈이 너무 많은 메모리 또는 CPU 사용량을 소비할 수 없도록 하고 다른 프로세스가 디바이스에서 실행되는 것을 방지하는 데 유용합니다. 다음을 포함하여 HostConfig 그룹에서 Docker 컨테이너 만들기 옵션을 사용하여 이 설정을 관리할 수 있습니다.

  • 메모리: 메모리 제한(바이트)입니다. 예를 들어, 268435456바이트 = 256MB입니다.
  • MemorySwap: 총 메모리 제한(메모리 + 스왑). 예를 들어, 536870912바이트는 512MB입니다.
  • NanoCpus: 10-9(10억 번째) CPU 단위의 CPU 할당량. 예를 들어, 250000000nanocpus는 0.25CPU입니다.

template.json 형식에서 이러한 값은 다음 예제와 같습니다.

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

최종 배포 매니페스트에 대해 문자열화되면 이러한 값은 다음 예제와 같습니다.

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

IoT Edge 모듈 GPU 최적화

GPU 최적화 가상 머신에서 IoT Edge 모듈을 실행하는 경우 IoT Edge 모듈을 사용하도록 설정하여 GPU에도 연결할 수 있습니다. 기존 모듈을 사용하여 이 작업을 수행하려면 createOptions에 일부 사양을 추가합니다.

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

이러한 설정이 성공적으로 추가되었는지 확인하려면, Docker 검사 명령을 사용하여 JSON 인쇄물에서 새 설정을 살펴봅니다.

sudo docker inspect <YOUR-MODULE-NAME>

디바이스와 가상 머신에서 GPU에 연결하는 방법을 자세히 알아보려면 GPU에 대한 IoT Edge 모듈 구성, 연결 및 확인을 참조하세요.

다음 단계

작업 중인 옵션 만들기의 더 많은 예제는 다음 IoT Edge 샘플을 참조하세요.