이미지 등록과 관리하기

이미지 등록과 관리하기

이미지를 Docker Cloud Sandboxes에 등록해 샌드박스 간에 재사용해 봐요. 등록은 이미지 레코드와 임시 업로드 대상을 만들어요. 이미지 콘텐츠는 OCI 호환 레지스트리 클라이언트로 별도로 푸시해야 해요.

출처: 문서

본문

인증된 클라이언트와 빌드된 이미지로 시작하세요. 이미 레지스트리에 이미지가 있다면 그것을 직접 실행하세요.

업로드 대상 등록

표시 이름, 시작 명령, CPU와 메모리 선호도, 멱등성 키를 선택하세요. 반환된 이미지에는 리소스 이름과 푸시 대상이 포함돼요.

대상의 레지스트리 참조와 임시 자격 증명으로 이미지를 푸시하세요. 그 자격 증명을 비밀로 유지하고 만료 전에 끝내세요. 초기 응답의 대상을 저장하세요. 이후 이미지 읽기는 교체 업로드 자격 증명을 발급하지 않아요.

이 예시는 대상을 등록해요. 이미지 콘텐츠를 빌드하거나 푸시하지는 않아요.

핵심 코드:

return client.images.create(
  { displayName: name, fromImage: { resources }, startCmd },
  { idempotencyKey: requestId },
);

완전한 TypeScript 예시: images/create.ts

import type {
  ClientImagesCreateOptions,
  Sandboxes,
} from '@docker/sandboxes';

export async function createImage(
  client: Sandboxes,
  name: string,
  startCmd: string[],
  resources: Extract<
    ClientImagesCreateOptions,
    { fromImage: unknown }
  >['fromImage']['resources'],
  requestId: string,
) {
  return client.images.create(
    { displayName: name, fromImage: { resources }, startCmd },
    { idempotencyKey: requestId },
  );
}

준비 상태 확인

푸시가 끝난 뒤 리소스 이름으로 이미지를 읽어요. COMPLETED 상태는 사용할 준비가 되었음을 뜻해요. WAITING_FOR_PUSH는 콘텐츠가 도착하지 않았음을, PREPARING은 준비가 진행 중임을, FAILED는 실패 세부 정보를 포함해요.

예시는 읽기를 한 번 수행해요. 준비가 여전히 진행 중이면 지연과 마감을 두고 읽기를 반복하세요. 생성을 반복하면 이 이미지를 진행시키는 대신 다른 이미지를 등록하게 돼요.

핵심 코드:

return client.images.get(name);

완전한 TypeScript 예시: images/ready.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function getImage(client: Sandboxes, name: string) {
  return client.images.get(name);
}

등록된 이미지 찾기

선택적 필터(예: status=completed)로 이미지를 나열해요. 예시는 모든 페이지를 따라요. 목록 항목은 요약이에요. 완전한 레코드가 필요하면 이름으로 이미지를 가져오세요.

핵심 코드:

return client.images.all({ filter }).collect();

완전한 TypeScript 예시: images/list.ts

import type { Sandboxes } from '@docker/sandboxes';

export async function listImages(client: Sandboxes, filter: string) {
  return client.images.all({ filter }).collect();
}

이미지 제거

이미지를 읽고 그 핸들을 통해 삭제해요. SDK는 이름과 버전을 제공해 읽지 않은 새 레코드를 삭제하는 것을 방지해요.

향후 샌드박스 생성이 여전히 의존하는 이미지는 보관하세요. 이미 없는 이미지를 삭제하는 것은 정리하기에 안전해요.

핵심 코드:

await image.delete();

완전한 TypeScript 예시: images/delete.ts

import type { Image } from '@docker/sandboxes';

export async function deleteImage(image: Image) {
  await image.delete();
}

더 알아보기 (Learn more)