컨테이너 디바이스 인터페이스

컨테이너 디바이스 인터페이스 (Container Device Interface, CDI)

CDI(Container Device Interface)는 GPU, FPGA 같은 하드웨어 가속 장치를 컨테이너에 어떻게 노출하고 사용하는지를 표준화하기 위한 스펙이에요. 디바이스별 설정의 어려움을 해결해 컨테이너 환경에서 하드웨어 장치를 더 일관되고 안전하게 사용할 수 있게 하는 게 목표예요.

출처: 문서

본문

CDI는 컨테이너가 디바이스 노드와 상호작용하게 해 줄 뿐 아니라, 환경 변수나 호스트 마운트(공유 객체 등), 실행 훅 같은 디바이스의 추가 구성도 지정할 수 있게 해 줘요.

시작하기 (Getting started)

CDI를 사용하려면 호환 가능한 환경이 갖춰져 있어야 해요. 여기에는 CDI가 구성된 Docker v27+와 Buildx v0.22+가 설치되어 있어야 해요.

또한 다음 위치 중 한 곳에 JSON 또는 YAML 파일로 디바이스 스펙을 만들어야 해요:

  • (시스템 전역 / 사용자별 CDI 디바이스 스펙 위치)

드라이버에 대한 자세한 내용과 CDI 디바이스 구성 방법은 Configure CDI devices 문서를 참고해요.

WSL에서 컨테이너 빌더를 만든다면 Docker Desktop이 설치되고 WSL 2 GPU Paravirtualization이 활성화되어 있어야 해요. WSL 라이브러리를 컨테이너에 마운트하려면 Buildx v0.27+도 필요해요.

간단한 CDI 스펙으로 빌드하기 (Building with a simple CDI specification)

간단한 CDI 스펙 예시예요:

cdiVersion: "0.6.0"
kind: "vendor1.com/device"
devices:
- name: foo
  containerEdits:
    env:
    - FOO=injected

빌더가 이 장치를 디바이스로 인식하는지 확인할 수 있어요:

$ docker buildx inspect
Name:   default
Driver: docker

Nodes:
Name:             defaul...

이렇게 하면 BuildKit 빌드에서 해당 CDI 장치를 사용해 GPU 등 하드웨어 장치가 필요한 빌드 단계를 실행할 수 있어요.

더 알아보기 (Learn more)