1. Qiita
  2. Items
  3. docker

プログラマに贈る、これからDockerをはじめるならGoogle Cloud Platformをお勧めする3つの理由

  • 45
    Like
  • 0
    Comment

こんにちは。
「プログラマのためのDocker教科書」のあさです。
この記事は、Docker2 Advent Calendar 2016の12/6のエントリーです。

これからDockerを始めようかな~と考えているプログラマのみなさんには、パブリッククラウドを使うのがいいかなと思っています。そんななかでもGoogle Cloud Platformをお勧めしています。

ご存知の方もいるかもですが、私はAWSの書籍も執筆しており、かつプライベートは、SurfacePro4ユーザー/WindowsPhoneコレクター、IDEはVisual Studio、エディタはVS Code、オフィスソフトはOffice365、資料公開はdocs.com、好きな言語はC#、自称XAMLer・・・・と完全にアレです。

そんな私が、プログラマがこれからDockerをはじめるなら、(AWSやAzureではなく)Google Cloud Platformをお勧めするのはなぜなのか・・・というそんなの知るかよどうでもいいわ、ということをざっとまとめたいと思います。

Google Cloud Platformとは?

Google Cloud Platformは、Googleが自社サービス(Youtubeや検索エンジンなど)で使っている基盤をもとにしたパブリッククラウドサービスです。

ざっくり言ってしまうと、Youtubeを動かすための世界規模で整備された基盤を、一般利用者でも利用できるようにしたクラウドサービスということになります。

PaaSであるApp Engineの印象が強く、ゲームのバックエンドや機械学習・ビックデータの分析なんかの利用が適してるんだろうなという感じだったのですが、、、、、、

Googleのすべての自社サービスはコンテナ基盤で動いており、週に20億のコンテナが生成されているとのこと。コンテナ基盤はオープンソースのKubernetesでオーケストレーションされており、極めて高い移植性と拡張性を持っているらしい!

しかも、GoogleはYoutubeや検索エンジンを動かすための広域ネットワークを持っていて、そこにはSDN技術が容赦なく使われています。特に、G-Scaleと呼ばれるGoogleのデータセンター間を結ぶ幹線網にはOpenFlowが使われているではないですか。と。

おや、これは、つまり。

DockerコンテナとOpenFlowの世界最大の稼働実績があるプラットフォームじゃーーーん!!

というわけで、今まじめに勉強をがんばっています。

Google Cloud Platformが提供するDockerコンテナ関連サービス

詳しくは、公式サイトを見てください。なんですが、ざっと雑にご紹介です。

Google Conpute Engine

GCPの仮想マシンを提供するIaaSです。AWSでいうところのEC2のようなものです。UbuntuなりCentOSなりで仮想マシンを起動して、手作りによる温かみのあるDocker実行環境をつくることができます。

Google Container Engine

GCPのコンテナ実行環境のフルマネージドサービスです。AWSでいうところの、ECSのようなものです。
GKEと略されるのですが、ベースはKubernetesです。Kubernetesマネージャーやetcdなど、、面倒なKubernetesの環境をいい感じで作ってくれるサービス、と理解していただけるといいかと思います。基本的なものはGUIでできますが、Kubectlなどのコマンドがそのまま使えますので、いろいろがんばれます。

Google Container Registry

Dockerイメージをプライベートな環境で管理できるレジストリサービスです。イメージのデータは、GCPのストレージサービス(AWSでいうところの、S3的なもの)であるCloud Storageに保存されます。
で、、、イメージはGoogleのデータセンターでキャッシュされ、Andromedaと呼ばれているGCPのネットワークを使って、世界中のGoogle Container Engineや Google Compute Engineなどにデプロイできます。

それでは、具体的にお勧めする理由を3つご紹介します。

その1:ブラウザからSSHができる、Cloud Shellがとても便利

パブリッククラウドのアカウントを登録すると、すぐにボタンクリックだけで仮想マシンやコンテナークラスタが構築できる、というところは他のパブリッククラウドも同じなのですが、クラウドを操作するためのクライアント端末にSDKやCLIを入れたり、仮想マシンにSSHするための環境を設定したりしなければいけません。あと、社内ネットワークなどセキュアな環境からのアクセスだとプロキシを経由など、、、いろいろ心が折れます。

Google Cloud Platformは、Cloud Shellと呼ばれているブラウザからGCPのサービスを操作できる専用のツール(オペレーション用のVM)が用意されています。このCloud Shellを使うとCloud SDKを使ってCloud Storageのデータを管理したり、App Engineのアプリケーションを実行やデプロイができます。もちろん、Docker関連コマンドやツール群もあらかじめ用意されています。

ユーザーに割り当てられる5GBのストレージ容量を使用して、ファイルを保持することも可能です。このCloud Shellは2016年8月にGAし、利用料金は無料です。

と、言葉で説明しても、たぶん伝わらないので、デモをします。

次の動画はCloud Shell上で、docker-macheコマンドを使ってGoogle Compute Engineの仮想マシンを立ち上げて、Dockerの実行環境作成する例です。

Google Cloud Shell Demo

なんとまぁ・・・・大変便利です。
ブラウザからコマンドを実行でき、Dockerが動く仮想マシンを3分足らずで起動できてしまったのが、お分かりいただけたでしょうか?

Cloud Shellには、Docker関連コマンドだけでなく、GCPを使うためのgcloudコマンドやKubernetesのオペレーションのためのコマンドやSDKなどもあらかじめ用意されています。また、ファイルのアップロード/ダウンロードや、ファイル修正用のGUIエディタなどもあって、どの端末でもブラウザさえあればGCPを操作できるのはうれしい感じです。

その2:早い

Googleは自社サービスを提供するために最適化された基盤を独自で持っています。「The Datacenter as a Computer」というコンセプトのもと、世界中のありとあらゆるユーザに使ってもらうシステムを提供することを目指しているようです。

Youtubeやサーチエンジンのサービスをグローバルで提供するため、通信事業者か?っていうほどの独自ネットワークを持っています。データセンターに関しても、リソースを最適化して利用できるようさまざまな工夫がされているようです。

そんなわけで、とにかく早いです。VMの起動も、ネットワーク越しのファイル転送も、コンテナの起動も、クラスタの構成も、早いです。サイズや構成にもよりますが、VMの起動だと2~3分、Dockerクラスタ構築でも数分もあれば環境が出来上がります。

その3:Kubernetesによるポータビリティの高さ

Dockerは、OSやネットワークレイヤの構成情報もふくめたDockerイメージによる管理ができます。このDockerイメージは、Dockerコンテナのもとになるものです。テスト済みの品質の安定したDockerイメージを共有リポジトリで一元管理することで、異なる実行環境であっても、同じように動くというのが、Dockerの移植性の高さを実現しています。

しかしながら、コンテナを実行環境で動かすためのオーケストレーションは、いろいろ工夫が必要です。オンプレ環境でこのオーケストレーションを行うには、オーケストレーションツールを導入し、それらの運用管理が必要になります。

Kubernetesは、オープンソースです。いざ、Googleが突然「ごめん、コンテナ辞めるわwww」と言い出したとしても、他社クラウドやオンプレ環境にKubernetesの実行環境を用意すれば、ある程度 は移植可能です。

まとめ

上記の3つの理由から、アプリケーションの実行環境として、プログラマが自ら主導してコンテナ基盤を整備したい!という場合は、Google Cloud Platformをうまく活用すると幸せになることが多いと感じています。

なので、これから真っ白な状態でDocker始めたい(というか、コンテナを中心にしたDevOpsを実現したい!いやNoOpsだ!!)という方には、ぜひお勧めです。

ただし!!!

すべてのシステムがGoogle Cloud Platformが適しているか?と言われれば、現時点ではNoだと考えています。

たとえば、過去のオンプレ資産を、テクノロジ/アーキテクチャだけでなく文化もふくめて引き継がなければいけない場合は、AWSが圧倒的に有利です。

また、日本のSIで多く見られる特有の商習慣を考えると、エンタープライズシステムで稼働実績が多いAWS、またはエンタープライズシステムにおけるサポートを熟知したMicrosoft/Azureが良いかなと思います。

流れのはやいクラウド技術に関しては、実際に現場の開発者のみなさんが手を動かしてみるのが一番だと思ってます。

以下は、Google Cloud PlatformでDockerを動かすためのハンズオン資料です。
1時間半ぐらいでできると思いますので、ご興味ある方は、ぜひ~。

Webデザイナー/プログラマのためのDocker超入門

というわけで、みなさまよいDockerライフを。

おわり