Go の API サーバーが欲しかったので、Docker で Echo サーバーを構築してみた。
ディレクトリー構成 1 2 3 4 5 +- docker-compose.yml +- app +- Dockerfile +- src +- server.go
docker-compose.yml 1 2 3 4 5 6 7 8 version: '2' services: app: build: context: ./app ports: - 8080 :8080 tty: true
app/Dockerfile 1 2 3 4 5 6 7 8 9 10 11 FROM golang:1.13 .6 -alpineWORKDIR /go/src COPY ./src/server.go /go/src/server.go RUN go mod init server \ && go mod tidy \ && go build CMD ["go" , "run" , "server.go" ]
app/src/server.go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package mainimport ( "net/http" "github.com/labstack/echo" ) func main () { e := echo.New() e.GET("/" , func (c echo.Context) error { return c.String(http.StatusOK, "Hello, Echo World!!" ) }) e.Logger.Fatal(e.Start(":8080" )) }
起動 Docker コンテナを起動する。
1 2 3 4 5 6 $ sudo docker-compose build --no-cache $ sudo docker-compose up -d $ sudo docker-compose ps Name Command State Ports -------------------------------------------------------------- echo_app_1 go run server.go Up 0.0.0.0:8080->8080/tcp
サーバーの起動を確認する。
1 2 $ curl http://localhost:8080/ Hello, Echo World!!
GET パラメーターを受けて JSON を返す server.go を下記のように変更した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package mainimport ( "net/http" "github.com/labstack/echo" ) type ItemData struct { Id int `json:"id"` Name string `json:"name"` } func main () { e := echo.New() e.GET("/" , func (c echo.Context) error { item := new (ItemData) if err := c.Bind(item); err != nil { return err } return c.JSON(http.StatusOK, item) }) e.Logger.Fatal(e.Start(":8080" )) }
curl で GET リクエストを送ってみる。
1 2 $ curl "http://localhost:8099/?id=1&Name=product01" {"id":1,"name":"product01"}