클라우드 샌드박스 클론하기
클라우드 샌드박스 클론하기
기존 샌드박스에서 선택한 설정을 사용해 다른 샌드박스를 만들어 봐요. 이 예시는 이미지 소스와 환경을 복사하지, 샌드박스의 파일이나 실행 중인 프로세스는 복사하지 않아요. 저장된 파일시스템이나 메모리 상태를 원한다면 스냅샷을 사용하세요.
출처: 문서
본문
인증된 클라이언트, 소스 샌드박스의 리소스 이름, 새 샌드박스의 표시 이름이 필요해요.
소스 구성 읽기
소스 샌드박스를 얻고 그 이미지와 환경을 검사해요. 복사하기 전에 환경 값을 검토하세요. 원래 작업에 특정한 자격 증명이나 설정이 포함될 수 있어요.
전체 응답을 생성 요청으로 취급하지 마세요. 읽기 전용 상태와 연결 세부 정보를 포함해요.
핵심 코드:
const sandbox = await client.get(name);
return sandbox.core;
완전한 TypeScript 예시: clone/inspect.ts
import type { Sandboxes } from '@docker/sandboxes';
export async function inspectSandbox(client: Sandboxes, name: string) {
const sandbox = await client.get(name);
return sandbox.core;
}
새 샌드박스 만들기
예시는 이미지 소스와 환경을 복사해요. 레지스트리 이미지라면 리소스 설정도 복사해요. 새 샌드박스가 실행될 때까지 기다려요.
호출은 명령 실행이나 파일 전송에 준비된 새 샌드박스의 핸들을 반환해요.
이것은 제한된 구성 복사이지 완전한 클론이 아니에요. 키트, 첨부된 정책, 시크릿, 볼륨, 파일, 프로세스 상태는 복사하지 않아요. 복사된 이미지 하나로는 키트의 설정을 재현하지 못할 수 있어요. 반복되는 에이전트 환경에는 애플리케이션이 저장한 옵션으로 같은 이름의 키트를 실행하세요.
새 샌드박스에서 작업을 실행하기 전에 필요한 네트워크 정책과 자격 증명을 첨부하세요. 소스는 변경되지 않으며, 두 샌드박스 모두 자체 정리가 필요해요.
핵심 코드:
const copy = await client.create(
{
displayName: name,
...(core.image
? { image: core.image, agent: core.agent }
: {
imageRef: core.imageRef!,
resources: core.resources,
}),
environment: core.environment,
},
{ timeoutMs: 300_000, idempotencyKey: requestId },
);
return copy.waitUntilRunning();
완전한 TypeScript 예시: clone/rebuild.ts
import type { Sandbox, Sandboxes } from '@docker/sandboxes';
export async function rebuildSandbox(
client: Sandboxes,
core: Sandbox['core'],
name: string,
requestId: string,
) {
if (!core.image && !core.imageRef)
throw new TypeError('Source has no image');
const copy = await client.create(
{
displayName: name,
...(core.image
? { image: core.image, agent: core.agent }
: {
imageRef: core.imageRef!,
resources: core.resources,
}),
environment: core.environment,
},
{ timeoutMs: 300_000, idempotencyKey: requestId },
);
return copy.waitUntilRunning();
}