컨테이너 실행을 위한 옵션 구성

이 페이지에서는 Compute Engine에서 컨테이너를 실행하기 위해 사용 가능한 구성 옵션에 대해 설명합니다. VM 인스턴스를 만들거나 업데이트할 때 그리고 Google Cloud Platform Console 또는 gcloud 명령줄 도구를 사용하여 인스턴스 템플릿을 만들 때 이러한 옵션을 지정할 수 있습니다.

시작하기 전에

다시 시작 정책 지정

다시 시작 정책을 설정하여 종료 시 컨테이너를 다시 시작할지 여부를 지정할 수 있습니다. 기본적으로 항상 다시 시작하도록 정책이 설정됩니다. 실패 시 다시 시작하거나 다시 시작하지 않도록 정책을 설정할 수도 있습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서 원하는 다시 시작 정책을 지정합니다.

gcloud

--container-restart-policy 플래그를 사용하여 컨테이너 다시 시작 정책을 지정할 수 있습니다.

  • always(기본값)
  • on-failure
  • never

다음 예에서는 on-failure 다시 시작 정책을 사용하여 컨테이너를 시작합니다. 즉, 컨테이너 종료 코드가 0이 아닐 때만 다시 시작이 수행됩니다.

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-restart-policy on-failure

gcloud compute instances update-container 명령어를 --container-restart-policy 플래그와 함께 사용하면 VM에서 실행 중인 컨테이너의 다시 시작 정책을 설정할 수 있습니다.

권한 모드에서 컨테이너 실행

권한 모드에서 컨테이너를 실행하면 호스트의 모든 장치에 대한 액세스를 허용할 수 있습니다. 컨테이너는 기본적으로 '권한 없음' 상태로 실행되며, 장치 액세스가 허용되지 않습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 우선적으로 실행을 선택합니다.

gcloud

--container-privileged 플래그를 사용하여 런타임 권한이 있는 상태로 컨테이너를 실행합니다. 다음 예에서는 busybox 컨테이너를 권한 모드에서 실행합니다.

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-privileged

VM에서 컨테이너를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-privileged 플래그와 함께 사용합니다. 권한 모드를 해제하려면 --no-container-privileged 플래그를 사용합니다.

컨테이너 런타임에서 STDIN을 위한 버퍼 할당

컨테이너 런타임에서 STDIN을 위한 버퍼를 할당하여 컨테이너에서 STDIN 스트림을 연 상태로 유지할 수 있습니다. 이것이 설정되지 않은 경우 컨테이너의 STDIN에서 읽기를 수행하면 항상 EOF가 발생합니다.

컨테이너에서 대화형 셸을 설정하고(유사 TTY 할당 포함) 컨테이너가 파이프에서 표준 입력을 수신할 수 있도록 하려면 STDIN 스트림을 열린 상태로 유지해야 합니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. STDIN용 버퍼 할당 을 선택합니다.

gcloud

--container-stdin 플래그를 사용하여 컨테이너 런타임에서 STDIN을 위한 버퍼를 할당합니다. 다음 예에서는 컨테이너를 시작하고 해당 STDIN을 연 상태로 유지합니다.

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin

VM에서 컨테이너를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-stdin 플래그와 함께 사용합니다. STDIN을 위한 버퍼 할당을 해제하려면 --no-container-stdin 플래그를 사용합니다.

유사 TTY 할당

컨테이너에서 대화형 셸을 설정하려면(STDIN을 위한 버퍼 할당 포함) 컨테이너의 유사 TTY를 할당해야 합니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 유사 TTY 할당을 선택합니다.

gcloud

--container-tty 플래그를 사용하여 유사 TTY를 할당합니다. 다음 예는 컨테이너를 실행하고 유사 TTY를 할당합니다.

 gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin \
    --container-tty

--container-tty 플래그와 함께 gcloud compute instances update-container 명령을 사용하여 VM에서 컨테이너를 업데이트합니다. 유사 TTY를 할당하지 않으려면 --no-container-tty 플래그를 사용합니다.

컨테이너 시작 시 실행할 기본 명령 재정의

컨테이너 이미지의 ENTRYPOINT는 컨테이너가 시작될 때 실행할 실행 파일을 지정하고 바이너리인 것처럼 컨테이너를 실행할 수 있게 해줍니다.

컨테이너 이미지의 ENTRYPOINT 명령어를 재정의할 수 있습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 명령어 상자에 실행 가능한 단일 명령어를 매개변수 없이 입력합니다(예: uptime).

gcloud

--container-command 플래그를 사용하여 컨테이너 이미지 ENTRYPOINT를 재정의합니다. 다음 예는 busybox 컨테이너에서 uptime 명령어를 실행하여 마지막 부팅 이후 경과 시간을 표시합니다.

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "uptime"

VM의 컨테이너에 대한 명령어를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-command 플래그와 함께 사용합니다.

업데이트된 컨테이너에 대한 기본 명령어를 지우려면 update-container 명령어와 함께 --clear-container-command 플래그를 사용합니다.

컨테이너 ENTRYPOINT 명령어에 인수 전달

컨테이너 ENTRYPOINT 명령어에 인수를 전달(추가)하거나 기본 컨테이너 CMD 명령어를 재정의할 수 있습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 명령 인수 아래에서 인수 추가를 클릭합니다.
  6. 상자당 하나의 명령 인수를 입력합니다.

gcloud

--container-arg 플래그를 사용하여 컨테이너 이미지 ENTRYPOINT 명령에 인수를 전달합니다. 각 인수에 대해 하나의 개별 플래그를 사용합니다.

다음 예에서는 busybox를 자동으로 실행하도록 설정된 컨테이너에서 -c ‘ls -l’ 인수를 사용하여 /bin/ash 명령어를 실행합니다.

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "/bin/ash" \
   --container-arg="-c" \
   --container-arg="ls -l"

VM에서 실행 중인 컨테이너에 대한 명령어 인수를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-arg 플래그와 함께 사용합니다. 이 업데이트는 전체 인수 목록을 새 목록으로 바꿉니다.

컨테이너 선언에서 모든 인수를 삭제하려면 update-container 명령어와 함께 --clear-container-args 플래그를 사용합니다.

환경 변수 설정

컨테이너에서 환경 변수를 설정할 수 있습니다. [KEY]가 두 번 이상 반복될 경우 [KEY]의 마지막 값만 사용됩니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 환경 변수 아래에서 변수 추가를 클릭합니다.
  6. 필요에 따라 한 줄에 하나씩 환경 변수를 추가하거나 삭제합니다.

gcloud

--container-env 플래그를 사용하여 컨테이너에서 환경 변수를 설정합니다. 다음 예에서는 HOME, MODE, OWNER의 세 가지 환경 변수를 설정합니다.

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env HOME=/home,MODE=test,OWNER=admin

--container-env-file 플래그를 사용하여 로컬 파일에서 환경 변수를 설정합니다. 다음 예에서는 env.txt 파일에서 2개의 환경 변수를 설정합니다.

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env-file ./env.txt

env.txt 파일의 내용은 다음과 같습니다.

# this is a comment
HOME=/home
MODE=test
OWNER=admin

VM의 컨테이너에 대한 환경 변수를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-env 또는 --container-env-file 플래그와 함께 사용합니다. 이렇게 하면 VM 인스턴스의 컨테이너 선언에 있는 모든 변수가 업데이트됩니다. 컨테이너 선언에 없는 변수는 추가됩니다.

VM에서 컨테이너를 업데이트할 때 --remove-container-env 플래그를 사용하여 환경 변수를 삭제합니다. 다음 예에서는 MODEOWNER라는 환경 변수를 삭제합니다.

gcloud compute instances update-container busybox-vm \
    --remove-container-env MODE,OWNER

지정된 환경 변수가 존재하지 않을 경우에는 자동으로 무시됩니다.

호스트 디렉토리를 데이터 볼륨으로 마운트

호스트 VM에서 컨테이너로 디렉토리를 마운트할 수 있습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 호스트 디렉토리 마운트에서 볼륨 추가를 클릭합니다.
  6. 다음을 지정합니다.

    • 호스트 디렉토리를 마운트하려는 컨테이너 디렉토리 구조에서의 경로인 마운트 경로를 지정합니다.
    • 마운트하려는 호스트 디렉토리에 대한 경로인 호스트 경로를 지정합니다.
    • 읽기/쓰기 또는 읽기 전용 모드로 디렉토리를 마운트할지 지정합니다.

gcloud

--container-mount-host-path 플래그를 사용하여 호스트 VM 디렉토리를 컨테이너에 마운트합니다. 다음 예에서는 호스트 디렉토리 /tmp를 컨테이너의 /logs에 읽기-쓰기 모드로 마운트합니다.

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

호스트 디렉토리를 읽기 전용 모드로 마운트하려면 mode=ro를 지정합니다.

컨테이너에서 호스트 디렉토리 마운트를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-mount-host-path 플래그와 함께 사용합니다. 업데이트할 때 지정된 마운트 경로를 사용하여 볼륨 마운트를 삭제하려면 --remove-container-mounts 플래그를 사용합니다. 다음 예에서는 mount-path=/logs를 사용하여 호스트 경로 마운트를 삭제합니다.

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /logs

지정된 마운트 경로가 존재하지 않으면 자동으로 무시됩니다.

tmpfs 파일 시스템을 데이터 볼륨으로 마운트

비어 있는 tmpfs 파일 시스템을 컨테이너에 마운트할 수 있습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. Tmpfs 마운트에서 볼륨 추가를 클릭합니다.
  6. tmpfs 볼륨을 마운트하려는 컨테이너 디렉토리 구조에서의 경로인 마운트 경로를 지정합니다. tmpfs 볼륨은 읽기/쓰기 모드로 마운트됩니다.

gcloud

--container-mount-tmpfs 플래그를 사용하여 비어 있는 tmpfs 파일 시스템을 컨테이너에 마운트합니다. 다음 예에서는 tmpfs 파일 시스템을 컨테이너의 /cache에 읽기-쓰기 모드로 마운트합니다.

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-mount-tmpfs mount-path=/cache

컨테이너의 tmpfs 마운트를 업데이트하려면 gcloud compute instances update-container 명령어를 --container-mount-tmpfs 플래그와 함께 사용합니다. 업데이트할 때 지정된 마운트 경로를 사용하여 tmpfs 마운트를 삭제하려면 --remove-container-mounts 플래그를 사용합니다. 다음 예에서는 mount-path=/cache를 사용하여 tmpfs 마운트를 삭제합니다.

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /cache

지정된 마운트 경로가 존재하지 않으면 자동으로 무시됩니다.

영구 디스크를 데이터 볼륨으로 마운트

Container-Optimized OS 69 이상을 사용하는 경우 호스트 VM의 영구 디스크를 컨테이너로 마운트할 수 있습니다.

기본 요건

  • 디스크에는 ext4 파일 시스템 하나만 있거나 파일 시스템이 없어야 합니다. 초기 파일 시스템이 없으면 컨테이너 시작 에이전트가 디스크를 ext4로 포맷하며, 읽기/쓰기 연결 및 마운트만 지원됩니다.
  • 디스크가 VM에 연결되어 있어야 합니다.
  • 파티션 없는 기기와 파티션이 모두 지원됩니다. 파티션 마운트의 경우 기존 파티션 테이블이 포함되어야 하므로 디스크가 비어 있을 수 없습니다.

콘솔

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

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기 버튼을 클릭하여 새 인스턴스를 만듭니다.
  3. 컨테이너 섹션에서, 컨테이너 이미지 배포를 선택합니다.
  4. 고급 컨테이너 옵션을 클릭합니다.
  5. 볼륨 마운트에서 볼륨 추가를 클릭합니다.
  6. 볼륨 유형에서 Disk를 선택합니다.
  7. 영구 디스크를 마운트하려는 컨테이너 디렉토리 구조에서의 경로인 마운트 경로를 지정합니다.
  8. 디스크 이름에서 마운트할 기존 디스크를 선택하거나 새 디스크를 연결합니다.
  9. 디스크에 파티션 테이블이 있는 경우, 마운트하려는 파티션 번호를 지정합니다. 디스크에 파티션이 없으면 이 필드를 비워 둡니다.
  10. 디렉토리를 읽기/쓰기 모드로 마운트할지 읽기 전용 모드로 마운트할지 지정합니다.

gcloud

영구 디스크를 컨테이너에 마운트하려면 gcloud beta compute instances create-with-container 명령어 또는 gcloud beta compute instances update-container 명령어를 --container-mount-disk 플래그와 함께 사용합니다.

다음 예에서는 my-data-diskmy-scratch-disk라는 두 개의 디스크를 컨테이너의 /disks/data-disk/disks/scratch-disk 마운트 경로에 마운트합니다.

gcloud beta compute instances create-with-container busybox-vm \
    --disk name=my-data-disk \
    --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \
    --container-image docker.io/busybox:1.27 \
    --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \
    --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk

--disk 플래그는 my-data-disk를 연결하고, --create-disk 플래그는 my-scatch-disk를 생성 및 연결하며, --container-mount-disk 플래그는 연결된 디스크를 컨테이너로 마운트합니다. my-scratch-disk에는 mode가 지정되지 않았으므로 해당 디스크는 기본적으로 읽기/쓰기 모드로 컨테이너에 마운트됩니다.

연결된 추가 디스크를 마운트하거나 기존 디스크 마운트를 수정하려면 gcloud beta compute instances update-container 명령어를 --container-mount-disk 플래그와 함께 사용합니다.

지정된 마운트 경로를 사용하는 디스크 마운트를 삭제하려면 --remove-container-mounts 플래그를 사용합니다. 다음 예에서는 my-data-disk의 마운트 모드를 읽기/쓰기로 변경하고 mount-path="/disks/scratch-disk"를 사용하는 디스크 마운트를 삭제합니다.

gcloud beta compute instances update-container busybox-vm \
    --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \
    --remove-container-mounts "/disks/scratch-disk"

--remove-container-mounts 플래그에 전달한 마운트 경로가 존재하지 않으면 자동으로 무시됩니다.

컨테이너 포트 게시

컨테이너를 포함하는 VM은 컨테이너가 호스트의 네트워크 스택을 공유하고 호스트의 모든 인터페이스가 컨테이너에 제공되는 호스트 네트워크 모드를 사용합니다.

컨테이너 포트는 호스트 VM 포트에 일대일로 매핑됩니다. 예를 들어 컨테이너 포트 80은 호스트 VM 포트 80에 매핑되고, 매핑 작동을 위해 포트 게시(-p) 플래그를 지정할 필요가 없습니다.

컨테이너 포트를 게시하려면 호스트 VM 인스턴스의 포트에 액세스할 수 있도록 방화벽 규칙을 구성합니다. 방화벽 규칙에 따라 컨테이너의 해당 포트에 자동으로 액세스할 수 있습니다.

예: NGINX 컨테이너에 대해 포트 80 게시

다음 예는 NGINX 컨테이너로 VM 인스턴스를 만들고 컨테이너의 포트 80에 대해 트래픽을 허용하는 방법을 보여줍니다.

  1. NGINX 컨테이너가 포함된 VM 인스턴스를 만듭니다.

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

    이 컨테이너는 호스트 VM의 네트워크 스택을 공유합니다. 컨테이너의 포트 80은 호스트 VM의 포트 80에 게시됩니다. http-server 태그는 다음 단계에서 생성되는 방화벽 규칙의 대상 태그로 사용됩니다.

  2. VM 인스턴스의 포트 80에 연결할 수 있도록 방화벽 규칙을 만듭니다. 다음 방화벽 규칙은 http-server 태그를 사용하여 VM 인스턴스에 HTTP로 연결하도록 허용합니다.

    gcloud compute firewall-rules create allow-http \
        --allow tcp:80 --target-tags http-server
    

    컨테이너는 포트 80에서 트래픽 수신을 자동으로 시작합니다. 추가 구성은 수행할 필요가 없습니다.

    프로토콜이 tcp 또는 udp인 호스트 VM 프로토콜:포트 조합에 대해 방화벽 규칙을 만들 수 있습니다. 이러한 규칙은 실질적으로 VM 외부에서 해당 컨테이너 포트로의 액세스를 제어합니다.

다음 단계

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

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

Compute Engine 문서