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

2020-02-04  本文已影响0人  hwholiday

服务端代码

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

CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o agent .
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

结语

完整代码地址

联系 QQ: 3355168235

上一篇下一篇

猜你喜欢

热点阅读