다음을 통해 공유


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

적용 대상:IoT Edge 1.5 확인 표시 IoT Edge 1.5

중요합니다

IoT Edge 1.5 LTS는 지원되는 릴리스입니다. IoT Edge 1.4 LTS는 2024년 11월 12일부터 수명이 종료됩니다. 이전 릴리스에 있는 경우 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\"}]}}}"

중요합니다

Azure IoT Edge Visual Studio Code 확장은 유지 관리 모드에 있습니다. iotedgedev 도구는 IoT Edge 모듈 개발에 권장되는 도구입니다.

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

'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. 지정되지 않은 경우 Expose 명령이 기본적으로 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 샘플을 참조하세요.