시작하기 전에
- 컨테이너에 대해 잘 모르는 경우 Compute Engine의 컨테이너를 참조하세요.
- Docker에 대해 잘 모른다면 Docker 문서를 읽어보세요.
- Compute Engine에 컨테이너 배포를 읽어보세요.
-
아직 인증을 설정하지 않았다면 설정합니다.
인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다.
로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
인스턴스 템플릿 만들기 페이지로 이동
컨테이너 섹션에서 이 VM 인스턴스에 컨테이너 이미지를 배포합니다 체크박스를 선택하고 고급 컨테이너 옵션을 펼칩니다.
- Google Cloud CLI에서 다음 예시와 같이
gcloud compute instance-templates create-with-container
명령어를 사용합니다. 인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 재시작 정책 섹션에서 컨테이너의 재시작 정책을 선택합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
always
(기본값)on-failure
never
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 권한 모드로 실행을 선택합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- STDIN용 버퍼 할당을 선택합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 유사 TTY 할당을 선택합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 명령어 필드에 실행 가능한 단일 명령어를 매개변수 없이 입력합니다(예:
uptime
). - 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 인수 섹션에서 인수 추가를 클릭합니다.
- 상자당 하나의 명령어 인수를 입력합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 환경 변수 섹션에서 변수 추가를 클릭합니다.
- 필요에 따라 한 줄에 하나씩 환경 변수를 추가하거나 삭제합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 볼륨 마운트 섹션에서 볼륨 추가를 클릭합니다.
볼륨 유형 목록에서 디렉터리를 선택하고 다음을 수행합니다.
- 마운트 경로 필드에 컨테이너 디렉터리 구조에서 호스트 디렉터리를 마운트할 마운트 경로를 지정합니다.
- 호스트 경로 필드에 마운트할 호스트 디렉터리의 호스트 경로를 지정합니다.
- 모드 목록에서 디렉터리를 읽기/쓰기 모드로 마운트할지, 읽기 전용 모드로 마운트할지 지정합니다.
컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 볼륨 마운트 섹션에서 볼륨 추가를 클릭합니다.
- 볼륨 유형 목록에서 TmpFS를 선택합니다.
- 마운트 경로 필드에 컨테이너 디렉터리 구조에서 TmpFS 볼륨을 마운트할 마운트 경로를 지정합니다.
- 모드 목록에서 TmpFS 볼륨을 읽기/쓰기 모드로 마운트할지, 읽기 전용 모드로 마운트할지 지정합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
- 디스크에
ext4
파일 시스템이 있거나 파일 시스템이 아예 없어야 합니다. 초기 파일 시스템이 없으면 컨테이너 시작 에이전트가 디스크를ext4
로 포맷하며, 읽기/쓰기 연결 및 마운트만 지원됩니다. - 디스크가 VM에 연결되어 있어야 합니다.
파티션 없는 기기와 파티션이 모두 지원됩니다. 파티션 마운트의 경우 기존 파티션 테이블이 포함되어야 하므로 디스크가 비어 있을 수 없습니다.
인스턴스 만들기 페이지로 이동
컨테이너 섹션에서 컨테이너 배포를 클릭합니다.
컨테이너 구성 페이지에서 다음을 수행합니다.
- 컨테이너 이미지 이름을 지정합니다.
- 볼륨 마운트 섹션에서 볼륨 추가를 클릭합니다.
- 볼륨 유형 목록에서 디스크를 선택합니다.
- 마운트 경로 필드에 컨테이너 디렉터리 구조에서 영구 디스크를 마운트할 경로를 지정합니다.
- 디스크 이름 목록에서 마운트할 기존 디스크를 선택합니다.
- 디스크에 파티션 테이블이 있는 경우 파티션 필드에 마운트할 파티션 번호를 지정합니다. 디스크에 파티션이 없으면 이 필드를 비워 둡니다.
- 모드 목록에서 디렉터리를 읽기/쓰기 모드로 마운트할지, 읽기 전용 모드로 마운트할지 지정합니다.
- 컨테이너 세부정보를 확인하려면 선택을 클릭합니다.
VM 만들기 프로세스를 계속 진행합니다.
NGINX 컨테이너가 포함된 VM 인스턴스를 만듭니다.
gcloud compute instances create-with-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:1.15 \ --tags http-server
이 컨테이너는 호스트 VM의 네트워크 스택을 공유합니다. 컨테이너의 포트 80은 호스트 VM의 포트 80에 게시됩니다.
http-server
태그는 방화벽 규칙의 대상 태그로 사용되며 다음 단계에서 생성됩니다.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에서 Docker 컨테이너를 배포하는 방법 알아보기
- 컨테이너 최적화 OS 알아보기
VM 및 MIG에 컨테이너 배포에 사용할 인스턴스 또는 인스턴스 템플릿을 만드는 경우 Google Cloud Console 또는 Google Cloud CLI를 사용하여 컨테이너 구성을 지정합니다.
다음 섹션에서는 VM 인스턴스의 옵션을 구성하는 방법을 설명하지만, 인스턴스 템플릿을 만들 때도 이러한 옵션도 구성할 수 있습니다. Google Cloud Console 또는 Google Cloud CLI를 사용하여 인스턴스 템플릿의 VM 인스턴스 옵션을 구성합니다.
Console
gcloud
재시작 정책 지정
재시작 정책을 설정하여 종료 시 컨테이너를 다시 시작할지 여부를 지정할 수 있습니다. 기본적으로 항상 다시 시작하도록 정책이 설정됩니다. 실패 시 다시 시작하거나 다시 시작하지 않도록 정책을 설정할 수도 있습니다.
Console
gcloud
--container-restart-policy
플래그를 사용하여 컨테이너 재시작 정책을 지정합니다.다음 예시에서는
on-failure
재시작 정책으로 컨테이너를 시작합니다. 이는 컨테이너 종료 코드가 0이 아닌 경우에만 다시 시작된다는 의미입니다.gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-restart-policy on-failure
VM에서 실행 중인 컨테이너의 재시작 정책에
--container-restart-policy
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다.권한 모드에서 컨테이너 실행
권한 모드에서 컨테이너를 실행하면 호스트의 모든 기기에 대한 액세스를 허용할 수 있습니다. 컨테이너는 기본적으로 '권한 없음' 상태로 실행되며 기기 액세스가 허용되지 않습니다.
Console
gcloud
런타임 권한으로 컨테이너를 실행하려면
--container-privileged
플래그를 사용합니다. 다음 예시에서는 busybox 컨테이너를 권한 모드에서 실행합니다.gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-privileged
VM의 컨테이너를 업데이트하려면
--container-privileged
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다. 권한 모드를 사용 중지하려면--no-container-privileged
플래그를 사용합니다.컨테이너 런타임에서 STDIN을 위한 버퍼 할당
컨테이너 런타임에서
STDIN
을 위한 버퍼를 할당하여 컨테이너에서STDIN
스트림을 연 상태로 유지할 수 있습니다. 이것이 설정되지 않은 경우 컨테이너의STDIN
에서 읽기를 수행하면 항상EOF
가 발생합니다.컨테이너에서 대화형 셸을 설정하고 컨테이너가 파이프에서 표준 입력을 수신하려면 유사 TTY를 할당하고
STDIN
스트림을 열어 두어야 합니다.Console
gcloud
컨테이너 런타임에서
STDIN
에 대한 버퍼를 할당하려면--container-stdin
플래그를 사용합니다. 다음 예시에서는 컨테이너를 시작하고 해당STDIN
을 연 상태로 유지합니다.gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-stdin
VM의 컨테이너를 업데이트하려면
--container-stdin
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다.STDIN
의 버퍼 할당을 사용 중지하려면--no-container-stdin
플래그를 사용하세요.유사 TTY 할당
컨테이너에서 대화형 셸을 설정하려면 컨테이너의 유사 TTY를 할당해야 합니다(STDIN을 위한 버퍼 할당 포함).
Console
gcloud
유사 TTY를 할당하려면
--container-tty
플래그를 사용합니다. 다음 예시에서는 컨테이너를 시작하고 유사 TTY를 할당합니다.gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-stdin \ --container-tty
VM의 컨테이너를 업데이트하려면
--container-tty
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다. 유사 TTY를 할당하지 않으려면--no-container-tty
플래그를 사용합니다.컨테이너 시작 시 실행할 기본 명령어 재정의
컨테이너 이미지의
ENTRYPOINT
는 컨테이너가 시작될 때 실행할 실행 파일을 지정하고 바이너리인 것처럼 컨테이너를 실행할 수 있게 해줍니다.컨테이너 이미지의
ENTRYPOINT
명령어를 재정의할 수 있습니다.Console
gcloud
컨테이너 이미지
ENTRYPOINT
를 재정의하려면--container-command
플래그를 사용하세요. 다음 예시에서는 busybox 컨테이너에서uptime
명령어를 실행하여 마지막 부팅 이후 경과한 시간을 표시합니다.gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-command "uptime"
VM의 컨테이너에 대한 명령을 업데이트하려면
--container-command
플래그가 지정된gcloud compute instances update-container
명령어를 사용하세요.업데이트된 컨테이너의 기본 명령어를 지우려면
update-container
명령어에--clear-container-command
플래그를 사용하세요.컨테이너 ENTRYPOINT 명령어에 인수 전달
컨테이너
ENTRYPOINT
명령어에 인수를 전달(추가)하거나 기본 컨테이너CMD
명령어를 재정의할 수 있습니다.Console
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에서 실행 중인 컨테이너의 명령어 인수를 업데이트하려면
--container-arg
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다. 업데이트는 전체 인수 목록을 새 목록으로 바꿉니다.컨테이너 선언에서 모든 인수를 삭제하려면
update-container
명령어에--clear-container-args
플래그를 사용합니다.로그 드라이버 옵션 구성
로그 드라이버 옵션을 구성해야 하는 경우 VM 시작 스크립트를 만들어 필요한 로깅 옵션으로 Docker 구성 파일을 업데이트할 수 있습니다. 이러한 옵션은 VM에서 실행되고 로그 드라이버 옵션을 지정하지 않는 모든 컨테이너에 적용됩니다.
예를 들어 다음 시작 스크립트는 컨테이너 로그 크기를 제한하는 옵션을 포함하여 여러 옵션을 설정한 후 VM에서 Docker를 다시 시작합니다.
cat <<EOF > /etc/docker/daemon.json { "live-restore": true, "storage-driver": "overlay2", "log-opts": { "max-size": "10m" } } EOF systemctl restart docker
환경 변수 설정
컨테이너에서 환경 변수를 설정할 수 있습니다.
KEY
가 두 번 이상 반복될 경우KEY
의 마지막 값만 사용됩니다.Console
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
파일에서 두 환경 변수를 설정합니다.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의 컨테이너에 대한 환경 변수를 업데이트하려면
--container-env
또는--container-env-file
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다. 그러면 VM 인스턴스의 컨테이너 선언에 있는 모든 변수가 업데이트됩니다. 컨테이너 선언에 없는 변수는 추가됩니다.VM에서 컨테이너를 업데이트할 때 환경 변수를 삭제하려면
--remove-container-env
플래그를 사용합니다. 다음 예시에서는MODE
및OWNER
라는 환경 변수를 삭제합니다.gcloud compute instances update-container busybox-vm \ --remove-container-env MODE,OWNER
지정된 환경 변수가 존재하지 않을 경우에는 자동으로 무시됩니다.
호스트 디렉토리를 데이터 볼륨으로 마운트
호스트 VM에서 컨테이너로 디렉터리를 마운트할 수 있습니다.
Console
gcloud
호스트 VM 디렉터리를 컨테이너에 마운트하려면
--container-mount-host-path
플래그를 사용합니다. 다음 예시에서는/logs
의 컨테이너에 읽기/쓰기 모드로 호스트 디렉터리/tmp
를 마운트합니다.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
를 지정합니다.컨테이너의 호스트 디렉터리 마운트를 업데이트하려면
--container-mount-host-path
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다. 지정된 마운트 경로를 사용하는 볼륨 마운트를 삭제하려면--remove-container-mounts
플래그를 사용합니다. 다음 예시에서는mount-path=/logs
를 사용하는 호스트 경로 마운트를 삭제합니다.gcloud compute instances update-container busybox-vm \ --remove-container-mounts /logs
지정된 마운트 경로가 존재하지 않으면 자동으로 무시됩니다.
tmpfs 파일 시스템을 데이터 볼륨으로 마운트
비어 있는 tmpfs 파일 시스템을 컨테이너에 마운트할 수 있습니다.
Console
gcloud
비어 있는
tmpfs
파일 시스템을 컨테이너에 마운트하려면--container-mount-tmpfs
플래그를 사용합니다. 다음 예시에서는/cache
의 컨테이너에 읽기/쓰기 모드로tmpfs
파일 시스템을 마운트합니다.gcloud compute instances create-with-container busybox-vm \ --container-image docker.io/busybox:1.27 \ --container-mount-tmpfs mount-path=/cache
컨테이너의
tmpfs
마운트를 업데이트하려면--container-mount-tmpfs
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다. 업데이트 시 지정된 마운트 경로를 사용하는tmpfs
마운트를 삭제하려면--remove-container-mounts
플래그를 사용합니다. 다음 예시에서는mount-path=/cache
를 사용하는tmpfs
마운트를 삭제합니다.gcloud compute instances update-container busybox-vm \ --remove-container-mounts /cache
지정된 마운트 경로가 존재하지 않으면 자동으로 무시됩니다.
영구 디스크를 데이터 볼륨으로 마운트
컨테이너 최적화 OS 69 이상을 사용하는 경우 호스트 VM의 영구 디스크를 컨테이너로 마운트할 수 있습니다.
기본 요건
Console
gcloud
영구 디스크를 컨테이너에 마운트하려면
--container-mount-disk
플래그가 지정된gcloud compute instances create-with-container
명령어 또는gcloud compute instances update-container
명령어를 사용합니다.다음 예시에서는
/disks/data-disk
및/disks/scratch-disk
마운트 경로의 컨테이너에my-data-disk
및my-scratch-disk
라는 두 개의 디스크를 마운트합니다.gcloud 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
가 지정되지 않았으므로 해당 디스크는 기본적으로 읽기/쓰기 모드로 컨테이너에 마운트됩니다.연결된 추가 디스크를 마운트하거나 기존 디스크 마운트를 수정하려면
--container-mount-disk
플래그가 지정된gcloud compute instances update-container
명령어를 사용합니다.지정된 마운트 경로를 사용하는 디스크 마운트를 삭제하려면
--remove-container-mounts
플래그를 사용합니다. 다음 예시에서는my-data-disk
의 마운트 모드를 읽기/쓰기로 변경하고mount-path="/disks/scratch-disk"
를 사용하는 디스크 마운트를 삭제합니다.gcloud 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에 매핑됩니다. Compute Engine은 포트 게시(
-p
) 플래그를 지원하지 않으며, 사용자가 매핑 작동을 위해 이를 지정할 필요가 없습니다.컨테이너의 포트를 게시하려면 호스트 VM 인스턴스의 포트에 액세스할 수 있도록 방화벽 규칙을 구성합니다. 방화벽 규칙에 따라 컨테이너의 해당 포트에 자동으로 액세스할 수 있습니다.
예: NGINX 컨테이너에 대해 포트 80 게시
다음 예시는 NGINX 컨테이너로 VM 인스턴스를 만들고 컨테이너 포트 80에 대한 트래픽을 허용하는 방법을 보여줍니다.
다음 단계
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2024-11-21(UTC)
-