项目介绍

官方 Github: Podinfo
Podinfo 是一个用 Go 制作的小型 web 应用程序,它展示了在 Kubernetes 中运行微服务的最佳实践。
它已实现的技术指标(截选自官方 README.md ):
image.png
里面每一项技术指标的实现方式,其实都可以拿出来单独讲好久,相关理论也有好多。
这里我只是讲针对这个项目,我们该如何使用 Docker 容器去探索它。

构建容器调试环境

IDE

VSCode + golang/vscode-go

Go 国内加速镜像

Go 国内加速镜像

编写 Dockerfile.dev 文件

  1. FROM golang:1.14
  2. WORKDIR /workspace
  3. # copy modules manifests
  4. COPY go.mod go.mod
  5. COPY go.sum go.sum
  6. # 阿里云
  7. RUN go env -w GO111MODULE=on
  8. RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
  9. # cache modules
  10. RUN go mod download
  11. RUN go get github.com/go-delve/delve/cmd/dlv

构建 Image

  1. docker build -f Dockerfile.dev -t podinfo:dev .

编写 docker-compose.yaml

  1. version: "3.4"
  2. services:
  3. golang:
  4. image: podinfo:dev
  5. command: >
  6. bash -c "ls -la
  7. && dlv debug /workspace/cmd/podinfo --headless --log -l 0.0.0.0:2345 --api-version=2"
  8. volumes:
  9. - ./:/workspace
  10. ports:
  11. - 9898:9898
  12. - 2345:2345
  13. security_opt:
  14. - "seccomp:unconfined"

配置 .vscode 的 launch.json

  1. {
  2. "version": "0.2.0",
  3. "configurations": [
  4. {
  5. "name": "Remote Docker",
  6. "type": "go",
  7. "request": "launch",
  8. "mode": "remote",
  9. "remotePath":"/workspace",
  10. "port": 2345,
  11. "host": "127.0.0.1",
  12. "program": "${workspaceFolder}",
  13. "args": [],
  14. "trace" : "verbose",
  15. "env" : {}
  16. }
  17. ]
  18. }

开始探索

docker compose 一键启动

  1. docker-compose up

Run Remote Docker

每日一库之128:podinfo(k8s微服务模板) - 图2

查看首页

http://localhost:9898
每日一库之128:podinfo(k8s微服务模板) - 图3

查看给 Prometheus 的 metrics API

http://localhost:9898/metrics
每日一库之128:podinfo(k8s微服务模板) - 图4

下断点,发请求调试

curl http://localhost:9898/api/info 复制代码
每日一库之128:podinfo(k8s微服务模板) - 图5

References

12factor

The Twelve-Factor App