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

이 페이지에서는 커스텀 이미지를 Google Cloud Storage로 내보내는 방법을 설명합니다.

인스턴스에서 이미지를 만들어야 한다면 커스텀 이미지 만들기 문서를 읽어보세요.

이미지를 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 creategcloud 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]은 생성할 인스턴스의 이름입니다.

    이후 단계에서 Google 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. 이미지를 Google Cloud Storage에 업로드합니다.

    tar 파일을 Google Cloud Storage에 업로드하려면 인스턴스에 사전 설치된 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]은 파일을 복사할 버킷입니다.

파일을 Google Cloud Storage로 내보내는 작업이 완료되었습니다. 이제 이미지를 다른 사람과 공유하거나 tar 파일을 이용해 새 이미지를 Google Cloud Platform 콘솔 프로젝트에 추가할 수 있습니다.

다음 단계

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

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

Compute Engine 문서