golang 插上docker_compose的翅膀

hwholiday · · 645 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## 为你的golang程序插上docker_compose的翅膀 - 构建一个简单的http服务,使用redis的get,set方法 - 使用docker_compose构建一个agent服务,redis服务并使用networks ## 服务端代码 ``` var rd *redis.Client func main() { InitRedis() http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { _, _ = fmt.Fprintf(writer, "hello world") }) http.HandleFunc("/set", func(writer http.ResponseWriter, request *http.Request) { _ = request.ParseForm() key := request.Form.Get("key") val := request.Form.Get("val") fmt.Println("set >>>>>> ", "key", key, "val", val) if key == "" { _, _ = writer.Write([]byte("参数错误")) return } if err := rd.Set(key, val, time.Second*60).Err(); err != nil { _, _ = writer.Write([]byte(err.Error())) return } _, _ = writer.Write([]byte("操作成功")) }) http.HandleFunc("/get", func(writer http.ResponseWriter, request *http.Request) { _ = request.ParseForm() key := request.Form.Get("key") fmt.Println("get >>>>>> ", "key", key) if key == "" { _, _ = writer.Write([]byte("参数错误")) return } info, err := rd.Get(key).Result() if err != nil { _, _ = writer.Write([]byte(err.Error())) return } _, _ = writer.Write([]byte(info)) }) fmt.Println("服务启动成功 监听端口 9999") er := http.ListenAndServe("0.0.0.0:9999", nil) if er != nil { fmt.Println("ListenAndServe: ", er) } } func InitRedis() { rd = redis.NewClient( &redis.Options{ Addr: "redis:6379", DialTimeout: 10 * time.Second, ReadTimeout: 30 * time.Second, WriteTimeout: 30 * time.Second, Password: "123456", PoolSize: 100, }, ) err := rd.Ping().Err() if nil != err { fmt.Println(err) return } } ``` ## 工程目录 ``` ├── agent ├── build.sh ├── docker-compose.yml ├── Dockerfile └── docker.go ``` ## 构建agent服务的Dockerfile - 编译agent服务 ``` CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o agent . ``` - 编写Dockerfile ``` FROM scratch MAINTAINER hwholiday ADD agent /server/http/ ENTRYPOINT ["/server/http/agent"] ``` ## 编写docker-compose.yml ``` version: "3" services: agent: hostname: "agent" container_name: agent restart: always build: context: . dockerfile: Dockerfile ports: - "9999:9999" #等redis启动了再启动agent服务 depends_on: - redis networks: - back redis: image: redis hostname: "redis" container_name: redis restart: always volumes: - /home/ghost/redis:/data command: redis-server --requirepass 123456 networks: - back networks: back: ``` ## 运行 ``` ## 编译服务 sudo docker-compose -f docker-compose.yml up ## 编译某一个服务 sudo docker-compose -f docker-compose.yml up agent ## 卸载服务 sudo docker-compose -f docker-compose.yml down ``` ## 结语 + docker-compose的用法还有很多,这里只展示简单的使用,更加高级的功能欢迎大家一起讨论 + 欢迎添加QQ一起讨论 ### [完整代码地址](https://github.com/hwholiday/learning_tools/tree/master/docker) ## 联系 QQ: 3355168235

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

645 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传