The documentation you are viewing is for Dapr v1.12 which is an older version of Dapr. For up-to-date documentation, see the latest version.
操作方法: 使用 Docker 在自托管模式下运行 Dapr
本文提供有关在 Windows/Linux/macOS 或 VM 上使用 Docker 运行 Dapr 的指南。
先决条件
- Dapr CLI
- Docker
- Docker-Compose (可选)
初始化 Dapr 环境
要初始化 Dapr 控制平面容器并创建默认配置文件,请运行:
dapr init
将应用和 sidecar 作为进程运行
dapr run
CLI 命令行 用于启动 Dapr sidecar 和您的应用程序:
dapr run --app-id myapp --app-port 5000 -- dotnet run
此命令将同时启动 daprd sidecar 程序并执行 dotnet run
以启动您的应用程序。
将应用作为进程运行,将 sidecar 作为 Docker 容器运行
如果您在 Docker 容器中运行 Dapr,并且您的应用程序在主机上作为一个进程运行,那么您需要配置一下 Docker 来使用主机网络,这样Dapr和应用程序就可以共享一个 localhost 网络接口。
Note
Docker 的主机网络驱动只在 Linux 主机上支持。如果您在 Linux 上运行 Docker,运行下述命令以启动 Dapr。
docker run --net="host" --mount type=bind,source="$(pwd)"/components,target=/components daprio/daprd:edge ./daprd -app-id <my-app-id> -app-port <my-app-port>
然后,你可以在主机上运行你的应用程序,他们应该通过 localhost 网络接口连接。
在单个 Docker 容器中同时运行应用和 Dapr
仅用于开发目的
不建议在同一容器内运行 Dapr 运行时和应用程序。 但是,对于本地开发的场景,可以这样做。
为了做到这一点,你需要编写 Docker 文件,安装 Dapr 运行时、Dapr CLI 和你的应用代码。 然后,您可以使用 Dapr CLI 调用Dapr 运行时和您的应用代码。
下面是实现这一目标的 Docker 文件的例子。
FROM python:3.7.1
# Install dapr CLI
RUN wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
# Install daprd
ARG DAPR_BUILD_DIR
COPY $DAPR_BUILD_DIR /opt/dapr
ENV PATH="/opt/dapr/:${PATH}"
RUN dapr init --slim
# Install your app
WORKDIR /app
COPY python .
RUN pip install requests
ENTRYPOINT ["dapr"]
CMD ["run", "--app-id", "nodeapp", "--app-port", "3000", "node", "app.js"]
请记住,如果 Dapr 需要与其他组件通信,即: Redis,这些也需要让它访问。 Redis,这些也需要让它访问。
在 Docker 网络运行
如果您有多个 Dapr 实例运行在在 Docker 容器中,并且希望他们能够互相通讯 例如,服务调用,那么您就需要创建一个共享的 Docker 网络,并且确保这些 Dapr 容器与之相连。
您可以使用以下方法创建一个简单的 Docker 网络:
docker network create my-dapr-network
当运行您的 Docker 容器时,您可以通过以下方式将其附加到网络:
docker run --net=my-dapr-network ...
每个容器将在该网络上获得一个唯一的IP,并能与该网络上的其他容器进行通信。
使用 Docker-Compose 运行
Docker Compose 可以用来定义多容器应用配置。 如果您希望在没有 Kubernetes 的情况下,在本地使用 Dapr sidecar 运行多个应用程序,那么建议使用 Docker Compose 定义(docker-compose.yml
)。
Docker Compose 的语法和工具超出了本文的范围,但是,建议你参考官方 Docker 文档了解更多细节。
为了使用 Dapr 和 Docker Compose 运行您的应用程序,您需要在您的docker-compose.yml
中定义 sidecar 模式。 例如:
version: '3'
services:
nodeapp:
build: ./node
ports:
- "50001:50001" # Dapr instances communicate over gRPC so we need to expose the gRPC port
depends_on:
- redis
- placement
networks:
- hello-dapr
nodeapp-dapr:
image: "daprio/daprd:edge"
command: [
"./daprd",
"-app-id", "nodeapp",
"-app-port", "3000",
"-placement-host-address", "placement:50006" # Dapr's placement service can be reach via the docker DNS entry
]
volumes:
- "./components/:/components" # Mount our components folder for the runtime to use
depends_on:
- nodeapp
network_mode: "service:nodeapp" # Attach the nodeapp-dapr service to the nodeapp network namespace
... # Deploy other daprized services and components (i.e. Redis)
placement:
image: "daprio/dapr"
command: ["./placement", "-port", "50006"]
ports:
- "50006:50006"
networks:
- hello-dapr Redis)
placement:
image: "daprio/dapr"
command: ["./placement", "-port", "50006"]
ports:
- "50006:50006"
networks:
- hello-dapr
对于那些在 Linux 主机上运行 Docker 守护进程的用户,如果需要的话,还可以使用
network_mode: host
来利用主机网络。
要进一步了解如何使用 Docker Compose 运行 Dapr,请参见 Docker-Compose Sample。
在 Kubernetes 运行
如果您的部署目标是 Kubernetes,请使用 Dapr 的 first-class integration。 请参阅 Dapr on Kubernetes 文档。
名称解析
默认情况下,Dapr 使用 mDNS 作为自托管模式下的名称解析组件进行服务调用。 如果您在虚拟机或者其他不支持 mTLS 的场景下运行 Dapr,您可以使用 HashiCorp Consul 组件用于名称解析。
Docker 镜像
Dapr 为不同的组件提供了许多预构建的 Docker 镜像,您应该为所需的二进制、架构和 标签/版本 选择相关镜像。
Images
Docker Hub上,每个 Dapr 组件都有已发布的 Docker 镜像。
- daprio/dapr (包含所有Dapr binaries)
- daprio/daprd
- daprio/placement
- daprio/sentry
- daprio/dapr-dev
标签
Linux/amd64
latest
:最新版本,仅 用于开发目的。edge
: 最新的 edge 构建(master)。major.minor.patch
: 发布版本。major.patch-rc.iteration
: 候选发布。
Linux/arm/v7
latest-arm
:最新的ARM版本, 只 用于开发目的。edge-arm
: ARM 的最新的 edge 构建(master)。major.minor.patch-arm
: ARM的发布版本。major.patch-rc.iteration
: ARM的候选发布。
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.