基于 Linux 的模拟器(预览版)
下一代 Azure Cosmos DB 模拟器完全基于 Linux,且可用作 Docker 容器。 它支持在各种处理器和操作系统上运行。
先决条件
安装
使用 docker pull
获取 Docker 容器映像。 该容器映像将作为 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
发布到 Microsoft 工件注册表。
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
正在运行
若要运行容器,请使用 docker run
。 之后,使用 docker ps
来验证容器是否正常运行。
docker run --detach --publish 8081:8081 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1bb8cf53f8a mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview "/bin/bash -c /home/…" 5 seconds ago Up 5 seconds 0.0.0.0:1234->1234/tcp, :::1234->1234/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp <container-name>
注意
该模拟器由两个部分组成:
- 数据资源管理器 - 在模拟器中以交互方式浏览数据。 默认情况下,此部分在
1234
端口上运行 - Azure Cosmos DB 模拟器 - Azure Cosmos DB 数据库服务的本地版本。 默认情况下,此部分在
8081
端口上运行。
模拟器网关终结点通常在地址 http://localhost:8081 的端口 8081
上。 若要导航到数据资源管理器,请在 Web 浏览器中使用地址 http://localhost:1234。 数据资源管理器可能需要等待几秒钟才能可用。 网关终结点则通常立即可用。
重要
.NET 和 Java SDK 在模拟器中不支持 HTTP 模式。 由于此版本的模拟器默认以 HTTP 开头,因此在启动容器时需要显式启用 HTTPS(见下文)。 对于 Java SDK,还需要安装证书。
docker run --detach --publish 8081:8081 --publish 1234:1234 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview --protocol https
Docker 命令
下表总结了可用于配置模拟器的 Docker 命令。 此表详细列出了每个命令的相应参数、环境变量、允许的值、默认设置和说明。
要求 | Arg | Env | 允许的值 | 默认值 | 说明 |
---|---|---|---|---|---|
将设置从容器打印到 stdout | --help ,-h |
空值 | 不可用 | 空值 | 显示有关可用配置的信息 |
设置 Cosmos 终结点的端口 | --port [INT] |
PORT | INT | 8081 | 容器上的 Cosmos 终结点的端口。 你仍需要发布此端口(例如 -p 8081:8081 )。 |
指定 Cosmos 终结点使用的协议 | --protocol |
PROTOCOL | https ,http ,https-insecure |
http |
容器上的 Cosmos 终结点的协议。 |
启用数据资源管理器 | --enable-explorer |
ENABLE_EXPLORER | true ,false |
true |
启用在同一容器上运行 Cosmos 数据资源管理器的功能。 |
设置数据资源管理器使用的端口 | --explorer-port |
EXPLORER_PORT | INT | 1234 | 容器上的 Cosmos 数据资源管理器的端口。 你仍需要发布此端口(例如 -p 1234:1234 )。 |
用户应能够指定资源管理器使用的协议,否则默认为 Cosmos 终结点正在使用的协议 | --explorer-protocol |
EXPLORER_PROTOCOL | https ,http ,https-insecure |
<the value of --protocol> |
容器上的 Cosmos 数据资源管理器的协议。 默认为 Cosmos 终结点上的协议设置。 |
通过文件指定密钥 | --key-file [PATH] |
KEY_FILE | PATH | <default secret> |
使用文件中指定的密钥替代默认密钥。 你需要将此文件装载到容器中(例如,如果 KEY_FILE=/mykey,则需要将如下所示的选项添加到 Docker 运行:--mount type=bind,source=./myKey,target=/myKey ) |
设置数据路径 | --data-path [PATH] |
DATA_PATH | PATH | /data |
指定数据的目录。 经常与 docker run --mount 选项一起使用(例如,如果 DATA_PATH=/usr/cosmos/data,则可将如下所示的选项添加到 Docker 运行:--mount type=bind,source=./.local/data,target=/usr/cosmos/data ) |
指定要用于 https 的证书路径 | --cert-path [PATH] |
CERT_PATH | PATH | <default cert> |
指定用于保护流量的证书的路径。 你需要将此文件装载到容器中(例如,如果 CERT_PATH=/mycert.pfx,则需要将如下所示的选项添加到 Docker 运行:--mount type=bind,source=./mycert.pfx,target=/mycert.pfx ) |
指定要用于 https 的证书机密 | 空值 | CERT_SECRET | string | <default secret> |
在 CERT_PATH 上指定的证书的机密。 |
设置日志级别 | --log-level [LEVEL] |
LOG_LEVEL | quiet ,error ,warn ,info ,debug ,trace |
info |
模拟器和数据资源管理器发出的日志的详细程度。 |
启用发送到 Microsoft 的诊断信息 | --enable-telemetry |
ENABLE_TELEMETRY | true ,false |
true |
启用将日志发送到 Microsoft 的功能,以帮助我们改进模拟器。 |
功能支持
此模拟器处于积极开发阶段,现为预览版。 因此,并非所有 Azure Cosmos DB 功能都受支持。 而且,某些功能将来也无法获得支持。 下表包括各种功能的状态及其支持级别。
功能 | 支持 |
---|---|
Batch API | ✅ 受支持 |
批量 API | ✅ 受支持 |
更改源 | ⚠️ 尚未实现 |
使用 utf 数据创建和读取文档 | ✅ 受支持 |
创建集合 | ✅ 受支持 |
创建集合两次冲突 | ✅ 受支持 |
使用自定义索引策略创建集合 | ⚠️ 尚未实现 |
创建具有 ttl 过期的集合 | ⚠️ 尚未实现 |
创建数据库 | ✅ 受支持 |
创建数据库两次冲突 | ✅ 受支持 |
创建文档 | ✅ 受支持 |
创建分区集合 | ⚠️ 尚未实现 |
删除集合 | ✅ 受支持 |
删除数据库 | ✅ 受支持 |
删除文档 | ✅ 受支持 |
获取和更改集合性能 | ⚠️ 尚未实现 |
插入大型文档 | ✅ 受支持 |
修补文档 | ⚠️ 尚未实现 |
并行查询已分区集合 | ⚠️ 尚未实现 |
使用聚合进行查询 | ⚠️ 尚未实现 |
使用 AND 筛选条件进行查询 | ⚠️ 尚未实现 |
使用 AND 筛选条件和投影进行查询 | ⚠️ 尚未实现 |
使用相等条件进行查询 | ✅ 受支持 |
使用 ID 相等条件进行查询 | ✅ 受支持 |
使用联接进行查询 | ⚠️ 尚未实现 |
使用排序条件进行查询 | ✅ 受支持 |
使用排序条件针对已分区集合进行查询 | ⚠️ 尚未实现 |
使用按数字排序的条件进行查询 | ✅ 受支持 |
使用按字符串排序的条件进行查询 | ⚠️ 尚未实现 |
使用分页进行查询 | ⚠️ 尚未实现 |
使用日期时间范围运算符进行查询 | ⚠️ 尚未实现 |
使用数字范围运算符进行查询 | ⚠️ 尚未实现 |
使用字符串范围运算符进行查询 | ⚠️ 尚未实现 |
使用单个联接进行查询 | ⚠️ 尚未实现 |
使用字符串、数学和数组运算符进行查询 | ⚠️ 尚未实现 |
使用子文档进行查询 | ⚠️ 尚未实现 |
使用两个联接进行查询 | ⚠️ 尚未实现 |
使用两个联接和筛选条件进行查询 | ⚠️ 尚未实现 |
读取集合 | ✅ 受支持 |
读取集合源 | ⚠️ 尚未实现 |
读取数据库 | ✅ 受支持 |
读取数据库源 | ⚠️ 尚未实现 |
读取文档 | ✅ 受支持 |
读取文档源 | ✅ 受支持 |
替换文档 | ✅ 受支持 |
请求单位 | ⚠️ 尚未实现 |
存储过程 | ❌ 未规划 |
触发器 | ❌ 未规划 |
UDF | ❌ 未规划 |
更新集合 | ⚠️ 尚未实现 |
更新文档 | ✅ 受支持 |
限制
除了尚不支持或未规划的功能外,以下列表还包括模拟器的当前限制。
- 适用于 Azure Cosmos DB 的 .NET SDK 不支持在模拟器中进行批量执行。
- .NET 和 Java SDK 在模拟器中不支持 HTTP 模式。
安装用于 Java SDK 的证书
在 HTTPS 模式下将适用于 Azure Cosmos DB 的 Java SDK 与此版本的模拟器配合使用时,必须将其证书安装到本地 Java 信任存储。
获取证书
在 bash
窗口中,运行以下命令:
# If the emulator was started with /AllowNetworkAccess, replace localhost with the actual IP address of it:
EMULATOR_HOST=localhost
EMULATOR_PORT=8081
EMULATOR_CERT_PATH=/tmp/cosmos_emulator.cert
openssl s_client -connect ${EMULATOR_HOST}:${EMULATOR_PORT} </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $EMULATOR_CERT_PATH
安装证书
导航到 cacerts
文件所在的 Java 安装目录(将下面的目录替换为正确的目录):
cd "C:/Program Files/Eclipse Adoptium/jdk-17.0.10.7-hotspot/bin"
导入证书(系统可能会要求输入密码,默认值为“changeit”):
keytool -cacerts -importcert -alias cosmos_emulator -file $EMULATOR_CERT_PATH
如果由于别名已存在而出现错误,请将其删除,然后再次运行上述命令:
keytool -cacerts -delete -alias cosmos_emulator
报告问题
如果在使用此版本的模拟器时遇到问题,请在 GitHub 存储库 (https://github.com/Azure/azure-cosmos-db-emulator-docker) 中开启一个问题,并使用标签 cosmosEmulatorVnextPreview
对其进行标记。