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

Docker 컨테이너를 배포하고 시작하도록 VM 인스턴스 또는 인스턴스 템플릿을 구성할 수 있습니다. Compute Engine은 Docker가 설치된 최신 COS(컨테이너 최적화 OS) 이미지를 제공하며, VM이 시작될 때 컨테이너를 시작합니다. VM에 컨테이너를 배포할 경우의 장점에 대한 자세한 내용은 아래의 VM 및 인스턴스 그룹에 컨테이너 배포를 참조하세요.

시작하기 전에

VM 및 인스턴스 그룹에 컨테이너 배포

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

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

또는 Kubernetes Engine에 배포하여 다음을 수행할 수도 있습니다.

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

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

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

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

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

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

애플리케이션이 호스트 운영체제에 직접 배포된 VM 인스턴스

컨테이너에 있는 소프트웨어를 직접 VM 인스턴스나 관리형 인스턴스 그룹에 배포할 수도 있습니다. 각 컨테이너에는 애플리케이션 소프트웨어와 필수 라이브러리가 있으며 호스트 OS 애플리케이션 및 라이브러리와는 분리되어 있습니다. 한 컨테이너와 해당 호스트 OS 안에서 충돌하는 여러 라이브러리 버전을 처리하지 않고 여러 배포 환경 간에 컨테이너를 쉽게 옮길 수 있습니다.

애플리케이션이 한 컨테이너에 배포된 VM 인스턴스

Compute Engine에 컨테이너를 배포하는 프로세스는 다음과 같습니다.

  1. 애플리케이션과 필수 라이브러리를 Docker 이미지로 묶어서 이 이미지를 Container Registry에 게시하거나 Docker Hub 등의 레지스트리에 공개적으로 게시합니다.
  2. VM 인스턴스 또는 관리형 인스턴스 그룹의 인스턴스 템플릿을 만들 때 Docker 이미지 이름과 docker run 구성을 지정합니다.

사용자가 VM 인스턴스 또는 인스턴스 템플릿 생성을 요청하면 Compute Engine이 다음 작업을 실행합니다.

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

제한사항

  • 각 VM 인스턴스에 컨테이너 1개만 배포할 수 있습니다. 각 VM 인스턴스에 여러 개의 컨테이너를 배포해야 할 경우 Kubernetes Engine을 고려해 보세요.
  • 공개 저장소의 컨테이너 또는 Google Container Registry에 있는 비공개 저장소의 컨테이너만 배포할 수 있습니다. 다른 비공개 저장소는 현재 지원되지 않습니다.
  • VM 인스턴스의 포트를 컨테이너의 포트로 매핑할 수 없습니다(Docker의 -p 옵션).
  • 이 배포 방법을 이용할 경우 컨테이너 최적화 OS 이미지만 사용할 수 있습니다.
  • Google Cloud Platform Console 또는 gcloud 명령줄 도구를 통해서만 이 기능을 사용할 수 있습니다.

배포할 컨테이너 준비

아래의 방법 중 하나를 선택하여 컨테이너 이미지가 Compute Engine에 액세스할 수 있게 만듭니다.

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

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

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

콘솔

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

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 컨테이너 이미지에서 컨테이너 이미지 이름을 지정하고, 필요한 경우 컨테이너 실행 옵션을 구성합니다. 예를 들어 컨테이너 이미지에 gcr.io/cloud-marketplace/google/nginx1:1.12를 지정할 수 있습니다.
  5. 만들기를 클릭합니다.

gcloud

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

 gcloud compute instances create-with-container [INSTANCE_NAME] \
     --container-image [DOCKER_IMAGE]

예를 들어, 다음 명령어를 실행하면 nginx-vm이라는 새 VM 인스턴스가 생성되고 해당 인스턴스가 Docker 이미지 gcr.io/cloud-marketplace/google/nginx1:1.12를 시작하고 실행합니다.

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

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

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

docker.io/httpd:2.4

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

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

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

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

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 업데이트해야 하는 인스턴스의 이름을 클릭합니다.
  3. 인스턴스 세부정보 페이지에서 수정을 클릭합니다.
  4. 새 컨테이너 이미지를 지정하고 필요에 따라 컨테이너 실행 옵션을 업데이트합니다.
  5. 저장 및 다시 시작을 클릭하여 변경사항을 저장합니다. Compute Engine이 변경사항을 저장하고 인스턴스를 자동으로 다시 시작하여 업데이트를 실행합니다. VM이 다시 시작되면 VM이 새 이미지를 다운로드하고 업데이트 구성을 적용하여 컨테이너를 시작합니다.

gcloud

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

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

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

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

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

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

  1. Docker 이미지를 기반으로 인스턴스 템플릿을 만듭니다.
  2. 새 인스턴스 템플릿에서 관리형 인스턴스 그룹을 만듭니다.

콘솔

다음은 Google에서 제공하는 Nginx(gcr.io/cloud-marketplace/google/nginx1:1.12) Docker 이미지에서 관리형 인스턴스 그룹으로 컨테이너를 배포하는 인스턴스 템플릿을 만드는 예입니다. 다른 Docker 이미지를 사용하려면 아래의 예에서 gcr.io/cloud-marketplace/google/nginx1:1.12 대신 원하는 이미지를 지정하세요.

  1. 인스턴스 템플릿 페이지로 이동합니다.

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

  2. 인스턴스 템플릿 만들기 버튼을 클릭하여 새 인스턴스 템플릿을 만듭니다.
  3. 컨테이너 섹션에서 컨테이너 이미지 배포를 선택합니다.
  4. 컨테이너 이미지에서 Docker 이미지 이름을 지정하고 필요한 경우 컨테이너 실행 옵션을 구성합니다. 예를 들어 컨테이너 이미지에 gcr.io/cloud-marketplace/google/nginx1:1.12를 지정할 수 있습니다.
  5. 만들기를 클릭합니다.

그 다음, 새 인스턴스 템플릿을 사용하여 관리형 인스턴스 그룹을 만듭니다.

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:1.12를 시작하고 실행합니다.

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

그 다음, 새 인스턴스 템플릿을 사용하여 관리형 인스턴스 그룹을 만듭니다.

이제 인스턴스 템플릿이 있으니 인스턴스 템플릿을 사용하여 관리형 인스턴스 그룹을 생성할 수 있습니다. 예를 들어, gcloud 도구를 사용하여 방금 만든 nginx-template으로 관리형 인스턴스 그룹을 만들려면 다음 명령어를 실행합니다.

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

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

Docker 이미지의 새 버전이나 컨테이너 최적화 OS 이미지의 새 버전을 배포하도록 관리형 인스턴스 그룹을 업데이트할 수 있습니다.

관리형 인스턴스 그룹을 컨테이너 이미지의 새 버전으로 업데이트

다음 3단계를 통해 Managed Instance Group Updater를 사용하여 Docker 이미지의 새 버전을 관리형 인스턴스 그룹에 배포할 수 있습니다.

  1. 배포할 새 Docker 이미지를 준비합니다.
  2. 컨테이너 기반 템플릿 생성 과정과 동일한 방식으로 새 Docker 이미지에 기초하여 인스턴스 템플릿을 만듭니다.
  3. Managed Instance Group Updater를 사용하여 새 인스턴스 템플릿으로 관리형 인스턴스 그룹을 업데이트합니다.

관리형 인스턴스 그룹을 컨테이너 최적화 OS 이미지의 새 버전으로 업데이트

Google은 컨테이너 최적화 OS 이미지를 정기적으로 업데이트하므로 Docker 이미지를 변경하지 않고 컨테이너화된 관리형 인스턴스 그룹에 해당 업데이트를 적용하는 것이 좋습니다. Google Cloud Platform Console 또는 gcloud 명령줄 도구를 사용하여 다음 2단계를 통해 관리형 인스턴스 그룹을 컨테이너 최적화 OS 이미지의 새 버전으로 업데이트할 수 있습니다.

  1. 컨테이너 기반 템플릿 생성 과정과 동일한 방식으로 Docker 이미지의 현재 버전에 기초하여 새 관리형 인스턴스 그룹의 인스턴스 템플릿을 만듭니다. 기본적으로 컨테이너 최적화 OS 이미지의 최신 지원 버전이 사용됩니다.
  2. Managed Instance Group Updater를 사용하여 새 인스턴스 템플릿으로 관리형 인스턴스 그룹을 업데이트합니다.

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

SSH를 사용하여 VM의 컨테이너에 연결할 수 있습니다. gcloud 도구를 사용하여 gcloud compute ssh 명령어에 --container 플래그를 실행하세요.

gcloud compute ssh [INSTANCE_NAME] --container [CONTAINER_NAME]

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

  • [INSTANCE_NAME]은 VM 인스턴스의 이름입니다.
  • [CONTAINER_NAME]은 컨테이너의 이름입니다.

gcloud compute ssh 명령어와 해당 인수를 자세히 알아보세요.

로그 보기

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

  1. konlet 로그라고도 하는 시작 에이전트 로그. 시작 에이전트는 컨테이너의 구성을 파싱한 후 Compute Engine VM 인스턴스에서 컨테이너를 시작하는 작업을 실행합니다.

  2. Docker 이벤트 로그는 컨테이너 시작 및 중지 이벤트를 포함해 컨테이너 이벤트를 보고합니다. 이 로그는 COS 69 이상 사용하는 경우에 제공됩니다.

  3. 컨테이너 로그에는 컨테이너에서 실행되는 애플리케이션의 STDOUT가 포함됩니다.

시작 에이전트 로그 보기

시작 에이전트 로그는 직렬 콘솔, OS 이미지에 포함된 journald 시스템 서비스, Stackdriver Logging에서 볼 수 있습니다.

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

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.
  3. 로그에서 직렬 포트 1(콘솔)을 클릭하여 직렬 콘솔 로그를 봅니다.

gcloud

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

gcloud compute instances get-serial-port-output [INSTANCE_NAME]

여기서, [INSTANCE_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*
    

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

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.
  3. 로그에서 Stackdriver Logging을 클릭하여 Stackdriver 로그를 봅니다.

  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="[INSTANCE_NAME]"
    

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

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

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

    • [PROJECT_ID]는 인스턴스가 포함된 프로젝트 ID입니다.
    • [INSTANCE_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=[INSTANCE_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=[INSTANCE_NAME]"

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

  • [PROJECT_ID]는 인스턴스가 포함된 프로젝트 ID입니다.
  • [INSTANCE_NAME]은 로그를 가져오려는 인스턴스의 이름입니다.

예를 들어 COS 70을 실행하면서 nginx-vm이라는 이름으로 my-project에 존재하는 VM 인스턴스의 마지막 시작 에이전트 로그 10개를 Stackdriver에서 보려면 다음 명령어를 사용하세요.

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 이벤트 로그 보기

Docker 이벤트 로그는 COS 69 이상을 사용하는 경우 journald과 Stackdriver에서 볼 수 있습니다.

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

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

    sudo journalctl -u docker-events-collector
    

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

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.
  3. 로그에서 Stackdriver Logging을 클릭하여 Stackdriver 로그를 봅니다.

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

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

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

    • [PROJECT_ID]는 인스턴스가 포함된 프로젝트 ID입니다.
    • [INSTANCE_NAME]은 로그를 가져오려는 인스턴스의 이름입니다.

gcloud

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

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

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

  • [PROJECT_ID]는 인스턴스가 포함된 프로젝트 ID입니다.
  • [INSTANCE_NAME]은 로그를 가져오려는 인스턴스의 이름입니다.

예를 들어 COS 70을 실행하면서 nginx-vm이라는 이름으로 my-project에 존재하는 VM 인스턴스의 마지막 Docker 이벤트 로그 10개를 Stackdriver에서 보려면 다음 명령어를 사용하세요.

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

컨테이너 로그 보기

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 시작 에이전트 로그를 보려는 VM 인스턴스를 선택합니다.
  3. 로그에서 Stackdriver Logging을 클릭하여 Stackdriver 로그를 봅니다.

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

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

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

    logName="projects/[PROJECT_ID]/logs/gcplogs-docker-driver"
    jsonPayload.container.name="/[INSTANCE_NAME]"
    

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

    • [PROJECT_ID]는 인스턴스가 포함된 프로젝트 ID입니다.
    • [INSTANCE_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=/[INSTANCE_NAME]"

COS 69 이상을 사용하는 경우:

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

    gcloud compute instances describe [INSTANCE_NAME] \
        --zone [ZONE] \
        --format="value(id)"
    

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

    • [ZONE]은 인스턴스가 위치하는 영역입니다.
    • [INSTANCE_NAME]은 로그를 가져오려는 인스턴스의 이름입니다.
  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을 실행하면서 555123456789012345라는 인스턴스 ID로 my-project에 존재하는 VM 인스턴스의 마지막 컨테이너 로그 10개를 Stackdriver에서 보고 싶다면 다음 명령어를 사용하세요.

    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 이미지 계열 중 버전 62 이상의 다른 이미지로 재정의하거나 이러한 이미지 계열(모두 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.12

방화벽 규칙 구성

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

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

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

컨테이너 실행 옵션 구성

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

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

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

다음 단계

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

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

Compute Engine 문서