Cloud Spanner 模拟器 - docker 初始化
Cloud Spanner Emulator - docker initialization
我正在尝试设置一个 docker 容器来启动 cloud spanner 并对其进行初始化。
使用 google 提供的官方 docker 图片:gcr.io/cloud-spanner-emulator/emulator
我希望在启动时自动初始化扳手。
我对 docker 文件进行了各种尝试,总结一下:
FROM gcr.io/cloud-spanner-emulator/emulator
RUN some gcloud command after to initialize local spanner db
但是由于缺少有关此映像如何工作的信息,因此很难找到是否有可能在每次容器启动时对其进行初始化。
我再说一遍,我需要在安装容器时自动 运行。它将构建管道。
有没有办法使用提供的 docker 图片来做到这一点?或者我应该创建自己的 docker 文件来通过 gcloud cli 安装模拟器吗?
如果我没理解错的话,您希望在 dockerfile 中启动 Spanner 模拟器。
您可以创建自己的 dockerfile 来构建模拟器。
请利用这些docker commands:
docker pull gcr.io/cloud-spanner-emulator/emulator
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
启动扳手模拟器。
编辑:
经过进一步澄清,目前正在尝试的似乎不是官方 Docker 图片“gcr.io/cloud-spanner-emulator/emulator”的可用功能。
没有文档说明如何将官方 Spanner 模拟器 Docker 图像用于 运行 初始化脚本,GCP Documentation nor the Spanner emulator README 也没有。例如,运行在启动时使用 ning gcloud 命令创建一个 spanner 实例,上传一个 DDL 文件并使用该文件添加一个数据库。
OP 在评论中确定的解决方法,似乎是目前最好的解决方案。
这是一个 docker 文件示例,它允许启动 docker 模拟器并使用一些自定义 gcloud 命令进行初始化
FROM google/cloud-sdk:slim
RUN apt-get install -y google-cloud-sdk google-cloud-sdk-spanner-emulator
COPY ./start_spanner.bash start_spanner.bash
COPY ./schema.ddl schema.ddl
CMD ./start_spanner.bash
这是文件 start_spanner.bash
.
的示例内容
- 有关
set -m
的详细信息,请参阅 https://docs.docker.com/config/containers/multi-service_container/。
- 请参阅 https://cloud.google.com/spanner/docs/emulator 了解如何结合使用 gcloud 和模拟器的信息
#!/bin/bash
set -m
gcloud beta emulators spanner start --host-port=0.0.0.0:9010 &
# configure gcloud cli to connect to emulator
gcloud config set auth/disable_credentials true
gcloud config set project someproject
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
# create spanner instance
gcloud spanner instances create someinstance \
--config=emulator-config \
--description="Test Instance" \
--nodes=1
# create spanner database with the given schema
gcloud spanner databases create somedb \
--instance=someinstance \
--ddl-file=schema.ddl
fg %1
并且文件 schema.ddl
只是您的扳手 ddl 运行 根据扳手的文档在模拟器中创建表。
我正在尝试设置一个 docker 容器来启动 cloud spanner 并对其进行初始化。
使用 google 提供的官方 docker 图片:gcr.io/cloud-spanner-emulator/emulator
我希望在启动时自动初始化扳手。
我对 docker 文件进行了各种尝试,总结一下:
FROM gcr.io/cloud-spanner-emulator/emulator
RUN some gcloud command after to initialize local spanner db
但是由于缺少有关此映像如何工作的信息,因此很难找到是否有可能在每次容器启动时对其进行初始化。
我再说一遍,我需要在安装容器时自动 运行。它将构建管道。
有没有办法使用提供的 docker 图片来做到这一点?或者我应该创建自己的 docker 文件来通过 gcloud cli 安装模拟器吗?
如果我没理解错的话,您希望在 dockerfile 中启动 Spanner 模拟器。
您可以创建自己的 dockerfile 来构建模拟器。
请利用这些docker commands:
docker pull gcr.io/cloud-spanner-emulator/emulator
docker run -p 9010:9010 -p 9020:9020 gcr.io/cloud-spanner-emulator/emulator
启动扳手模拟器。
编辑:
经过进一步澄清,目前正在尝试的似乎不是官方 Docker 图片“gcr.io/cloud-spanner-emulator/emulator”的可用功能。
没有文档说明如何将官方 Spanner 模拟器 Docker 图像用于 运行 初始化脚本,GCP Documentation nor the Spanner emulator README 也没有。例如,运行在启动时使用 ning gcloud 命令创建一个 spanner 实例,上传一个 DDL 文件并使用该文件添加一个数据库。
OP 在评论中确定的解决方法,似乎是目前最好的解决方案。
这是一个 docker 文件示例,它允许启动 docker 模拟器并使用一些自定义 gcloud 命令进行初始化
FROM google/cloud-sdk:slim
RUN apt-get install -y google-cloud-sdk google-cloud-sdk-spanner-emulator
COPY ./start_spanner.bash start_spanner.bash
COPY ./schema.ddl schema.ddl
CMD ./start_spanner.bash
这是文件 start_spanner.bash
.
- 有关
set -m
的详细信息,请参阅 https://docs.docker.com/config/containers/multi-service_container/。 - 请参阅 https://cloud.google.com/spanner/docs/emulator 了解如何结合使用 gcloud 和模拟器的信息
#!/bin/bash
set -m
gcloud beta emulators spanner start --host-port=0.0.0.0:9010 &
# configure gcloud cli to connect to emulator
gcloud config set auth/disable_credentials true
gcloud config set project someproject
gcloud config set api_endpoint_overrides/spanner http://localhost:9020/
# create spanner instance
gcloud spanner instances create someinstance \
--config=emulator-config \
--description="Test Instance" \
--nodes=1
# create spanner database with the given schema
gcloud spanner databases create somedb \
--instance=someinstance \
--ddl-file=schema.ddl
fg %1
并且文件 schema.ddl
只是您的扳手 ddl 运行 根据扳手的文档在模拟器中创建表。