커스텀 이미지를 Cloud Storage로 내보내기

Compute Engine 부팅 디스크 데이터를 Compute Engine 프로젝트 외부로 이전해야 하는 경우 부팅 디스크 이미지를 tar.gz 파일로 Cloud Storage에 내보낼 수 있습니다. Compute Engine에서 새 영구 디스크를 만들 때 사용할 영구 디스크 이미지를 만들어야 하는 경우 커스텀 이미지 만들기를 참조하세요.

이미지를 Cloud Storage로 내보내는 기능을 사용하면 커스텀 이미지를 백업이나 공유 용도로 내보낼 수 있습니다. 이 방법은 개별 이미지를 이미지에 액세스할 수 없는 다른 프로젝트와 공유하는 데 적합합니다. 또는 이미지나 이미지를 포함하는 프로젝트에서 Compute Engine 이미지 사용자 역할을 부여하면 이미지를 공유할 수 있습니다.

다음 다이어그램은 커스텀 이미지 만들기와 재사용에 대한 일반적인 몇 가지 워크플로를 보여줍니다.

커스텀 이미지 만들기 및 재사용
그림 1. 커스텀 이미지 만들기 및 재사용 예시

시작하기 전에

단일 명령어로 이미지 내보내기

이미지를 Cloud Storage로 내보내는 가장 좋은 방법은 gcloud compute images export 명령어를 사용하는 것입니다. 이 명령어는 Daisy를 사용하여 이미지를 내보내는 데 필요한 여러 단계를 연결합니다. 예를 들어 gcloud compute images create 명령어를 사용하여 이미 이미지를 만들었다고 가정합니다.

gcloud 명령줄 도구를 사용하여 다음을 실행합니다.

gcloud compute images export --destination-uri [DESTINATION_URI] \
    --image [IMAGE]

각 항목의 의미는 다음과 같습니다.

  • [DESTINATION_URI]는 내보낸 가상 디스크 파일의 Cloud Storage URI 대상입니다.
  • [IMAGE]는 내보낼 디스크 이미지의 이름입니다.

예를 들어 다음 명령어는 my-image라는 이미지를 my-project에서 my-bucket이라는 Cloud Storage 버킷으로 내보냅니다. 기본적으로 이미지는 디스크 원시 파일로 내보내지고 tar.gz 파일 형식으로 압축됩니다.

gcloud compute images export --destination-uri gs://my-bucket/my-image.tar.gz \
    --image my-image --project my-project

사용할 수 있는 전체 플래그 목록은 gcloud compute images export 참조 문서를 확인하세요.

수동으로 이미지 만들기 및 내보내기

gcloud compute images create 명령어와 gcloud compute images export 명령어가 요구사항을 충족하지 못하면 Compute Engine 인스턴스에서 수동으로 이미지를 만들고 내보낼 수 있습니다. 이 프로세스에는 먼저 이미지를 만든 후 내보내는 별도의 단계가 있습니다.

다음 예시에서는 생성된 디스크를 image-disk라고 부릅니다.

이미지를 만들고 내보내려면 다음 안내를 따르세요.

  1. 원하는 경우 스냅샷을 만들기 전에 디스크가 연결된 인스턴스를 중지합니다. 인스턴스를 중지하면 스냅샷 내 디스크 내용의 무결성이 보장됩니다.

  2. 디스크의 스냅샷을 만듭니다. 스냅샷 이름을 image-snapshot으로 지정합니다.

    gcloud compute disks snapshot [DISK_NAME] --snapshot-names image-snapshot
    

    여기서 [DISK_NAME]은 스냅샷을 만드는 디스크의 이름입니다.

  3. 다음 명령어를 실행하여 image-snapshot 스냅샷으로 image-disk라는 새 디스크를 만듭니다.

    gcloud compute disks create image-disk --source-snapshot image-snapshot
    
  4. tar 파일을 저장할 temporary-disk라는 임시 디스크를 만들고 디스크의 [SIZE]를 이미지 디스크보다 최소 50% 이상 크게 지정합니다.

    나중에 디스크를 분리하고 삭제할 수 있습니다.

    gcloud compute disks create temporary-disk --size [SIZE]
    

    여기서 [SIZE]는 임시 디스크의 크기(GB 또는 TB 단위)입니다. 예를 들어 100GB를 지정하면 100GB 디스크가 생성됩니다.

  5. 인스턴스를 만들고 인스턴스에서 storage-rw 범위를 사용 설정합니다. 또한 image-disktemporary-disk를 특정 device-name 속성이 있는 보조 디스크로 인스턴스에 연결합니다.

    gcloud compute instances create [INSTANCE_NAME] --scopes storage-rw \
        --disk name=image-disk,device-name=image-disk \
        --disk name=temporary-disk,device-name=temporary-disk
    

    여기서 [INSTANCE_NAME]은 만들 인스턴스의 이름입니다.

    이후 단계에서 Cloud Storage에 파일을 업로드할 수 있도록 서비스 계정 범위를 전달합니다.

    필요한 경우 새 인스턴스 시작의 세부정보를 확인합니다.

  6. 다음 명령어를 실행하여 인스턴스에 연결합니다.

    gcloud compute ssh [INSTANCE_NAME]
    

    여기서 [INSTANCE_NAME]은 연결할 인스턴스입니다.

  7. 임시 디스크를 포맷하고 마운트합니다. 디스크를 포맷하면 임시 디스크의 콘텐츠가 삭제됩니다.

    sudo mkdir /mnt/tmp
    
    sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
    
    sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
    
  8. 원하는 경우 tar 파일을 만들기 전에 이미지 디스크를 마운트하고 추가 변경사항을 적용할 수 있습니다. 예를 들어 기존 파일을 이미지에 포함하지 않으려면 /home 디렉터리에서 삭제하면 됩니다. 수정해야 하는 디스크 파티션을 마운트하고 변경해야 하는 디스크의 파일을 수정한 후 완료되면 디스크를 마운트 해제합니다.

    1. 디스크나 파티션을 마운트할 수 있는 디렉터리를 만듭니다.

      sudo mkdir /mnt/image-disk
      
    2. ls 명령어를 사용하여 마운트해야 하는 디스크나 디스크 파티션을 결정합니다.

      ls /dev/disk/by-id/
      

      명령어는 디스크 ID와 파티션 목록을 출력합니다. 예를 들어 다음 디스크에는 파티션이 하나인 파티션 테이블이 있습니다. google-image-disk ID는 이미지를 만들려는 디스크 전체를 가리킵니다. google-image-disk-part1 ID는 이 디스크의 첫 번째 파티션을 가리킵니다. 디스크에 변경사항을 적용해야 하는 경우 파티션을 마운트한 후 전체 디스크에서 이미지를 만듭니다.

      google-image-disk
      google-image-disk-part1
      
    3. 디스크나 파티션을 마운트합니다. 디스크에 파티션 테이블이 있으면 개별 파티션을 디스크에 마운트합니다. 예를 들면 google-image-disk-part1을 마운트합니다.

      sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
      

      또는 디스크가 파티션 테이블이 없는 원시 형식이라면 전체 google-image-disk 디스크를 마운트합니다.

      sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
      
    4. /mnt/image-disk 디렉터리의 파일을 수정하여 디스크의 파일을 구성합니다. 예를 들어 SSH 키가 공유되지 않도록 /mnt/image-disk/home/[USER]/.ssh/authorized_keys 파일을 삭제할 수도 있습니다.

    5. 파일 수정이 완료되면 디스크를 마운트 해제합니다.

      sudo umount /mnt/image-disk/
      
  9. 이미지의 tar 파일을 만듭니다.

    이미지 디스크에서 파일의 맞춤설정이 끝나면 임시 디스크에서 원시 디스크 파일을 생성하세요. 원시 디스크 이미지의 이름은 'disk.raw'여야 합니다.

    sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
    

    그런 다음 이 파일을 tar와 gzip으로 변환합니다.

    cd /mnt/tmp
    
    sudo tar czvf myimage.tar.gz disk.raw
    

    이 명령어는 다음 위치에서 인스턴스의 이미지를 만듭니다.

    /mnt/tmp/myimage.tar.gz
    
  10. Cloud Storage에 이미지 업로드

    Cloud Storage에 tar 파일을 업로드하려면 인스턴스에 사전 설치된 gsutil 명령줄 도구를 사용합니다.

    1. gsutil을 사용하여 버킷을 만듭니다.

      버킷을 만들기 전에 버킷 및 이름 지정 가이드라인을 검토하세요. 검토 후 다음 명령어를 사용하여 버킷을 만듭니다.

      me@example-instance:~$ gsutil mb gs://[BUCKET_NAME]

      여기서 [BUCKET_NAME]은 생성하는 버킷의 이름입니다.

    2. 파일을 새 버킷에 복사합니다.

      me@example-instance:~$ gsutil cp /mnt/tmp/myimage.tar.gz gs://[BUCKET_NAME]

      여기서 [BUCKET_NAME]은 파일을 복사할 버킷입니다.

파일을 Cloud Storage로 내보냈습니다. 이제 이미지를 다른 사람과 공유하거나 tar 파일을 사용하여 새 이미지를 Google Cloud Platform Console 프로젝트에 추가할 수 있습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서