# Despliegue con Docker

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

---

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

## Prerrequisitos

- Docker
- [Docker Compose](https://docs.docker.com/compose/install/) v2.0.0+
- Make (opcional)
- 6 GB de RAM para la aplicación
- 14 GB de espacio en disco

## Obtener y ejecutar la demo

1.  Clona el repositorio de la Demo:

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

2.  Cambia a la carpeta de la demo:

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

3.  Inicia la demo[^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.  (Opcional) Habilita las pruebas basadas en observabilidad de 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>


## Verificar la tienda web y la telemetría

Una vez que las imágenes estén construidas y los contenedores iniciados, puedes
acceder a:

- Tienda web: <http://localhost:8080/>
- Grafana: <http://localhost:8080/grafana/>
- UI del Generador de Carga: <http://localhost:8080/loadgen/>
- UI de Jaeger: <http://localhost:8080/jaeger/ui/>
- UI de Tracetest: <http://localhost:11633/>, solo cuando se usa
  `make run-tracetesting`
- UI del configurador de Flagd: <http://localhost:8080/feature>

## Cambiar el número de puerto principal de la demo

Por defecto, la aplicación de demostración iniciará un proxy para todo el
tráfico del navegador enlazado al puerto 8080. Para cambiar el número de puerto,
establece la variable de entorno `ENVOY_PORT` antes de iniciar la demo.

- Por ejemplo, para usar el puerto 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>


## Trae tu propio backend

Probablemente quieras usar la tienda web como aplicación de demostración para un
backend de observabilidad que ya tienes (por ejemplo, una instancia existente de
Jaeger, Zipkin, o uno de los [proveedores de tu elección](/ecosystem/vendors/)).

El OpenTelemetry Collector puede usarse para exportar datos de telemetría a
múltiples backends. Por defecto, el collector en la aplicación de demostración
fusionará la configuración de dos archivos:

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

Para agregar tu backend, abre el archivo
[src/otel-collector/otelcol-config-extras.yml](https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/otel-collector/otelcol-config-extras.yml)
con un editor.

- Comienza agregando un nuevo exporter. Por ejemplo, si tu backend soporta OTLP
  sobre HTTP, agrega lo siguiente:

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

- Luego sobrescribe los `exporters` para los pipelines de telemetría que quieras
  usar para tu backend.

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

> [!NOTE]
>
> Al fusionar valores YAML con el Collector, los objetos se fusionan y los
> arrays se reemplazan. El exporter `spanmetrics` debe incluirse en el array de
> exporters para el pipeline de `traces` si se sobrescribe. No incluir este
> exporter resultará en un error.

Los backends de proveedores pueden requerir que agregues parámetros adicionales
para autenticación, por favor revisa su documentación. Algunos backends
requieren diferentes exporters, puedes encontrarlos y su documentación
disponible en
[opentelemetry-collector-contrib/exporter](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter).

Después de actualizar el `otelcol-config-extras.yml`, inicia la demo ejecutando
`make start`. Después de un momento, deberías ver las trazas fluyendo hacia tu
backend también.

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