GCEでdocker-composeでウェブサービスを立ち上げる

GCE(Google Compute Engine)上でdocker-composeを使ってウェブサービスの環境を作成し、ブラウザからアクセスするまでをまとめました。

GCEのインスタンスを汚したくないため、ソースコードなどウェブサービスに必要なものは全てイメージ化・コンテナ化します。よってイメージはGCR(Google Container Registry)から取ってくるようにします。

この方法を取ると何がいいかと言うと、ローカルで作った環境がそのまま本番サーバ上に簡単に作成できるという点だと思います。

前提

  • Google Cloud Platformにプロジェクトがある
  • すでにdocker-composeで起動可能なプロジェクトがある
  • ホストPCはMacOS
  • ホストPCでgcloudコマンドが使える
  • pull可能なイメージがGCR上にある

GCEインスタンス

まずはGoogle Compute Engineのインスタンスを立ち上げます。

今回は費用を抑えるべく、小さなインスタンスを使います。また、OSはコンテナに最適化されたものを使用します。

マシンタイプ: f1-micro
ゾーン: us-central1-a
オペレーティングシステム: Container Optimized OS

これでインスタンスを作成します。ちなみにこの設定だと月々のインスタンス料金は約500円です。

インスタンスは15秒ほどで立ち上がります。

インスタンスが立ち上がったらにsshで入ります。

(ここから先のコマンドは全てGCE上での実行になります)

Docker

dockerは最初から入っています。

docker-compose

docker-composeをインストールします。

GCR認証

GCRからイメージを取得するようにします。

デフォルトだと権限がありませんよと言われてしまいます。

以下の手順で権限を取得します。

この時点で、以下のようなファイルが生成されます。

次のコマンドを実行してください。

ここでURLが表示されると思いますので、そのURLをブラウザで叩いて進んで行ってください。

するとこんな画面が出てきますので許可ボタンを押下します。

すると、認証コードが出てきますので、そのコードをターミナルに入力します。

これでGCR認証は完了です。

イメージをpull

GCRにアップされているイメージを下記コマンドで取得する

docker-compose修正

上記コマンドを実行すると、dockerイメージのリストが出てきます。必要なイメージのIDをコピーして、docker-compose.ymlの image に指定します。

この作業が結構面倒なので、どうにかして簡略化できたらいいなと思っています。

docker-compose up

DockerイメージのIDをdocker-compose.ymlに貼り付けたら準備完了です。

以下コマンドを実行してみましょう。

ブラウザでアクセス

ブラウザでGCPコンソースのGCEインスタンス一覧画面の 外部IP にアクセスしてみてください。

サイトに遷移できたら成功です。

ちなみに今回僕が構築したのはこのサイトです。

http://twinspector.nothing-behind.com/

docker-composeの構成はこんな感じです。

  • Django(python)
  • MySQL
  • Redis
  • Nginx

まだSSL設定してませんが今後やっていきたいと思います。