メニュー

Managed VMs with Docker

エンジニアブログ

記事投稿 | 2014.11.05

こんにちは。@sinmetal です

昨日のGCP Liveより、Managed VMsのDockerがだれでも触れるようになったようです。

Document

Managed VMsがどんなものなのかは以下を見てください

GAE Managed VMs誕生までの歴史を振り返る

動かし方

Docker install

まずはDockerをinstallします。
https://cloud.google.com/appengine/docs/python/managed-vms/#install-docker

gcloud sdk install

次にgcloud sdkをinstallします。
https://cloud.google.com/sdk/

sample project download

今回はCustom RuntimeのサンプルであるnginxをMVMsで動かしてみました。

以下からcheck outします。
https://github.com/GoogleCloudPlatform/appengine-nginx-hello

boot2docker 起動

#!bash
	$ boot2docker up
	Waiting for VM and Docker daemon to start...
	...........................
	Started.
	
	To connect the Docker client to the Docker daemon, please set:
	    export DOCKER_HOST=tcp://192.168.59.103:2375
	

Consoleに従いexport

#!bash
	$ export DOCKER_HOST=tcp://192.168.59.103:2375
	

MVMsをLocalで動かす

#!bash
	$ gcloud preview app run appengine-nginx-hello
	Module [default] found in file [/Users/sinmetal/workspace/appengine-nginx-hello/app.yaml]
	INFO: Looking for the Dockerfile in /Users/sinmetal/workspace/appengine-nginx-hello
	INFO: Using Dockerfile found in /Users/sinmetal/workspace/appengine-nginx-hello
	INFO: Skipping SDK update check.
	INFO: Starting API server at: http://localhost:64798
	INFO: Health checks starting for instance 0.
	INFO: Building image sandbox4sinmetal-tg.default.1...
	INFO: Starting module "default" running at: http://localhost:8080
	INFO: Starting admin server at: http://localhost:8000
	INFO: Image sandbox4sinmetal-tg.default.1 built, id = 1ef40a5ed46c
	INFO: Creating container...
	INFO: Container dcaac6cac83c496f34531b32d240a10c3256786e36ea3076a3f249357e7f152f created.
	INFO: default: "GET /_ah/start HTTP/1.1" 200 2
	INFO: default: "GET /_ah/health?IsLastSuccessful=no HTTP/1.1" 200 2
	

http://localhost:8080

nginxが動いていることを確認

enter image description here

Deploy

#!bash
	$ gcloud --project YOUR_PROJECT_NAME preview app deploy appengine-nginx-hello
	

AppEngine Versions Check

Developers ConsoleのAppEngine Versionを確認してみましょう。
INSTANCESに(google-managed)と書いてあるものがMVMsのinstanceです。
enter image description here

Compute Engine VM instances Check

Developers ConsoleのCompute Engine VM instancesを確認してみましょう

enter image description here

Delete!

試し終わったら、忘れないようにAppEngine Versionsから、該当のVersionを消してください。
Compute Engine VM instancesからも消えていることを確認して下さい。
MVMsはAppEngine instance hourではなく、Compute Engine instanceのPriceに従うので、アクセスが0でも立ち上げてる間は課金が発生します。

所感

MVMsは怠惰なAppEngineUserがComputeEngineを使うのに、非常に便利な機能だが、今までAppEngineを使ってきたUserにとってのメリット・デメリットがある。

メリット

制限が無い自由な世界

Local Fileも使えるし、binary toolだって使える。imagemagic, Redisなどを入れることもできる。

Custom Runtime

ここまで来ると、AppEngineじゃなくね!?感すらもあるCustom Runtime。
今回試したnginxもそうだけど、TaskQueueやMemcacheなどのRPC仕様は公開されてないので、AppEngineのSDKが無いと叩けないという点はあるけど、特殊なことをさせたいModuleを作るには便利だろう。

デメリット

BillingがComputeEngine

autoscale設定でもmin instanceの最小値が1なので、アクセスが0でも課金が発生し続けてしまう。
Versionごとにinstanceが立ち上がったままになるので、過去Versionを雑に放置しておくことができなくなりそうだ。

最後に

k8sを利用するGKEが出ましたが、MVMsのinstanceの中にもk8sはいます。
そろそろ、使う側からすると、PaaS,IaaSと呼ばれていた垣根が無くなってきているのかもしれませんね。
IaaS上に生で自分で作るも良し、一番下はIaaSだが、その上に構成を作ってくれてるやつを使うも良し、そして、どこまで作ってくれてるかのスタート地点を選べるって感じですね。

#!bash
	shingo_ishimura_topgate_co_jp@gae-default-gbdocker2-8nxi:~$ sudo docker ps
	CONTAINER ID        IMAGE                                          COMMAND                CREATED             STATU
	S              PORTS                    NAMES
	06540d608720        sandbox4sinmetal-tg.default.gbdocker2:latest   "/home/vmagent/jetty   3 minutes ago       Up 3 
	minutes        0.0.0.0:8080->8080/tcp   stoic_euclid                                         
	ff97de497da4        google/docker-registry:latest                  "./run.sh"             4 minutes ago       Up 4 
	minutes                                 k8s_docker-registry.150cc442_1.http_01a42cd2         
	16b104d8ff85        google/cadvisor:latest                         "/usr/bin/cadvisor"    4 minutes ago       Up 4 
	minutes                                 k8s_cadvisor.417cd83c_cadvisor-agent.file_514066ea   
	64ca69d6b96b        kubernetes/pause:latest                        "/pause"               4 minutes ago       Up 4 
	minutes        0.0.0.0:4194->8080/tcp   k8s_net.f72d85c8_cadvisor-agent.file_0a0a306f        
	e118d364ace5        kubernetes/pause:latest                        "/pause"               4 minutes ago       Up 4 
	minutes        0.0.0.0:5000->5000/tcp   k8s_net.6bc9867a_1.http_40dd0523                     
	f241a910da62        google/appengine-fluentd-logger:latest         "/usr/lib/fluent/rub   4 minutes ago       Up 4 
	minutes                                 prickly_engelbart                                    
	shingo_ishimura_topgate_co_jp@gae-default-gbdocker2-8nxi:~$
	

PAGE TOP