소스 디스크, 이미지, 스냅샷 또는 Cloud Storage에 저장된 이미지에서 커스텀 이미지를 만들고 이 이미지를 사용하여 가상 머신(VM) 인스턴스를 만들 수 있습니다. 커스텀 이미지는 영구 부팅 디스크 또는 구체적인 이미지를 만들어 특정 상태로 수정하고 VM을 만들기 위해 이 상태를 저장해야 하는 상황에 적합합니다.
또는 가상 디스크 가져오기 도구를 사용하여 부팅 디스크 이미지를 기존 시스템에서 Compute Engine으로 가져와 커스텀 이미지 목록에 추가할 수 있습니다.
시작하기 전에
- 이 가이드의 명령줄 예시를 사용하려면 다음을 수행하세요.
- 최신 버전의 Google Cloud CLI를 설치하거나 업데이트합니다.
- 기본 리전 및 영역을 설정합니다.
- 이 가이드의 API 예시를 사용하려면 API 액세스를 설정합니다.
- 이미지 문서를 읽습니다.
커스텀 이미지 만들기
이 섹션에서는 Linux VM에서 커스텀 이미지를 만드는 방법을 설명합니다. Windows 이미지를 만드는 방법에 대한 상세 설명은 Windows 이미지 만들기를 참조하세요.
이미지 저장 위치 선택
커스텀 이미지를 만들 때 이중 리전 위치를 제외하고 이미지의 Cloud Storage 위치를 지정할 수 있습니다. 이미지 스토리지 위치를 지정하면 데이터 위치에 대한 규제 및 규정 준수 요구사항뿐 아니라 여러 리전 간에 데이터 중복성을 보장함으로써 고가용성 요건을 충족할 수 있습니다. Cloud Storage에 저장된 이미지를 생성, 수정, 삭제하려면 roles/compute.storageAdmin
이 있어야 합니다.
스토리지 위치 기능은 선택사항입니다. 위치를 선택하지 않으면 Compute Engine은 이미지 소스와 가장 가까운 멀티 리전에 이미지를 저장합니다. 예를 들어 us-central1
에 있는 소스 디스크에서 이미지를 만들 때 커스텀 이미지의 위치를 지정하지 않으면 Compute Engine은 us
멀티 리전에 이미지는 저장합니다.
VM을 만드는 리전에서 이미지를 사용할 수 없는 경우 Compute Engine은 VM을 처음 만들 때 해당 리전에 이미지를 캐시합니다.
이미지가 저장된 위치를 확인하려면 gcloud compute
에서 images describe
명령어를 사용하세요.
gcloud compute images describe IMAGE_NAME \ --project=PROJECT_ID
다음을 바꿉니다.
IMAGE_NAME: 이미지의 이름입니다.
PROJECT_ID: 이미지가 속한 프로젝트 ID입니다.
이 기능이 출시되기 이전의 모든 기존 이미지는 현재 위치에 그대로 남아 있으며, 변경 사항은 다른 모든 이미지의 이미지 위치를 볼 수 있다는 점뿐입니다. 기존 이미지를 옮기려면 원하는 위치에서 이 이미지를 다시 만들어야 합니다.
이미지를 위한 VM 준비
실행 중인 VM에 연결되어 있는 경우에도 디스크에서 이미지를 만들 수 있습니다. 그러나 이미지의 안정성을 높이려면 이미지를 쉽게 캡처할 수 있는 상태로 VM을 전환해야 합니다. 이 섹션에서는 이미지의 부팅 디스크를 준비하는 방법을 설명합니다.
영구 디스크에 데이터 쓰기 최소화
디스크 쓰기를 줄이려면 다음 프로세스 중 하나를 사용합니다.
인스턴스가 영구 디스크에 데이터를 쓰지 않고 종료될 수 있도록 VM을 중지합니다.
이미지를 만들기 전에 VM을 중지할 수 없는 경우 디스크에 쓰는 양을 최소화하고 파일 시스템을 동기화합니다. 영구 디스크에 쓰기를 최소화하려면 다음 단계를 따르세요.
- 영구 디스크에 데이터를 쓰는 앱 또는 운영체제 프로세스를 일시중지합니다.
- 필요한 경우 디스크에 앱 플러시를 실행합니다. 예를 들어 MySQL에는
FLUSH
문이 있습니다. 다른 앱에도 비슷한 프로세스가 있을 수 있습니다. - 앱에서 영구 디스크에 쓰지 못하도록 합니다.
sudo sync
를 실행합니다.
디스크의 자동 삭제 옵션 중지
기본적으로 자동 삭제 옵션은 부팅 디스크에 사용 설정되어 있습니다. 디스크에서 이미지를 만들기 전에 자동 삭제를 중지하여 VM이 삭제될 때 디스크가 자동으로 삭제되지 않도록 합니다.
Google Cloud Console, Google Cloud CLI 또는 Compute Engine API를 사용하여 디스크의 자동 삭제를 중지할 수 있습니다.
Console
Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
이미지를 만들 수 있는 소스로 사용하고 있는 VM을 클릭합니다. VM 인스턴스 세부정보 페이지가 표시됩니다.
수정을 클릭합니다.
부팅 디스크 섹션의 삭제 규칙에서 디스크 유지 옵션이 선택되어 있는지 확인합니다.
저장을 클릭합니다.
gcloud
Google Cloud CLI에서 gcloud compute instances set-disk-auto-delete
명령어를 사용하여 디스크의 자동 삭제 옵션을 중지합니다.
gcloud compute instances set-disk-auto-delete VM_NAME \ --no-auto-delete \ --disk=SOURCE_DISK
다음을 바꿉니다.
VM_NAME
: VM 인스턴스의 이름입니다.SOURCE_DISK
: 이미지를 만들 디스크의 이름입니다.
API
디스크의 자동 삭제 옵션을 설정하려면 instances.setDiskAutoDelete
메서드에 대한 POST
요청을 실행합니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setDiskAutoDelete?autoDelete=false&deviceName=SOURCE_DISK
다음을 바꿉니다.
PROJECT_ID
: 소스 VM이 속한 프로젝트 ID입니다.ZONE
: 소스 VM이 있는 영역입니다.VM_NAME
: 소스 VM 이름입니다.SOURCE_DISK
: 이미지를 만들 디스크의 기기 이름입니다.
VM을 준비한 후 이미지를 만듭니다.
이미지 만들기
다음 소스에서 디스크 이미지를 만들 수 있습니다.
- 영구 디스크(디스크가 VM에 연결된 경우에도 가능)
- 영구 디스크의 스냅샷
- 프로젝트의 다른 이미지
- 다른 프로젝트에서 공유된 이미지
- Cloud Storage의 압축 RAW 이미지
10분마다 한 번씩 디스크 이미지를 만들 수 있습니다. 디스크 이미지 만들기 요청 버스트를 실행하려면 60분 동안 최대 6개의 요청을 실행할 수 있습니다. 자세한 내용은 스냅샷 빈도 제한을 참조하세요.
Console
Google Cloud 콘솔에서 이미지 만들기 페이지로 이동합니다.
이미지의 이름을 지정합니다.
이미지를 만들 소스를 지정합니다. 소스는 영구 디스크, 스냅샷, 다른 이미지, Cloud Storage의 disk.raw 파일일 수 있습니다.
실행 중인 VM에 연결된 디스크에서 이미지를 만드는 경우 인스턴스 계속 실행을 선택하여 VM이 실행되는 동안 이미지를 만들 것임을 확인합니다. 이미지를 만들기 전에 VM을 준비할 수 있습니다.
소스 디스크 위치 기준(기본값) 드롭다운 목록에서 이미지를 저장할 위치를 지정합니다. 예를 들어
us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.선택사항: 이미지 속성을 지정합니다.
암호화 키를 지정합니다. Google 관리 키, Cloud Key Management Service(Cloud KMS) 키 또는 고객 제공 암호화(CSEK) 키 중 한 가지를 선택할 수 있습니다. 암호화 키가 지정되지 않은 경우 이미지는 Google 관리 키를 사용하여 암호화됩니다.
만들기를 클릭하여 이미지를 만듭니다.
gcloud
Google Cloud CLI에서 gcloud compute images create
명령어를 사용하여 커스텀 이미지를 만듭니다.
소스 디스크에서 이미지 만들기:
--force
플래그는 실행 중인 인스턴스에서 이미지를 만들 수 있는 선택적 플래그입니다. 기본적으로는 실행 중인 인스턴스에서 이미지를 만들 수 없습니다. 인스턴스가 실행되는 동안 이미지를 만들려고 하는 경우에만 이 플래그를 지정하세요.
gcloud compute images create IMAGE_NAME \ --source-disk=SOURCE_DISK \ --source-disk-zone=ZONE \ [--family=IMAGE_FAMILY] \ [--storage-location=LOCATION] \ [--force]
다음을 바꿉니다.
IMAGE_NAME
: 새 이미지의 이름입니다.SOURCE_DISK
: 이미지를 만들 소스 디스크입니다.ZONE
: 디스크가 있는 영역입니다.IMAGE_FAMILY
: (선택 사항) 이 이미지가 속한 이미지 계열을 지정하는 플래그입니다.LOCATION
: (선택 사항) 이미지가 저장되는 리전 또는 멀티 리전을 지정할 수 있는 플래그입니다. 예를 들어us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
소스 이미지에서 이미지 만들기:
gcloud compute images create IMAGE_NAME \ --source-image=SOURCE_IMAGE \ [--source-image-project=IMAGE_PROJECT] \ [--family=IMAGE_FAMILY] \ [--storage-location=LOCATION]
다음을 바꿉니다.
IMAGE_NAME
: 새 이미지의 이름입니다.SOURCE_IMAGE
: 새 이미지를 만들 소스 이미지입니다.IMAGE_PROJECT
: (선택 사항) 소스 이미지가 있는 프로젝트입니다. 다른 프로젝트에서 이미지를 복사하려는 경우 이 매개변수를 사용합니다.IMAGE_FAMILY
: (선택 사항) 새 이미지가 속할 이미지 계열LOCATION
: (선택 사항) 이미지가 저장되는 리전 또는 멀티 리전을 지정할 수 있습니다. 예를 들어us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
스냅샷에서 이미지 만들기:
gcloud compute images create IMAGE_NAME \ --source-snapshot=SOURCE_SNAPSHOT \ [--storage-location=LOCATION]
다음을 바꿉니다.
IMAGE_NAME
: 새 이미지의 이름입니다.SOURCE_SNAPSHOT
: 이미지를 만들 스냅샷입니다.LOCATION
: (선택 사항) 이미지가 저장되는 리전 또는 멀티 리전을 지정할 수 있는 플래그입니다. 예를 들어us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
이미지 위치 보기:
gcloud compute images describe
명령어를 사용하여 이미지 위치를 봅니다.
gcloud compute images describe IMAGE_NAME
IMAGE_NAME
을 검토할 이미지의 이름으로 바꿉니다.
API
images().insert
메서드에 대해 POST
요청을 실행합니다. 이때 요청 본문의 URL은 이미지를 만들 소스 객체를 가리킵니다. 자체 프로젝트 ID와 리소스 이름을 사용하여 리소스에 URL을 지정합니다.
영구 디스크에서 이미지 만들기:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceDisk": "/zones/ZONE/disks/SOURCE_DISK", ("storageLocations": "LOCATION",) ("forceCreate": "TRUE") }
다음을 바꿉니다.
PROJECT_ID
: 이미지가 속한 프로젝트 ID입니다.IMAGE_NAME
: 만들려는 새 이미지의 이름입니다.ZONE
: 소스 디스크가 있는 영역입니다.SOURCE_DISK
: 이미지를 만들 소스 디스크입니다.LOCATION
: (선택 사항) 이미지의 스토리지 위치입니다. 예를 들어us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
선택사항인 forceCreate
매개변수를 사용하면 실행 중인 VM에서 이미지를 만들 수 있습니다. 실행 중인 VM에서 이미지를 만들려고 하는 경우에만 TRUE
로 지정하세요. forceCreate
기본 설정은 FALSE
입니다.
다른 이미지에서 이미지 만들기:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceImage": "/global/images/SOURCE_IMAGE", ("storageLocations": "LOCATION") }
다음을 바꿉니다.
PROJECT_ID
: 이미지가 속한 프로젝트입니다.IMAGE_NAME
: 만들려는 새 이미지의 이름입니다.SOURCE_IMAGE
: 이미지를 만들려는 소스 이미지입니다.LOCATION
: (선택 사항) 이미지의 스토리지 위치입니다. 예를 들어us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
스냅샷에서 이미지 만들기:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceSnapshot": "(/SOURCE_PROJECT_ID)/global/snapshots/SOURCE_SNAPSHOT", ("storageLocations": "LOCATION") }
다음을 바꿉니다.
PROJECT_ID
: 이미지가 속한 프로젝트입니다.IMAGE_NAME
: 만들려는 새 이미지의 이름입니다.SOURCE_PROJECT_ID
: (선택 사항) 스냅샷이 있는 프로젝트입니다. 해당 프로젝트의 스냅샷 리소스에 액세스할 수 있는 권한이 있어야 합니다.SOURCE_SNAPSHOT
: 이미지를 만들 소스 스냅샷입니다.LOCATION
: (선택 사항) 이미지의 스토리지 위치입니다. 예를 들어us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
이미지 추가에 대한 상세 설명은 이미지 참조를 확인하세요.
이미지 공유
커스텀 이미지를 만든 후에는 프로젝트 간에 공유할 수 있습니다. 다른 프로젝트의 사용자가 커스텀 이미지를 사용하도록 허용하면 해당 사용자는 요청에 이미지 프로젝트를 지정하여 이러한 이미지에 액세스할 수 있습니다.
커스텀 이미지에서 게스트 운영체제 기능 사용 설정
게스트 운영체제(OS) 기능을 사용하여 커스텀 이미지에서 다음 네트워킹, 보안, 스토리지, OS 옵션을 구성합니다. 이렇게 기능이 구성된 커스텀 이미지는 부팅 디스크로 사용됩니다.
gcloud
기존 커스텀 이미지에서 새 커스텀 이미지를 만들려면 --guest-os-features
플래그와 함께 gcloud compute images
create
명령어를 사용하세요.
gcloud compute images create IMAGE_NAME \ --source-image=SOURCE_IMAGE \ [--source-image-project=IMAGE_PROJECT] \ --guest-os-features="FEATURES,..." \ [--storage-location=LOCATION]
다음을 바꿉니다.
IMAGE_NAME
: 새 이미지의 이름입니다.SOURCE_IMAGE
: 새 이미지의 기반이 되는 이미지입니다.IMAGE_PROJECT
: (선택사항) 소스 이미지가 포함된 프로젝트입니다.다른 프로젝트에서 이미지를 복사하려면 이 매개변수를 사용합니다.
FEATURES
: 이미지에서 만든 VM에 기능을 사용 설정하는 게스트 OS 태그입니다.여러 값을 추가하려면 쉼표를 사용하여 값을 구분하세요. 다음 중 하나 이상의 값으로 설정합니다.
VIRTIO_SCSI_MULTIQUEUE
. NVMe 대신 로컬 SSD 기기에 사용할 수 있습니다. SCSI를 지원하는 이미지에 대한 상세 설명은 인터페이스 선택을 참조하세요.커널 버전이 3.17 이상인 Linux 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다. Compute Engine Windows 드라이버 버전이 1.2인 Windows 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다.
WINDOWS
. Windows Server 커스텀 부팅 이미지를 Windows 이미지로 태그 지정합니다.MULTI_IP_SUBNET
./32
이외의 넷마스크를 사용하여 인터페이스를 구성합니다. 다중 네트워크 인터페이스와 그 작동 방식에 대한 상세 설명은 다중 네트워크 인터페이스 개요 및 예시를 참조하세요.UEFI_COMPATIBLE
. UEFI 펌웨어 및 다음 보안 VM 기능으로 부팅합니다.- 보안 부팅: 기본적으로 사용 중지됩니다.
- Virtual Trusted Platform Module(vTPM): 기본적으로 사용 설정됩니다.
- 무결성 모니터링: 기본적으로 사용 설정됩니다.
GVNIC
. 최대 50Gbps~100Gbps 속도의 더 높은 네트워크 대역폭을 지원합니다. 자세한 내용은 Google Virtual NIC 사용을 참조하세요.SEV_CAPABLE
. AMD SEV(Secure Encrypted Virtualization) CPU 플랫폼에서 컨피덴셜 VM을 만드는 경우에 사용합니다. 자세한 내용은 새 컨피덴셜 VM 인스턴스 만들기를 참조하세요.SUSPEND_RESUME_COMPATIBLE
. VM에서 일시중지 및 재개를 지원합니다. 자세한 내용은 OS 호환성을 참조하세요.
LOCATION
: (선택 사항) 이미지를 저장할 리전 또는 멀티 리전입니다.예를 들어
us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.
API
기존 커스텀 이미지에서 새 커스텀 이미지를 만들려면 guestOsFeatures
플래그와 함께 images().insert
메서드를 사용하세요.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name": "IMAGE_NAME", "sourceImage": "(projects/IMAGE_PROJECT)/global/images/SOURCE_IMAGE", ("storageLocations": "LOCATION",) "guestOsFeatures": [ { "type": "FEATURES" } ] }
다음을 바꿉니다.
PROJECT_ID
: 새 이미지를 만들 프로젝트의 ID입니다.IMAGE_NAME
: 새 이미지의 이름입니다.IMAGE_PROJECT
: (선택사항) 소스 이미지가 포함된 프로젝트입니다.다른 프로젝트에서 이미지를 복사하려면 이 매개변수를 사용합니다.
SOURCE_IMAGE
: 새 이미지의 기반이 되는 이미지입니다.LOCATION
: (선택 사항) 이미지를 저장할 리전 또는 멀티 리전입니다.예를 들어
us
를 지정하여us
멀티 리전에 이미지를 저장하거나us-central1
을 지정하여us-central1
리전에 저장합니다. 선택하지 않으면 Compute Engine은 이미지의 소스 위치와 가장 가까운 멀티 리전에 이미지를 저장합니다.FEATURES
: 이미지에서 만든 VM에 기능을 사용 설정하는 게스트 OS 태그입니다.여러 값을 추가하려면 쉼표를 사용하여 값을 구분하세요. 다음 중 하나 이상의 값으로 설정합니다.
VIRTIO_SCSI_MULTIQUEUE
. NVMe 대신 로컬 SSD 기기에 사용할 수 있습니다. SCSI를 지원하는 이미지에 대한 상세 설명은 인터페이스 선택을 참조하세요.커널 버전이 3.17 이상인 Linux 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다. Compute Engine Windows 드라이버 버전이 1.2인 Windows 이미지에서는 로컬 SSD 기기에서 멀티 큐 SCSI를 사용 설정할 수 있습니다.
WINDOWS
. Windows Server 커스텀 부팅 이미지를 Windows 이미지로 태그 지정합니다.MULTI_IP_SUBNET
./32
이외의 넷마스크를 사용하여 인터페이스를 구성합니다. 다중 네트워크 인터페이스와 그 작동 방식에 대한 상세 설명은 다중 네트워크 인터페이스 개요 및 예시를 참조하세요.UEFI_COMPATIBLE
. UEFI 펌웨어 및 다음 보안 VM 기능으로 부팅합니다.- 보안 부팅: 기본적으로 사용 중지됩니다.
- Virtual Trusted Platform Module(vTPM): 기본적으로 사용 설정됩니다.
- 무결성 모니터링: 기본적으로 사용 설정됩니다.
GVNIC
. 최대 50Gbps~100Gbps 속도의 더 높은 네트워크 대역폭을 지원합니다. 자세한 내용은 Google Virtual NIC 사용을 참조하세요.SEV_CAPABLE
. AMD SEV(Secure Encrypted Virtualization) CPU 플랫폼에서 컨피덴셜 VM을 만드는 경우에 사용합니다. 자세한 내용은 새 컨피덴셜 VM 인스턴스 만들기를 참조하세요.SUSPEND_RESUME_COMPATIBLE
. VM에서 일시중지 및 재개를 지원합니다. 자세한 내용은 OS 호환성을 참조하세요.
Arm 이미지 고려 사항
Google은 Ampere Altra CPU 플랫폼에서 실행되는 Tau T2A 머신 시리즈를 제공합니다. T2A 머신 시리즈로 VM을 시작한 다음 해당 소스 VM을 사용하여 Arm 이미지를 만들 수 있습니다. 커스텀 Arm 이미지를 만드는 프로세스는 x86 이미지를 만드는 프로세스와 동일합니다.
사용자가 Arm 이미지와 x86 이미지를 구별할 수 있도록 Arm 이미지에는 ARM64
로 설정된 architecture
필드가 있습니다. 이 필드에 가능한 값은 다음과 같습니다.
ARCHITECTURE_UNSPECIFIED
X86_64
ARM64
이미지 사용자는 이 필드를 필터링하여 x86 또는 Arm 기반 이미지를 찾을 수 있습니다.
다음 단계
- 다른 프로젝트와 비공개 이미지 공유
- 디스크, 이미지, VM 인스턴스 가져오는 방법 알아보기
- 이미지를 Cloud Storage로 내보내는 방법 알아보기
- 커스텀 이미지에서 VM 시작 방법 알아보기
- Jenkins 및 Packer를 사용하여 커스텀 기본 이미지를 빌드하는 방법 알아보기
- 이미지 계열에서 이미지 버전 설정 방법 알아보기
- 커스텀 이미지 지원 중단 방법 알아보기
- 커스텀 이미지 삭제 방법 알아보기