decochのブログ

フリーランスのiOSエンジニア decoch のブログです

GCPのローカル環境をDockerを使って効率化しよう

最近 Google Cloud Platform を上のサービスを開発する機会に恵まれ、Datastore、BigtableやPub/SubなどGCPクラウドサービスを利用する機会が増えてきました。

decoch.hatenablog.com

以前こちらの記事で起動の自動化をしたのですが、 インストールするのが面倒だったり、非エンジニアの人が開発をするようになり、 設定方法に関する質問を受ける機会が多くなってしまったので、Dockerfileを用意してコマンド1つで開発環境を作れるように改善してみました。

今回はその設定方法を書かせてもらいます。

ベースとなるイメージの選択

前提として今回は gcloud のうち Datastore のエミュレーターの設定をおこないます!

まずベースとするDockerイメージを選択します。 今回はGoogleが公式で提供しているものがあるのでこちらを採用します。

hub.docker.com

これで gcloud を動かす環境を作ることができます。

起動設定

イメージの選択はできたので、次はコマンドを叩けば一発で起動できるように起動用のシェルを書いていきましょう!

プロジェクトのIDと起動するPORTはかぶらないようにしたいので、環境変数で変更できるようにします。

#!/usr/bin/env bash

gcloud config set project ${DATASTORE_PROJECT_ID}

gcloud beta emulators datastore start \
  --data-dir=/opt/data \
  --host-port=${DATASTORE_LISTEN_ADDRESS} \
  ${options}

start という名前で保存します。

次に起動用シェルを実行ためのDockerファイルを作成します。

FROM google/cloud-sdk:alpine

RUN apk add --update --no-cache openjdk8-jre &&\
gcloud components install cloud-datastore-emulator beta --quiet

VOLUME /opt/data

COPY start .

ENTRYPOINT ["./start"]

起動設定

最後にコマンドで簡単に起動をできるように docker-compose の設定をしていきましょう!

docker-compose にしておけば、今後RedisやMySQLいった他のミドルウェアが増えてもこちらで一元管理することができます。

version: "3.6"

services:
  datastore:
    container_name: datastore
    build:
      context: ./datastore
      dockerfile: Dockerfile
    environment:
      - DATASTORE_PROJECT_ID=dummy
      - DATASTORE_LISTEN_ADDRESS=0.0.0.0:8081
    ports:
      - "8081:8081"

以上で設定が完了です。

最終的なディレクトリ構成はこのような形になりました。

project
   ├── datastore
   │   ├── Dockerfile
   │   └── start
   └── docker-compose.yml

起動確認

実際にターミナルから実行をしてみましょう

docker-compose up -d

起動を確認してみます。

$ curl 0.0.0.0:8081
Ok

Okと返ってくれば起動できています。 これでDockerを使ってGCPエミュレーターを起動できました!!

実際にこの設定で私のチームで運用をしていますが、Dockerで管理することによりコマンドで簡単に起動ができるようになりました。 特に非エンジニアの人はREADMEを書いても設定をするのが難しいのでDockerにすることでみんな環境の構築が楽になりました。 GCPで開発をしていて、ローカル環境を用意したいときはDockerでの管理を検討してみると良いと思います。

まとめ