为你的golang程序插上docker_compose的翅膀

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

  • 构建一个简单的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一起讨论

完整代码地址

联系 QQ: 3355168235


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

本文来自:简书

感谢作者:hwholiday

查看原文:为你的golang程序插上docker_compose的翅膀

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

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