## 为你的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
有疑问加站长微信联系(非本文作者)