开发您的应用

在上一节中,您了解了如何使用 Docker Compose 将服务连接在一起。在本节中,您将学习如何使用 Docker 开发 Golang 应用。您还将了解如何使用 Docker Compose Watch 在代码更改时重建镜像。最后,您将测试应用并使用 Prometheus 作为数据源,在 Grafana 中可视化指标。

开发应用

现在,如果您对本地的 Golang 应用进行了任何更改,都需要在容器中反映出来,对吧?一种方法是在代码更改后,在 Docker Compose 中使用 --build 标志。这将重建 compose.yml 文件中包含 build 指令的所有服务,在本例中是 api 服务(Golang 应用)。

docker compose up --build

但是,这并不是最佳方法。这样做效率不高。每次代码更改后,您都需要手动重建。这对于开发来说不是一个好的流程。

更好的方法是使用 Docker Compose Watch。在 compose.yml 文件中,您已经在 api 服务下添加了 develop 部分。所以,这更像是热重载。每当您更改代码(在 path 中定义)时,它都会重建镜像(或根据操作重启)。这是您可以使用它的方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
services:
  api:
    container_name: go-api
    build:
      context: .
      dockerfile: Dockerfile
    image: go-api:latest
    ports:
      - 8000:8000
    networks:
      - go-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    develop:
      watch:
        - path: .
          action: rebuild

compose.yml 文件中添加 develop 部分后,您可以使用以下命令启动开发服务器

$ docker compose watch

现在,如果您修改项目中的 main.go 或任何其他文件,api 服务将自动重建。您将在终端中看到以下输出

Rebuilding service(s) ["api"] after changes were detected...
[+] Building 8.1s (15/15) FINISHED                                                                                                        docker:desktop-linux
 => [api internal] load build definition from Dockerfile                                                                                                  0.0s
 => => transferring dockerfile: 704B                                                                                                                      0.0s
 => [api internal] load metadata for docker.io/library/alpine:3.17                                                                                        1.1s
  .                             
 => => exporting manifest list sha256:89ebc86fd51e27c1da440dc20858ff55fe42211a1930c2d51bbdce09f430c7f1                                                    0.0s
 => => naming to docker.io/library/go-api:latest                                                                                                          0.0s
 => => unpacking to docker.io/library/go-api:latest                                                                                                       0.0s
 => [api] resolving provenance for metadata file                                                                                                          0.0s
service(s) ["api"] successfully built

测试应用

现在您的应用已运行,请前往 Grafana 面板以可视化您正在注册的指标。打开您的浏览器并导航至 http://localhost:3000。您将看到 Grafana 登录页面。登录凭据是在 Compose 文件中提供的。

登录后,您可以创建一个新的面板。在创建面板时,您会注意到默认数据源是 Prometheus。这是因为您已经在 grafana.yml 文件中配置了数据源。

The optional settings screen with the options specified.

您可以使用不同的面板来可视化指标。本指南不详细介绍 Grafana。您可以参考 Grafana 文档 以获取更多信息。有一个 Bar Gauge 面板用于可视化来自不同端点的总请求数。您使用了 api_http_request_totalapi_http_request_error_total 指标来获取数据。

The optional settings screen with the options specified.

您创建了这个面板来可视化来自不同端点的总请求数,以比较成功和失败的请求。所有成功的请求的条形图将显示为绿色,所有失败的请求的条形图将显示为红色。此外,它还会显示请求来自哪个端点,无论是成功请求还是失败请求。如果您想使用这个面板,您可以从您克隆的仓库中导入 dashboard.json 文件。

总结

您已到达本指南的末尾。您学习了如何使用 Docker 开发 Golang 应用。您还了解了如何使用 Docker Compose Watch 在代码更改时重建镜像。最后,您测试了应用并使用 Prometheus 作为数据源,在 Grafana 中可视化了指标。

页面选项