# Docker 部署

LLMS index: [llms.txt](/llms.txt)

---

<!-- markdownlint-disable code-block-style ol-prefix -->

## 前置条件 {#prerequisites}

- Docker
- [Docker Compose](https://docs.docker.com/compose/install/)，版本需为 v2.0.0+
- Make（可选）
- 应用需占用 6 GB 内存

## 获取并运行演示程序 {#get-and-run-the-demo}

1. 克隆演示仓库：

   ```shell
   git clone https://github.com/open-telemetry/opentelemetry-demo.git
   ```

2. 进入演示文件夹：

   ```shell
   cd opentelemetry-demo/
   ```

3. 开始演示[^1]：

      <ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          data-td-tp-persist="make" aria-controls="tabs-00-00" aria-selected="true">
        Make
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="docker" aria-controls="tabs-00-01" aria-selected="false">
        Docker
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">make start
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">docker compose up --force-recreate --remove-orphans --detach
</span></span></code></pre></div>
    </div>
</div>


4. （可选）启用基于 API 可观测性的测试[^1]：

      <ul class="nav nav-tabs" id="tabs-1" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
          data-td-tp-persist="make" aria-controls="tabs-01-00" aria-selected="true">
        Make
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
          data-td-tp-persist="docker" aria-controls="tabs-01-01" aria-selected="false">
        Docker
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-1-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">make run-tracetesting
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">docker compose -f docker-compose-tests.yml run traceBasedTests
</span></span></code></pre></div>
    </div>
</div>


## 验证 Web 商店和遥测数据 {#verify-the-web-store-and-telemetry}

当镜像构建完成并容器启动后，你可以访问以下地址：

- Web 商店：[http://localhost:8080/](http://localhost:8080/)
- Grafana：[http://localhost:8080/grafana/](http://localhost:8080/grafana/)
- 负载生成器 UI：[http://localhost:8080/loadgen/](http://localhost:8080/loadgen/)
- Jaeger UI：[http://localhost:8080/jaeger/ui/](http://localhost:8080/jaeger/ui/)
- Tracetest UI：[http://localhost:11633/](http://localhost:11633/)，仅在使用 `make run-tracetesting` 时可用
- Flagd 配置器 UI：[http://localhost:8080/feature](http://localhost:8080/feature)

## 修改演示的默认端口号 {#changing-the-demos-primary-port-number}

默认情况下，演示应用将为所有浏览器流量启动一个绑定在 8080 端口的代理服务。
如需更换端口号，请在启动演示前设置环境变量 `ENVOY_PORT`。

- 例如，使用 8081 端口[^1]：

     <ul class="nav nav-tabs" id="tabs-2" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
          data-td-tp-persist="make" aria-controls="tabs-02-00" aria-selected="true">
        Make
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
          data-td-tp-persist="docker" aria-controls="tabs-02-01" aria-selected="false">
        Docker
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-2-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">ENVOY_PORT</span><span class="o">=</span><span class="m">8081</span> make start
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="nv">ENVOY_PORT</span><span class="o">=</span><span class="m">8081</span> docker compose up --force-recreate --remove-orphans --detach
</span></span></code></pre></div>
    </div>
</div>


## 使用你自己的后端服务 {#bring-your-own-backend}

你可能希望将 Web 商店作为演示应用，用于连接你已有的可观测性后端服务
（例如你已有的 Jaeger、Zipkin 实例，或[你选择的其他厂商](/ecosystem/vendors/)）。

OpenTelemetry Collector 可用于将遥测数据导出到多个后端。默认情况下，演示应用中的 Collector 会合并以下两个配置文件的内容：

- `otelcol-config.yml`
- `otelcol-config-extras.yml`

如需添加自己的后端服务，请使用编辑器打开文件
[src/otel-collector/otelcol-config-extras.yml](https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/otel-collector/otelcol-config-extras.yml)。

- 首先添加一个新的导出器。例如，如果你的后端支持通过 HTTP 的 OTLP 协议，添加如下内容：

  ```yaml
  exporters:
    otlphttp/example:
      endpoint: <your-endpoint-url>
  ```

- 然后重写要连接到你后端的遥测管道中的 `exporters` 配置：

  ```yaml
  service:
    pipelines:
      traces:
        exporters: [spanmetrics, otlphttp/example]
  ```

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">注意</div>


在使用 Collector 合并 YAML 配置时，对象会被合并，但数组会被替换。
如果你重写了 `traces` 管道的 `exporters`，必须确保数组中包含 `spanmetrics`
导出器。如果未包含该导出器，将导致错误
</div>


某些厂商的后端可能要求你添加额外的认证参数，请参考相应文档。部分后端需要使用不同的导出器，你可以在
[opentelemetry-collector-contrib/exporter](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter)
找到这些导出器及其文档。

更新完 `otelcol-config-extras.yml` 后，通过运行 `make start` 开始演示。
稍等片刻后，你应能看到数据流入你的后端服务。

[^1]: `docker-compose` is deprecated. For details, see
[Migrate to Compose V2](https://docs.docker.com/compose/).
