Managed VMs with Docker
- GCP入門編
- ビッグデータ
こんにちは。@sinmetal です
昨日のGCP Liveより、Managed VMsのDockerがだれでも触れるようになったようです。
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が動いていることを確認
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です。
Compute Engine VM instances Check
Developers ConsoleのCompute Engine VM instancesを確認してみましょう
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:~$