VM 및 MIG에 컨테이너 배포

Docker 컨테이너를 배포하고 시작하도록 가상 머신(VM) 인스턴스나 인스턴스 템플릿을 구성할 수 있습니다. Compute Engine은 Docker가 설치된 최신 Container-Optimized OS(COS) 이미지를 제공하며 VM이 시작될 때 컨테이너를 시작합니다.

시작하기 전에

VM 및 MIG에 컨테이너 배포

Compute Engine에 컨테이너를 배포함으로써 앱 배포를 간소화함과 동시에 VM 인프라를 제어할 수 있습니다.

  • Compute Engine 인프라를 구성하고 관리할 때 컨테이너를 실행하는 VM을 다른 VM을 다루는 것과 동일한 방식으로 관리하세요.
  • 자동 확장, 자동 복구, 순차적 업데이트, 멀티 영역 배포, 부하 분산과 같은 기능을 제공하고 컨테이너를 실행하는 관리형 인스턴스 그룹(MIG)을 사용하여 확장 가능한 서비스를 만드세요.
  • 컨테이너가 있는 VM을 관리할 때 gcloud 명령줄 도구나 Compute Engine API와 같이 익숙한 프로세스 및 도구를 사용하세요.

또는 다음을 위해 Google Kubernetes Engine에 배포하는 것을 고려할 수 있습니다.

  • 다수의 마이크로서비스 실행
  • 컨테이너 시작 소요 시간 단축
  • 자동 업그레이드, 노드 자동 복구, 자동 확장 등 Kubernetes 자동 조정 기능의 이점 활용

Compute Engine에 있는 별도의 가상 머신(VM)에서 각 마이크로서비스를 실행할 경우, 운영체제 간접비가 비용의 상당 부분을 차지할 수 있습니다. Google Kubernetes Engine을 사용하면 각 VM 인스턴스에 여러 컨테이너 및 컨테이너 그룹을 배포할 수 있으므로, 호스트 VM 리소스를 마이크로서비스에 더 효율적으로 할당하고 사용 공간을 줄일 수 있습니다.

Compute Engine에 컨테이너가 배포되는 방식

Compute Engine VM 인스턴스에 소프트웨어를 배포하는 일반적인 방법은 다음과 같습니다.

  • 시작 스크립트 또는 cloud-init를 사용하여 VM 부팅 시 소프트웨어를 배포합니다.
  • 소프트웨어를 미리 설치하여 커스텀 부팅 디스크 이미지 만들기

위의 두 가지 방법 모두 앱 구성 작업과 운영체제 환경 설정 작업을 결합합니다. 개발자는 런타임 종속 항목을 주의 깊게 추적하고 해결해야 합니다. 예를 들어 VM에서 실행 중인 앱 두 개가 동일하지만 서로 다른 버전의 라이브러리를 사용하는 경우 두 버전을 모두 설치하고 시스템 변수를 통해 이러한 앱을 가리켜야 합니다.

동일한 라이브러리의 다른 버전에서 실행되는 앱
앱이 운영체제에 직접 배포된 VM 인스턴스

또는 컨테이너의 소프트웨어를 VM 인스턴스나 MIG에 배포할 수 있습니다. 컨테이너에는 애플리케이션 소프트웨어와 필수 라이브러리가 모두 있으며 컨테이너는 OS 앱 및 라이브러리와 분리되어 있습니다. 컨테이너와 그 OS에서 충돌하는 라이브러리 버전을 처리하지 않고 컨테이너를 배포 환경 간에 쉽게 이동할 수 있습니다.

컨테이너의 앱
앱이 한 컨테이너에 배포된 VM 인스턴스

다음 과정에서는 Compute Engine에 컨테이너를 배포하는 방법을 설명합니다.

  1. 앱과 필수 라이브러리를 Docker 이미지로 묶고 이미지를 Container Registry에 게시하거나 Docker Hub나 다른 레지스트리에 공개적으로 게시합니다.
  2. VM 인스턴스 또는 MIG의 인스턴스 템플릿을 만들 때 Docker 이미지 이름과 docker run 구성을 지정합니다.

VM 인스턴스 만들기를 요청하면 Compute Engine에서 다음 태스크를 실행합니다.

  1. Compute Engine은 Google에서 제공하는 Container-Optimized OS 이미지를 사용하는 VM 인스턴스를 만듭니다. 이 이미지에는 Docker 런타임과 컨테이너 시작을 담당하는 추가 소프트웨어가 포함되어 있습니다.
  2. Compute Engine이 컨테이너 설정을 gce-container-declaration 메타데이터 키의 인스턴스 메타데이터 설정에 저장합니다.
  3. VM이 시작되면 Container-Optimized OS 이미지는 인스턴스의 메타데이터에 저장된 docker run 명령어 구성을 사용하여 저장소에서 컨테이너 이미지를 가져오고 컨테이너를 시작합니다.
컨테이너 이미지 및 Docker 실행 명령어 사용
컨테이너를 실행하는 VM 인스턴스 또는 관리형 인스턴스 그룹을 만드는 단계

제한사항

  • 각 VM 인스턴스에 컨테이너 1개만 배포할 수 있습니다. VM 인스턴스당 여러 컨테이너를 배포해야 하는 경우 Google Kubernetes Engine을 사용하는 것이 좋습니다.
  • 공개 저장소 또는 액세스 권한이 있는 비공개 Container Registry 저장소의 컨테이너만 배포할 수 있습니다. 다른 비공개 저장소는 지원되지 않습니다.
  • VM 인스턴스 포트를 컨테이너 포트(Docker의 -p 옵션)에 매핑할 수 없습니다.
  • 이 배포 방법을 이용할 경우 Container-Optimized OS 이미지만 사용할 수 있습니다.
  • API가 아닌 Google Cloud Console 또는 gcloud 명령줄 도구를 통해서만 이 기능을 사용할 수 있습니다.

배포할 컨테이너 준비

다음 접근 방식 중 하나를 선택하여 Compute Engine에서 컨테이너 이미지에 액세스 할 수 있도록 합니다.

  • Docker 이미지를 Container Registry에 업로드합니다.
  • Docker Hub 등의 레지스트리에서 공개적으로 제공하는 컨테이너 이미지를 사용합니다.

새 VM 인스턴스에 컨테이너 배포

Google Cloud Console 또는 gcloud 명령줄 도구를 사용하여 새 VM 인스턴스에 컨테이너를 배포할 수 있습니다.

Console

다음은 Google에서 제공하는 Nginx Docker 이미지(https://gcr.io/cloud-marketplace/google/nginx1:latest)에서 VM 인스턴스로 컨테이너를 배포하는 예시입니다. 다른 Docker 이미지를 사용하려면 아래 예에서 원하는 이미지를 대신 지정하세요.

  1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기를 클릭하여 인스턴스를 만듭니다.

  3. 컨테이너에서 컨테이너 이미지 배포를 선택합니다.

  4. 컨테이너 이미지에서 컨테이너 이미지 이름을 지정하고 원하는 경우 컨테이너 실행 옵션을 구성합니다. 예를 들어 컨테이너 이미지로 gcr.io/cloud-marketplace/google/nginx1:latest를 지정할 수 있습니다.

  5. 만들기를 클릭합니다.

gcloud

gcloud compute instances create-with-container 명령어를 사용합니다.

gcloud compute instances create-with-container VM_NAME \
    --container-image DOCKER_IMAGE

예를 들어 다음 명령어는 Docker 이미지 gcr.io/cloud-marketplace/google/nginx1:latest를 시작 및 실행하는 nginx-vm이라는 새 VM 인스턴스를 만듭니다.

gcloud compute instances create-with-container nginx-vm \
    --container-image gcr.io/cloud-marketplace/google/nginx1:latest

gcloud compute instances create-with-container 명령어에 대해 자세히 알아보세요.

Docker Hub의 공개 이미지를 사용할 때는 항상 완전한 Docker 이미지 이름을 지정해야 합니다. 예를 들어, Apache 컨테이너 이미지를 배포하려면 이미지 이름을 다음과 같이 지정합니다.

docker.io/httpd:2.4

VM 인스턴스의 컨테이너 업데이트

Google Cloud Console 또는 gcloud 명령줄 도구를 사용하여 VM 인스턴스에서 컨테이너를 실행하도록 Docker 이미지 및 구성 옵션을 업데이트할 수 있습니다.

컨테이너를 실행하는 VM을 업데이트하면 Compute Engine이 다음 두 가지 작업을 수행합니다.

  • 인스턴스의 컨테이너 선언을 업데이트합니다. Compute Engine은 업데이트된 컨테이너 선언을 인스턴스 메타데이터gce-container-declaration 메타데이터 키에 저장합니다.
  • 인스턴스가 실행 중인 경우 인스턴스를 중지했다가 다시 시작하여 업데이트된 구성을 활성화합니다. 인스턴스가 중지된 상태인 경우 컨테이너 선언을 업데이트하고 인스턴스를 중지된 상태로 유지합니다. VM 인스턴스는 새 이미지를 다운로드하고 VM 시작 시 컨테이너를 시작합니다.

Console

  1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 업데이트할 인스턴스의 이름을 클릭합니다.

  3. 인스턴스 세부정보 페이지에서 수정을 클릭합니다.

  4. 새 컨테이너 이미지를 지정하고 필요에 따라 컨테이너 실행 옵션을 업데이트합니다.

  5. 저장 및 다시 시작을 클릭하여 변경사항을 저장합니다. Compute Engine은 변경 사항을 저장하고 인스턴스를 자동으로 다시 시작하여 업데이트합니다. VM이 다시 시작되면 새 이미지를 다운로드하고 업데이트된 구성으로 컨테이너를 시작합니다.

gcloud

gcloud compute instances update-container 명령어를 사용하여 컨테이너 선언을 업데이트합니다. 예를 들면 다음과 같습니다.

gcloud compute instances update-container nginx-vm \
    --container-image gcr.io/cloud-marketplace/google/nginx1:latest

이 명령어는 컨테이너 이미지를 gcr.io/cloud-marketplace/google/nginx1:latest로 설정하고 인스턴스를 다시 시작하여 변경사항을 활성화합니다. 해당 플래그를 추가하여 컨테이너 실행 옵션 구성에 설명된 속성을 업데이트할 수도 있습니다.

인스턴스가 다시 시작되면 새 컨테이너 이미지를 다운로드하고 새 구성으로 컨테이너를 시작합니다.

관리형 인스턴스 그룹에 컨테이너 배포

다음 단계를 수행하면 Google Cloud Console 또는 gcloud 명령줄 도구를 사용하여 새 관리형 인스턴스 그룹(MIG)에 컨테이너를 배포할 수 있습니다.

  1. Docker 이미지를 기반으로 인스턴스 템플릿을 만듭니다.

  2. 새 인스턴스 템플릿에서 MIG를 만듭니다.

Console

다음은 컨테이너를 Google에서 제공하는 Nginx(gcr.io/cloud-marketplace/google/nginx1:15) Docker 이미지에서 MIG로 배포하는 인스턴스 템플릿을 만드는 예시입니다. 다른 Docker 이미지를 사용하려면 다음 예시에서 gcr.io/cloud-marketplace/google/nginx1:15 대신 원하는 이미지를 지정합니다.

  1. Google Cloud Console에서 인스턴스 템플릿 페이지로 이동합니다.

    인스턴스 템플릿 페이지로 이동

  2. 인스턴스 템플릿을 만들려면 인스턴스 템플릿 만들기를 클릭합니다.

  3. 컨테이너에서 컨테이너 이미지 배포를 선택합니다.

  4. 컨테이너 이미지에서 Docker 이미지 이름을 지정하고 원하는 경우 컨테이너 실행 옵션을 구성합니다. 예를 들어 컨테이너 이미지로 gcr.io/cloud-marketplace/google/nginx1:15를 지정할 수 있습니다.

  5. 만들기를 클릭합니다.

다음으로 새 인스턴스 템플릿을 사용하는 MIG를 만듭니다.

gcloud

gcloud compute instance-templates create-with-container 명령어를 사용하여 Docker 이미지 실행을 위한 인스턴스 템플릿을 만듭니다.

gcloud compute instance-templates create-with-container TEMPLATE_NAME \
  --container-image DOCKER_IMAGE

원하는 경우 컨테이너 실행 옵션을 구성해도 됩니다.

예를 들어 다음 명령어를 실행하면 Docker 이미지 정보가 포함된 nginx-template이라는 새 인스턴스 템플릿이 생성됩니다. 이 템플릿으로 생성된 VM 인스턴스는 VM이 시작될 때 Docker 이미지 gcr.io/cloud-marketplace/google/nginx1:15를 시작 및 실행합니다.

gcloud compute instance-templates create-with-container nginx-template \
    --container-image gcr.io/cloud-marketplace/google/nginx1:15

다음으로 새 인스턴스 템플릿을 사용하여 MIG를 만듭니다.

이제 인스턴스 템플릿이 있으므로 인스턴스 템플릿을 사용하는 MIG를 만들 수 있습니다. 예를 들어 gcloud 도구와 방금 만든 nginx-template을 사용하여 MIG를 만들려면 다음 명령어를 실행합니다.

gcloud compute instance-groups managed create example-group \
    --base-instance-name nginx-vm \
    --size 3 \
    --template nginx-template

컨테이너를 실행하는 관리형 인스턴스 그룹 업데이트

관리형 인스턴스 그룹(MIG)을 업데이트하여 Docker 이미지의 새 버전이나 Container-Optimized OS 이미지의 새 버전을 배포할 수 있습니다.

MIG를 컨테이너 이미지의 새 버전으로 업데이트

관리형 인스턴스 그룹 업데이터를 사용하여 3단계에 걸쳐 Docker 이미지의 새 버전을 MIG에 배포할 수 있습니다.

  1. 배포할 새 Docker 이미지를 준비합니다.
  2. 컨테이너 기반 템플릿을 만드는 것과 같은 방식으로 새로운 Docker 이미지를 기반으로 인스턴스 템플릿을 만듭니다.
  3. 관리형 인스턴스 그룹 업데이터를 사용하여 MIG를 새 인스턴스 템플릿으로 업데이트합니다.

관리형 인스턴스 그룹을 Container-Optimized OS 이미지의 새 버전으로 업데이트

Google은 Container-Optimized OS 이미지를 정기적으로 업데이트하므로 Docker 이미지를 변경하지 않고 컨테이너식 MIG에 업데이트를 적용할 수 있습니다. Google Cloud Console 또는 gcloud 명령줄 도구를 사용하여 2단계에 걸쳐 MIG를 Container-Optimized OS 이미지의 새 버전으로 업데이트할 수 있습니다.

  1. 새 MIG의 컨테이너 기반 템플릿을 만드는 방법과 동일한 방법으로 현재 버전의 Docker 이미지를 기반으로 인스턴스 템플릿을 만듭니다. 기본적으로 Container-Optimized OS 이미지의 최신 지원 버전이 사용됩니다.
  2. 관리형 인스턴스 그룹 업데이터를 사용하여 새 인스턴스 템플릿으로 MIG를 업데이트합니다.

SSH를 사용하여 컨테이너에 연결

SSH를 사용하여 VM의 컨테이너에 연결할 수 있습니다. 다음과 같이 gcloud 도구를 사용하여 --container 플래그와 함께 gcloud compute ssh를 실행합니다.

gcloud compute ssh VM_NAME --container CONTAINER_NAME

다음을 바꿉니다.

  • VM_NAME: VM 인스턴스의 이름
  • CONTAINER_NAME: 컨테이너의 이름

gcloud compute ssh 명령어 및 해당 인수에 대해 자세히 알아보세요.

로그 보기

다음과 같이 세 가지 유형의 컨테이너 관련 로그를 볼 수 있습니다.

  1. konlet{ class="external" target="github" } 로그라고도 하는 시작 에이전트 로그입니다. 시작 에이전트는 컨테이너 구성을 파싱한 후 Compute Engine VM 인스턴스에서 컨테이너를 시작하는 태스크를 실행합니다.

  2. Docker 이벤트 로그. Docker 이벤트 로그는 컨테이너 시작/중지 이벤트를 포함한 컨테이너 이벤트를 보고하며, COS 69 이상을 사용하는 경우 제공됩니다.

  3. 컨테이너의 로그. 이 로그에는 컨테이너에서 실행되는 앱의 STDOUT가 포함됩니다.

시작 에이전트 로그 보기

시작 에이전트 로그는 직렬 콘솔, OS 이미지에 포함된 journald 시스템 서비스, Cloud Logging을 통해 제공됩니다.

직렬 콘솔에서 시작 에이전트 로그 보기

Console

  1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.

  3. 로그에서 직렬 포트 1(콘솔)을 클릭하여 직렬 콘솔 로그를 봅니다.

    직렬 포트 1 로깅

gcloud

get-serial-port-output 명령어를 사용하여 인스턴스 직렬 포트의 로그를 확인합니다.

gcloud compute instances get-serial-port-output VM_NAME

VM_NAME을 VM 인스턴스의 이름으로 바꿉니다.

예를 들어 nginx-vm이라는 VM 인스턴스의 직렬 포트 출력을 보려면 다음 명령어를 사용합니다.

gcloud compute instances get-serial-port-output nginx-vm

시작 에이전트 로그를 journald에서 보기

  1. SSH를 사용하여 컨테이너가 있는 인스턴스에 연결합니다.
  2. sudo journalctl 명령어를 실행하여 VM 시작 로그와 컨테이너 시작 로그를 확인합니다. 다음 명령어를 사용하여 컨테이너 시작 에이전트 로그(konlet)를 필터링합니다.

    sudo journalctl -u konlet*
    

시작 에이전트 로그를 Logging에서 보기

Console

  1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.

  3. 로그에서 Cloud Logging을 클릭하여 Cloud Logging 로그를 봅니다.

    직렬 포트 1 로깅

  4. 검색 필터를 입력하여 시작 에이전트 로그를 검색합니다.

    COS 68 이하를 사용하는 경우에는 다음 필터를 사용하세요.

    resource.type="global"
    logName="projects/PROJECT_ID/logs/gcplogs-docker-driver"
    jsonPayload.container.imageName:"gcr.io/gce-containers/konlet"
    jsonPayload.instance.name="VM_NAME"
    

    COS 69 이상을 사용하는 경우에는 다음 필터를 사용합니다.

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cos_system"
    jsonPayload.SYSLOG_IDENTIFIER="konlet-startup"
    jsonPayload._HOSTNAME="VM_NAME"
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID
    • VM_NAME: 로그를 가져올 인스턴스의 이름

gcloud

gcloud logging read 명령어와 적절한 필터를 함께 사용하여 컨테이너 시작 에이전트 로그를 봅니다.

COS 68 이하를 사용하는 경우에는 다음 명령어와 필터를 사용하세요.

gcloud logging read "resource.type=global AND \
    logName=projects/PROJECT_ID/logs/gcplogs-docker-driver AND \
    jsonPayload.instance.name=VM_NAME"

COS 69 이상을 사용하는 경우에는 다음 명령어와 필터를 사용하세요.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/PROJECT_ID/logs/cos_system AND \
    jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \
    jsonPayload._HOSTNAME=VM_NAME"

다음을 바꿉니다.

  • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID
  • VM_NAME: 로그를 가져올 인스턴스의 이름

예를 들어 다음 명령어를 사용하여 COS 70을 실행하면서 my-project에 있는 nginx-vm이라는 VM 인스턴스의 마지막 시작 에이전트 로그 10개를 Logging에서 확인합니다.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/my-project/logs/cos_system AND \
    jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \
    jsonPayload._HOSTNAME=nginx-vm" \
    --limit 10

Docker 이벤트 로그 보기

COS 69 이상을 사용하는 경우 Docker 이벤트 로그를 journald와 Cloud Logging에서 확인할 수 있습니다.

journald에서 Docker 이벤트 로그 보기

  1. SSH를 사용하여 컨테이너가 있는 인스턴스에 연결합니다.
  2. sudo journalctl 명령어를 다음 필터와 함께 실행하여 Docker 이벤트 로그를 확인합니다.

    sudo journalctl -u docker-events-collector
    

Docker 이벤트 로그를 Logging에서 보기

Console

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.

  3. 로그에서 Cloud Logging을 클릭하여 Cloud Logging 로그를 봅니다.

    직렬 포트 1 로깅

  4. 다음 검색 필터를 입력하여 Docker 이벤트 로그를 검색합니다.

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cos_system"
    jsonPayload._HOSTNAME="VM_NAME"
    jsonPayload.SYSLOG_IDENTIFIER="docker"
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID
    • VM_NAME: 로그를 가져올 인스턴스의 이름

gcloud

gcloud logging read 명령어와 적절한 필터와 함께 사용하여 Docker 이벤트 로그를 봅니다.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/PROJECT_ID/logs/cos_system AND \
    jsonPayload._HOSTNAME=VM_NAME AND \
    jsonPayload.SYSLOG_IDENTIFIER=docker"

다음을 바꿉니다.

  • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID
  • VM_NAME: 로그를 가져올 인스턴스의 이름

예를 들어 다음 명령어를 사용하여 COS 70을 실행하면서 my-project에 있는 nginx-vm이라는 VM 인스턴스의 마지막 Docker 이벤트 로그 10개를 Logging에서 확인합니다.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/my-project/logs/cos_system AND \
    jsonPayload._HOSTNAME=nginx-vm AND \
    jsonPayload.SYSLOG_IDENTIFIER=docker" \
    --limit 10

컨테이너 로그 보기

Console

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.

  3. 로그에서 Cloud Logging을 클릭하여 Cloud Logging 로그를 봅니다.

    직렬 포트 1 로깅

  4. Cloud Logging 페이지가 기본 검색 필터와 함께 로드됩니다. COS 69 이상을 사용하는 경우에는 필터를 검사한 후 resource.labels.instance_id 값을 복사합니다. 나중에 이 값을 사용합니다.

  5. 검색 필터를 업데이트하여 컨테이너 로그를 가져옵니다.

    COS 68 이하를 사용하는 경우에는 다음 필터를 사용하세요.

    logName="projects/PROJECT_ID/logs/gcplogs-docker-driver"
    jsonPayload.container.name="/VM_NAME"
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID
    • VM_NAME: 로그를 가져올 인스턴스의 이름

    COS 69 이상을 사용하는 경우에는 다음 필터를 사용합니다.

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cos_containers"
    resource.labels.instance_id="INSTANCE_ID"
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID
    • INSTANCE_ID: 로그를 가져올 인스턴스의 ID

gcloud

gcloud logging read 명령어를 적절한 필터와 함께 사용하여 컨테이너 로그를 확인합니다.

COS 68 이하를 사용하는 경우 다음 명령어와 필터를 사용하세요.

gcloud logging read "logName=projects/PROJECT_ID/logs/gcplogs-docker-driver AND \
    jsonPayload.container.name=/VM_NAME"

COS 69 이상을 사용하는 경우

  1. 로그를 가져오려는 인스턴스의 ID를 확인합니다.

    gcloud compute instances describe VM_NAME \
       --zone ZONE \
       --format="value(id)"
    

    다음을 바꿉니다.

    • `<ZONEVM_NAME: the zone where the instance is located
    • `VM_NAMEVM_NAME: the name of the instance that you want to get logs for
  2. 다음 명령어와 필터를 사용해 인스턴스의 컨테이너 로그를 봅니다.

    gcloud logging read "resource.type=gce_instance AND \
        logName=projects/PROJECT_ID/logs/cos_containers AND \
        resource.labels.instance_id=INSTANCE_ID"
    

    다음을 바꿉니다.

    • PROJECT_ID: 인스턴스가 포함된 프로젝트 ID입니다.
    • INSTANCE_ID: 인스턴스의 ID입니다.

    예를 들어 COS 70을 실행 중이고 my-project에 존재하며 인스턴스 ID가 555123456789012345인 VM 인스턴스에 대한 Cloud Logging의 마지막 10개 컨테이너 로그를 보려면 다음 명령어를 사용합니다.

    gcloud logging read "resource.type=gce_instance AND \
        logName=projects/my-project/logs/cos_containers AND \
        resource.labels.instance_id=555123456789012345" \
        --limit 10
    

컨테이너 최적화 이미지 또는 이미지 계열 지정

컨테이너화된 VM 인스턴스 또는 인스턴스 템플릿은 기본적으로 지원되는 최신 컨테이너 최적화 이미지를 사용하도록 생성됩니다. 이 이미지는 cos-cloud 프로젝트에 속합니다.

이 기본 이미지를 cos-stable, cos-beta 또는 cos-dev 이미지 계열(모두 cos-cloud 프로젝트에 속함)의 다른 이미지로 재정의할 수 있습니다.

이러한 이미지 계열에는 다음 3가지 출시 채널의 컨테이너 최적화 이미지가 포함됩니다.

  • dev 채널은 최신 변경사항을 모두 포함하고 있으며 자주 업데이트됩니다.
  • beta 채널은 정규화된 베타 이미지로, 업데이트 빈도가 더 낮습니다.
  • stable 채널은 더 오래 테스트되고 지원되는 출시 버전을 제공하며, 필요에 따라 드물게 중요한 업데이트만 이루어집니다.

예를 들어 gcloud 도구를 사용할 경우 --image 플래그를 제공하여 기본 컨테이너 최적화 이미지를 재정의하거나 --image-family 플래그를 제공하여 VM 생성 시 지정된 계열에서 최신 이미지를 선택합니다.

다음은 cos-dev 이미지 계열의 최신 이미지를 사용하여 컨테이너화된 VM 인스턴스를 만드는 예시입니다.

gcloud compute instances create-with-container nginx-vm \
    --image-family cos-dev \
    --image-project cos-cloud \
    --container-image gcr.io/cloud-marketplace/google/nginx1:1.15

방화벽 규칙 구성

컨테이너화된 VM은 네트워크가 호스트 모드로 설정된 컨테이너를 실행합니다. 컨테이너가 호스트 네트워크 스택을 공유하고 호스트의 모든 인터페이스가 컨테이너에 제공됩니다.

기본적으로 Google Cloud 방화벽 규칙은 VM 인스턴스로 들어오는 모든 연결을 차단하고 VM 인스턴스에서 나가는 모든 연결을 허용합니다.

인스턴스, 즉 컨테이너로 들어오는 연결을 허용하는 방화벽 규칙을 생성합니다.

컨테이너 실행 옵션 구성

다음과 같은 컨테이너 실행 옵션을 구성할 수 있습니다.

  • 컨테이너 재시작 정책을 지정합니다.
  • 컨테이너 ENTRYPOINT(컨테이너 시작 시 실행되는 기본 명령어)를 재정의합니다.
  • 컨테이너 ENTRYPOINT 명령어로 인수를 전달합니다.
  • 컨테이너를 권한 모드에서 실행합니다.
  • 호스트 디렉터리 또는 tmpfs를 컨테이너 내부의 데이터 볼륨으로 마운트합니다.
  • 환경 변수를 설정합니다.
  • 컨테이너 런타임에서 STDIN용 버퍼를 할당합니다.
  • 유사 TTY를 할당합니다.

컨테이너 실행 옵션 구성에 대해 자세히 알아보세요.

다음 단계