加入收藏 | 设为首页 | 会员中心 | 我要投稿 广州站长网 (https://www.020zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

在用于 Linux 的 Docker(预览版)上运行仿真器

发布时间:2022-12-14 13:33:54 所属栏目:Linux 来源:转载
导读: 本文内容
适用于:

NoSQL

MongoDB
为方便进行开发linux浏览器,Azure Cosmos DB Linux 仿真器提供了一个模拟 Azure Cosmos DB 服务的本地环境。 目前,Linux 模拟器仅支持 API for NoSQL

本文内容

适用于:

NoSQL

MongoDB

为方便进行开发linux浏览器,Azure Cosmos DB Linux 仿真器提供了一个模拟 Azure Cosmos DB 服务的本地环境。 目前,Linux 模拟器仅支持 API for NoSQL 和 MongoDB。 使用 Azure Cosmos DB 模拟器可在本地开发和测试应用程序,无需创建 Azure 订阅且不会产生任何费用。 如果对应用程序在 Azure Cosmos DB Linux 仿真器中的工作情况感到满意,可以转为在云中切换到使用 Azure Cosmos DB 帐户。 本文介绍了如何在 macOS 和 Linux 环境中安装和使用仿真器。

注意

Azure Cosmos DB Linux 模拟器目前处于预览模式,仅支持 API for NoSQL 和 MongoDB。 与 Windows 版本相比,在仿真器每秒处理的请求数方面,性能可能会略微降低。 物理分区的默认数量为 10,此默认数量直接影响可预配的容器数量。

不建议在生产环境中使用仿真器(预览版)。 对于更大的工作负载,请使用 Windows 仿真器。

模拟器如何工作?

Azure Cosmos DB Linux 仿真器提供对 Azure Cosmos DB 服务的高保真仿真。 模拟器支持与 Azure Cosmos DB 等效的功能。 功能包括创建数据、查询数据、预配和缩放容器,以及执行存储过程和触发器。 可以使用 Azure Cosmos DB Linux 仿真器来开发和测试应用程序。 还可以通过将 Azure Cosmos DB 连接终结点从仿真器更新到一个实时帐户,在全局规模将应用程序部署到 Azure。

使用仿真器时,依赖于 Azure 基础结构的功能(例如全局复制、读/写的个位数毫秒延迟,以及可调整的一致性级别)不适用。

Linux 仿真器和云服务之间的差异

由于 Azure Cosmos DB 仿真器提供一个在本地开发人员工作站上运行的模拟环境,因此该仿真器在功能上与云中的 Azure Cosmos DB 帐户之间存在一些差异:

在 macOS 上运行 Linux 仿真器

注意

仿真器仅支持 Macbook 与 Intel 处理器。

若要开始操作,请访问 Docker Hub 并安装 适用于 macOS 的 Docker Desktop。 使用以下步骤在 macOS 上运行仿真器:

检索本地计算机的 IP 地址。 如果直接模式设置是使用 Azure Cosmos DB SDK(.NET、Java)配置的,则需要此步骤。

ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"

从注册表中拉取 Docker 映像。

docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

运行具有以下配置的 Docker 映像:

docker run \
    --publish 8081:8081 \
    --publish 10250-10255:10250-10255 \
    --memory 3g --cpus=2.0 \
    --name=test-linux-emulator \
    --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \
    --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \
    --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \
    --interactive \
    --tty \
    mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

docker run \
    --publish 8081:8081 \
    --publish 10250-10255:10250-10255 \
    --name=test-linux-emulator-mongo \
    --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \
    --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \
    --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \
    --env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.0 \
    --interactive \
    --tty \
    mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb

安装证书

运行仿真器后,使用其他终端将本地计算机的 IP 地址加载到变量中。

ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"

接下来,下载仿真器的证书。

curl -k https://$ipaddr:8081/_explorer/emulator.pem > emulatorcert.crt

通过 UI 使用终结点

仿真器使用自签名证书来确保到其终结点的连接安全,并且需要手动信任。 使用以下步骤通过 UI 使用所需的 Web 浏览器来使用终结点:

请确保已下载仿真器自签名证书

curl -k https://$ipaddr:8081/_explorer/emulator.pem > emulatorcert.crt

在 Mac 上打开 Keychain Access 应用以导入仿真器证书。

选择“文件”和“导入项”,然后导入 emulatorcert.crt 。

将 emulatorcert.crt 加载到 KeyChain 后,双击 localhost 名称,将信任设置更改为“始终信任” 。

现可浏览到 :8081/_explorer/index.html 或 {your_local_ip}:8081/_explorer/index.html,并检索仿真器的连接字符串。

还可以选择对应用程序禁用 TLS/SSL 验证。 建议仅在开发用途中禁用验证,在生产环境中运行时不应这样做。

在 Linux OS 上运行 Linux 仿真器

若要开始操作,请使用 apt 包并安装最新版本的 Docker。

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

如果使用适用于 Linux 的 Windows 子系统 (WSL),请运行以下命令来获取 ifconfig:

sudo apt-get install net-tools

linux 浏览网页_linux浏览器_linux 浏览网站命令行

使用以下步骤在 Linux 上运行仿真器:

检索本地计算机的 IP 地址。 如果直接模式设置是使用 Azure Cosmos DB SDK(.NET、Java)配置的,则需要此步骤。

ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"

从注册表中拉取 Docker 映像。

docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

运行具有以下配置的 Docker 映像:

docker run \
    --publish 8081:8081 \
    --publish 10250-10255:10250-10255 \
    --memory 3g --cpus=2.0 \
    --name=test-linux-emulator \
    --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \
    --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \
    --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \
    --interactive \
    --tty \
    mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

docker run \
    --publish 8081:8081 \
    --publish 10250-10255:10250-10255 \
    --name=test-linux-emulator-mongo \
    --env AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 \
    --env AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true \
    --env AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr \
    --env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.0 \
    --interactive \
    --tty \
    mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb

运行仿真器后,使用其他终端将本地计算机的 IP 地址加载到变量中。

ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"

接下来,下载仿真器的证书。 或者,在仿真器终结点准备好接收来自其他应用程序的请求时,还可以使用下面下载自签名仿真器证书的终结点来发送信号。

curl -k https://$ipaddr:8081/_explorer/emulator.pem > ~/emulatorcert.crt

将 CRT 文件复制到你的 Linux 分发版中包含自定义证书的文件夹。 在 Debian 分发版中,它通常位于 /usr/local/share/ca-certificates/ 中。

cp ~/emulatorcert.crt /usr/local/share/ca-certificates/

更新 TLS/SSL 证书,这将更新 /etc/ssl/certs/ 文件夹。

update-ca-certificates

对于基于 Java 的应用程序,必须将证书导入到 Java 受信任存储。

keytool -keystore ~/cacerts -importcert -alias  emulator_cert -file ~/emulatorcert.crt
java -ea -Djavax.net.ssl.trustStore=~/cacerts -Djavax.net.ssl.trustStorePassword="changeit" $APPLICATION_ARGUMENTS

配置选项名称默认说明

端口:-p

目前,仿真器终结点仅需要端口 8081 和 10250-10255。

AZURE_COSMOS_EMULATOR_PARTITION_COUNT

10

控制物理分区的总数,而物理分区又控制在给定时间点可以创建和存在的容器数。 建议从小规模开始,以改进仿真器的启动时间,即 3。

内存:-m

对于内存,需要 3 GB 或更多。

核心:--cpus

确保分配足够的内存和 CPU 核心数。 建议至少四个核心。

AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE

false

此设置本身有助于在容器重启之间保存数据。

AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT

此设置为模拟器启用 API for MongoDB 终结点,并配置 MongoDB 服务器版本。 (有效的服务器版本值包括 3.2、3.6、4.0 和 4.2)

排查问题

本部分提供有关使用 Linux 仿真器时排查错误的提示。

连接问题我的应用无法连接到仿真器终结点(“无法建立 TLS/SSL 连接”)或无法启动数据资源管理器

对于在与 .NET Standard 2.1 或更高版本兼容的框架中运行的任何应用程序,我们可以使用 CosmosClientOptions.HttpClientFactory:

CosmosClientOptions cosmosClientOptions = new CosmosClientOptions()
{
    HttpClientFactory = () =>
    {
        HttpMessageHandler httpMessageHandler = new HttpClientHandler()

linux 浏览网站命令行_linux 浏览网页_linux浏览器

{ ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator }; return new HttpClient(httpMessageHandler); }, ConnectionMode = ConnectionMode.Gateway }; CosmosClient client = new CosmosClient(endpoint, authKey, cosmosClientOptions);

对于在与 .NET Standard 2.0 兼容的框架中运行的任何应用程序,我们可以使用 CosmosClientOptions.HttpClientFactory:

CosmosClientOptions cosmosClientOptions = new CosmosClientOptions()
{
    HttpClientFactory = () =>
    {
        HttpMessageHandler httpMessageHandler = new HttpClientHandler()
        {
            ServerCertificateCustomValidationCallback = (req, cert, chain, errors) => true
        };
        return new HttpClient(httpMessageHandler);
    },
    ConnectionMode = ConnectionMode.Gateway
};
CosmosClient client = new CosmosClient(endpoint, authKey, cosmosClientOptions);

我的 Node.js 应用正在报告自签名证书错误

如果尝试通过 localhost 以外的地址(例如容器 IP 地址)连接到仿真器,Node.js 将引发有关证书自签名的错误,即使已安装了证书也是如此。

可通过将环境变量 NODE_TLS_REJECT_UNAUTHORIZED 设置为 0 来禁用 TLS 验证:

NODE_TLS_REJECT_UNAUTHORIZED=0

建议仅将此标志用于本地开发,因为它禁用 Node.js 的 TLS。 有关详细信息,请参阅 和 。

Docker 容器无法启动

仿真器出错,并出现以下消息:

/palrun: ERROR: Invalid mapping of address 0x40037d9000 in reserved address space below 0x400000000000. Possible causes:
1. The process (itself, or via a wrapper) starts up its own running environment sets the stack size limit to unlimited via syscall setrlimit(2);
2. The process (itself, or via a wrapper) adjusts its own execution domain and flag the system its legacy personality via syscall personality(2);
3. Sysadmin deliberately sets the system to run on legacy VA layout mode by adjusting a sysctl knob vm.legacy_va_layout.

此错误很可能是因为当前 Docker 主机处理器类型与我们的 Docker 映像不兼容。 例如,如果计算机使用的是独特的芯片集或处理器体系结构。

我的应用收到太多与连接相关的超时信息我的应用无法创建数据库或容器

仿真器上预配的物理分区数太低。 删除未使用的数据库/集合,或者使用启动仿真器。

可靠性和故障

仿真器出现故障:

数据资源管理器错误性能问题

每秒的请求数较低,请求的延迟较高:

刷新 Linux 容器

使用以下步骤刷新 Linux 容器:

运行以下命令查看所有 Docker 容器。

docker ps --all

使用从上面的命令中检索到的 ID 删除容器。

docker rm ID_OF_CONTAINER_FROM_ABOVE

接下来列出所有 Docker 映像。

docker images

使用从上一步中检索到的 ID 删除映像。

docker rmi ID_OF_IMAGE_FROM_ABOVE

拉取 Azure Cosmos DB Linux 仿真器的最新映像。

docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator

若要启动已停止的容器,请运行以下命令:

docker start -ai ID_OF_CONTAINER

报告仿真器的问题

报告 Linux 仿真器的问题时,请提供尽可能多的有关问题的信息。 这些详细信息包括:

后续步骤

在本文中,你已了解如何使用 Azure Cosmos DB Linux 仿真器进行免费的本地开发。 你现在可以继续学习下面的文章:

(编辑:广州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!