Cloud Datastoreのローカル環境をDockerで構築する
Cloud Runで動かすアプリを作る際にデータの永続化がしたかったので、Cloud Datastoreを使うことにした。
CloudSQLという手も検討したが、Cloud Datastoreには無料枠があるのでこちらを利用することに。
Cloud Datastoreエミュレータを使うとローカルでもCloud Datastoreが使えるとのことだったので、Dockerで環境を作ることにした。
Cloud Datastoreエミュレータ
- 専用のディレクトリを作成
mkdir -p docker/gcloud
- 起動用シェルスクリプト(docker/gcloud/start.sh)を追加
#!/bin/sh
gcloud config set project ${DATASTORE_PROJECT_ID}
gcloud beta emulators datastore start \
--data-dir=/opt/data \
--host-port=${DATASTORE_LISTEN_ADDRESS} \
${options}
- 実行権限を付与
chmod +x docker/gcloud/start.sh
- Dockerfileを作成
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.sh .
ENTRYPOINT ["./start.sh"]
- docker-compose.ymlを設定
version: "3"
services:
gcloud:
build:
context: ./docker/gcloud
dockerfile: Dockerfile
tty: true
environment:
DATASTORE_PROJECT_ID: app
DATASTORE_LISTEN_ADDRESS: 0.0.0.0:8081
ports:
- "8081:8081"
- ビルドと起動
docker-compose build
docker-compose up
これで http://localhost:8081 でCloudDatastoreエミュレータが動くようになった。
google-cloud-gui
Datastoreの内容をGUIで確認できるgoogle-cloud-guiも合わせて設定する。
- 専用のディレクトリを作成
mkdir -p docker/gcloud_gui
- package.jsonを追加
// docker/gcloud_gui/package.json
{
"name": "gcloud_gui",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"google-cloud-gui": "^0.2.2"
}
}
- yarn.lockを追加
touch docker/gcloud_gui/yarn.lock
- Dockerfileを作成
FROM node:12.14-alpine
WORKDIR /app
COPY package.json yarn.lock /app/
RUN yarn install
COPY google-cloud-gui-db.json /root/.google-cloud-gui-db.json
CMD [ "yarn", "run", "google-cloud-gui", "--skip-browser" ]
- 設定ファイルを追加
// docker/gcloud_gui/google-cloud-gui-db.json
{
"projects": [
{
"service": "datastore",
"projectId": "app",
"apiEndpoint": "http://gcloud:8081",
"id": "default"
}
]
}
- docker-compose.ymlを設定
version: "3"
services:
gcloud_gui:
build:
context: ./docker/gcloud_gui
dockerfile: Dockerfile
ports:
- "8082:8000"
depends_on:
- gcloud
logging:
driver: none
issueに挙がっている「Can't set headers after they are sent · Issue #7」がログに出ていたので、環境変数を正しく設定したものの変化がなかったのでログを非表示にした。
データを閲覧すること自体は問題なくできているのでひとまずは良しとする。
- ビルドと起動
docker-compose build
docker-compose up
これで http://localhost:8082 でgoogle-cloud-guiが動くようになった。