答案:使用Golang和Docker Compose可高效管理多容器微服务应用。首先编写Golang Web服务,连接PostgreSQL并提供/health和/users接口;通过Dockerfile构建轻量镜像,利用docker-compose.yml定义app和db服务,实现容器编排;最后通过docker-compose up启动应用,curl验证服务正常。常见优化包括添加.dockerignore、健康检查、静态编译及安全凭证管理,适用于本地开发与轻量部署。

使用Golang和Docker Compose管理多容器应用是一种常见的开发部署方式,尤其适用于微服务架构。下面通过一个简单的示例展示如何用Golang编写Web服务,并通过Docker Compose管理多个容器(如Go应用和PostgreSQL数据库)。
项目结构
先建立如下目录结构:
go-docker-compose-example/├── main.go├── go.mod├── Dockerfile└── docker-compose.yml
Golang Web服务代码
创建main.go,实现一个连接PostgreSQL的简单HTTP服务:
package mainimport ("database/sql""log""net/http""os"
_ "github.com/lib/pq")
立即学习“go语言免费学习笔记(深入)”;
func main() {db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))if err != nil {log.Fatal(err)}if err := db.Ping(); err != nil {log.Fatal("无法连接数据库:", err)}
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("OK"))})http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) { var count int db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count) w.Write([]byte("用户总数: " + fmt.Sprint(count)))})log.Println("服务器启动在 :8080")log.Fatal(http.ListenAndServe(":8080", nil))}
运行前需执行:
go mod init example,并添加依赖:go get github.com/lib/pqDockerfile 构建镜像
创建
Dockerfile用于构建Go应用镜像:
千帆AppBuilder
百度推出的一站式的AI原生应用开发资源和工具平台,致力于实现人人都能开发自己的AI原生应用。
174 查看详情
FROM golang:1.21-alpine AS builderWORKDIR /appCOPY . .RUN go build -o main .FROM alpine:latestRUN apk --no-cache add ca-certificatesWORKDIR /root/COPY --from=builder /app/main .CMD ["./main"]
Docker Compose 配置多容器
创建
docker-compose.yml,定义Go应用和PostgreSQL容器:version: '3.8'services:app:build: .ports:
- "8080:8080"environment:DATABASE_URL: postgres://user:password@db:5432/mydb?sslmode=disabledepends_on:
- db
db:image: postgres:15environment:POSTGRES_USER: userPOSTGRES_PASSWORD: passwordPOSTGRES_DB: mydbports:
- "5432:5432"volumes:
- postgres_data:/var/lib/postgresql/data
volumes:postgres_data:
该配置包含两个服务:
app:基于本地Dockerfile构建,暴露8080端口,依赖db服务db:使用官方Postgres镜像,持久化数据卷
运行与验证
在项目根目录执行:
docker-compose up -d
查看日志:
docker-compose logs app
访问健康接口:
curl http://localhost:8080/health
返回OK表示服务正常。
常见优化点
使用.dockerignore排除不必要的文件在生产环境中使用更安全的数据库凭证管理方式添加健康检查(healthcheck)字段确保依赖正确启动为Go应用启用静态编译以减小镜像体积
基本上就这些。这套组合适合本地开发和轻量级部署,结构清晰,易于扩展。
以上就是Golang Docker Compose多容器管理示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1162458.html
微信扫一扫
支付宝扫一扫