本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
- 环境搭建(本文)
 - 服务拆分
 - 用户服务
 - 产品服务
 - 订单服务
 - 支付服务
 - RPC 服务 Auth 验证
 - 服务监控
 - 链路追踪
 - 分布式事务
 
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。
完整示例代码:
1 环境要求
GolangEtcdRedisMysqlPrometheusGrafanaJaegerDTMDockerDockerWindowsmacOSDocker DesktopDocker ComposeDockerfilego-zerogrpcgrpcprotocgorpc stubprotoc-gen-gogo-zerogoctlprotocprotoc-gen-gogoctlgolanggolangDockerfileDockerfile| 服务 | 基于的镜像 | 
|---|---|
| DTM | yedf/dtm | 
| Etcd | bitnami/etcd | 
| Mysql | mysql:5.7 | 
| Redis | redis:5.0 | 
| Mysql Manage | phpmyadmin/phpmyadmin | 
| Redis Manage | erikdubbelboer/phpredisadmin | 
| Prometheus | bitnami/prometheus | 
| Grafana | grafana/grafana | 
| Jaeger | jaegertracing/all-in-one:1.28 | 
.envdocker-compose.yml2.4 构建与运行
docker-compose- 容器构建中
 

WindowsShare itWindows
容器已启动运行


2.5 容器说明
| 容器名称 | 暴露端口 | host地址 | 说明 | 
|---|---|---|---|
| golang | 8000:8000 8001:8001 8002:8002 8003:8003 9000:9000 9001:9001 9002:9002 9003:9003  | golang | 在生产环境中微服务一般都是集群部署,可能一个微服务一台服务器,也可能一个微服务一个容器。为了方便开发调试,我们将在 golang 容器中启动所有微服务,并为它们分配监听不同的端口号以示区分。 80:开头的端口号我们将用于 api 服务 90:开头的端口号我们将用于 rpc 服务  | 
| dtm | 36789:36789 36790:36790  | dtm | dtm 的 http 协议和 grpc 协议服务端口号,供客户端交互使用。 此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机  | 
| etcd | 2379:2379 | etcd | Etcd http api 服务端口号,供客户端交互使用。 此项目中我们只在 Docker 内部容器之间访问使用,所以也可以不暴露端口号给宿主机  | 
| mysql | 3306:3306 | mysql | Mysql 服务默认端口号,宿主机可通过 127.0.0.1:3306 进行数据库的连接 | 
| redis | 6379:6379 | redis | Redis 服务默认端口号,宿主机可通过 127.0.0.1:6379 进行数据库的连接 | 
| prometheus | 3000:9090 | prometheus | Prometheus web 服务端口号,可以在宿主机 127.0.0.1:3000 访问 | 
| grafana | 4000:3000 | grafana | Grafana web 服务端口号,可以在宿主机 127.0.0.1:4000 访问 | 
| jaeger | 5000:16686 | jaeger | Jaeger web 服务端口号,可以在宿主机 127.0.0.1:5000 访问 | 
2.6 访问验证
Mysql
Redis
Prometheus
 
Grafana
Jaeger
项目地址
go-zero微信交流群
关注『微服务实践』公众号并点击 交流群 获取社区群二维码。