目的
通过docker打包自己编写的web服务,方便部署、测试、演示。
你能get到什么
- go的web服务
- go语言读取json的配置文件(dev.json)
- goweb服务启动运行,通过命令行参数,指定配置文件 --cfg
- go语言调用redis的get和set
- 通过url返回当前接口的调用次数,记录在redis中
- 本地运行go web服务
- go的web服务编译成linux平台的可执行文件
- 通过dockerfile,打包编译go web服务,生成docker image影像
- 通过docker方式运行go的web服务,挂在本地目录到容器内,指定本地的配置文件(容器运行app,加载外部配置文件)
- 通过docker-compose方式,运行goweb服务和redis服务,实现容器间互通。(容器运行app,加载外部配置文件)
- 全部代码和配置文件(git) 点我获取
docker和docker compose方式,启动go的web服务
docker和docker compose方式,启动go的web服务
编写web服务
main.go
通过配置文件读取redis地址,记录访问url的次数,并且返回访问次数
package main
import (
"encoding/json"
"flag"
"fmt"
"github.com/go-redis/redis/v7"
"io"
"io/ioutil"
"net/http"
)
var (
REDISCLIENT *redis.Client
Cfg Config
)
type Config struct {
RedisAddr string
}
func ReadCfg(cfgpath string) {
bytes, e := ioutil.ReadFile(cfgpath)
if e != nil {
panic(e)
}
c := Config{
}
e = json.Unmarshal(bytes, &c)
if e != nil {
panic(e)
}
Cfg = c
//fmt.Println(Cfg)
data, e := json.MarshalIndent(c, "", "")
if e == nil {
fmt.Println(string(data))
}
}
func initRedis() {
REDISCLIENT = redis.NewClient(&redis.Options{
Addr: Cfg.RedisAddr,
Password: "", // no password set
DB: 9, // use default DB
})
}
func main() {
var (
cfgpath = flag.String(