자신만의 컨테이너 이미지 실행하기
자신만의 컨테이너 이미지 실행하기 (Run your own container image)
번들된 키트가 맞지 않을 때 컨테이너 이미지에서 자신만의 도구를 실행하는 방법을 알아볼게요.
출처: 문서
본문
번들된 키트(kit)가 작업에 맞지 않으면 컨테이너 이미지에서 자신만의 도구를 실행해요. 이미지 참조와 머신 크기를 제공하면 SDK가 그 주위에 격리된 샌드박스를 만들어요.
인증된 클라이언트와 서비스가 pull 할 수 있는 OCI 이미지가 필요해요. 재현성이 중요할 때는 버전이 있는 참조나 다이제스트(digest)를 사용하세요. 이미지는 /bin/sh를 포함해야 해요.
레지스트리 이미지에서 만들기 (Create from a registry image)
이미지 참조, CPU 수, 메모리 크기, 표시 이름, 멱등성 키(idempotency key)를 전달해요. SDK의 이미지 참조 옵션은 중첩된 요청 필드를 직접 조립하지 않게 해줘요. 관리형 이미지나 이름이 있는 에이전트는 함께 전달하지 마세요.
예시는 샌드박스가 실행될 때까지 기다려요. 대기 타임아웃은 여러분의 대기를 멈추지, 이미 받아들여진 샌드박스를 삭제하지 않아요. 오류가 보유한 샌드박스 핸들을 저장해 두면 검사하거나 정리할 수 있어요.
이미지의 시작 명령은 샌드박스 안에서 실행돼요. 경로를 가정하지 말고 WORKSPACE_DIR을 읽어 워크스페이스를 찾으세요.
다음으로 명령을 실행하거나 프로젝트 파일을 복사해 넣어요. 작업이 끝나면 샌드박스를 삭제해요.
TypeScript
const sandbox = await client.create(
{ displayName: name, imageRef, resources },
{ timeoutMs: 300_000, idempotencyKey: requestId },
);
return sandbox.waitUntilRunning();
전체 TypeScript 예시: rawimage/create.ts
import type { ClientCreateOptions, Sandboxes } from '@docker/sandboxes';
export async function createFromImageRef(
client: Sandboxes,
name: string,
imageRef: string,
resources: ClientCreateOptions['resources'],
requestId: string,
) {
const sandbox = await client.create(
{ displayName: name, imageRef, resources },
{ timeoutMs: 300_000, idempotencyKey: requestId },
);
return sandbox.waitUntilRunning();
}
더 알아보기 (Learn more)
전체 레시피 목록은 Browse all recipes 에서 확인할 수 있어요.