VM 및 MIG에 컨테이너 배포

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

시작하기 전에

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

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 인스턴스나 관리형 인스턴스 그룹에 배포할 수도 있습니다. 각 컨테이너에는 앱 소프트웨어와 필수 라이브러리가 있으며 호스트 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 명령어 구성을 사용하여 저장소에서 컨테이너 이미지를 가져와 컨테이너를 시작합니다.
컨테이너 이미지 및 `docker run` 명령어 사용
컨테이너를 실행하는 VM 인스턴스 또는 관리형 인스턴스 그룹을 만드는 단계

제한사항

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

배포할 컨테이너 준비

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

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

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

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

Console

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

  1. 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 [INSTANCE_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 Platform Console 또는 gcloud 명령줄 도구를 사용하여 VM 인스턴스에서 컨테이너를 실행하도록 Docker 이미지 및 구성 옵션을 업데이트할 수 있습니다.

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

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

Console

  1. 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 Platform Console 또는 gcloud 명령줄 도구를 통해 새 관리형 인스턴스 그룹에 컨테이너를 배포할 수 있습니다.

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

  2. 새 인스턴스 템플릿에서 관리형 인스턴스 그룹을 만듭니다.

Console

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

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

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

  2. 인스턴스 템플릿 만들기 버튼을 클릭하여 새 인스턴스 템플릿을 만듭니다.
  3. 컨테이너 섹션에서 컨테이너 이미지 배포를 선택합니다.
  4. 컨테이너 이미지에서 Docker 이미지 이름을 지정하고 원하는 경우 컨테이너 실행 옵션을 구성합니다. 예를 들어 컨테이너 이미지로 gcr.io/cloud-marketplace/google/nginx1:15를 지정할 수 있습니다.
  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:15를 시작하고 실행합니다.

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

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

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

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

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

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

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

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

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

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

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

  1. 새 관리형 인스턴스 그룹에 대해 컨테이너 기반 템플릿을 만드는 것과 같은 방식으로 현재 버전의 Docker 이미지를 기반으로 인스턴스 템플릿을 만듭니다. 기본적으로 컨테이너 최적화 OS 이미지의 최신 지원 버전이 사용됩니다.
  2. 관리형 인스턴스 그룹 업데이터를 사용하여 새 인스턴스 템플릿으로 관리형 인스턴스 그룹을 업데이트합니다.

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

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

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

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

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

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

로그 보기

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

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

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

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

시작 에이전트 로그 보기

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

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

Console

  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*
    

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

Console

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

    VM 인스턴스 페이지로 이동

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

  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을 실행하면서 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와 Stackdriver Logging에서 볼 수 있습니다.

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

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

    sudo journalctl -u docker-events-collector
    

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

Console

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

    VM 인스턴스 페이지로 이동

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

  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을 실행하면서 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. 로그에서 Stackdriver Logging을 클릭하여 Stackdriver Logging 로그를 봅니다.

  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 프로젝트에 속함) 중 하나로 재정의할 수 있습니다.

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

  • 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 Platform 방화벽 규칙은 VM 인스턴스로 들어오는 모든 연결을 차단하고 VM 인스턴스에서 나가는 모든 연결을 허용합니다.

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

컨테이너 실행 옵션 구성

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

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

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

다음 단계

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

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

Compute Engine 문서