前言
最近在工作中有這麼一個需求:由於某個服務只在生產環境下部署,測試環境下沒有相關服務,但是本地無法訪問生產環境的服務,所以我需要mock一個返回特定json的http服務。
服務代碼
相關代碼已經上傳至GitHub:https://github.com/bodhiye/http-fake
main.go代碼
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type fakeReq struct {
URI string `json:"uri"`
}
// 處理application/json類型的POST請求
func fake(w http.ResponseWriter, r *http.Request) {
// 根據請求body創建一個json解析器實例
decoder := json.NewDecoder(r.Body)
// 用於存放參數數據
var req fakeReq
// 解析參數 存入map
decoder.Decode(&req)
// 打印日誌
fmt.Printf("url=%s\n", req.URI)
// 返回你需要的json,這裏返回了{"code": 200}
fmt.Fprintf(w, `{"code": 200}`)
}
func main() {
http.HandleFunc("/fake", fake)
http.ListenAndServe(":2333", nil)
}
Dockerfile代碼
FROM golang:latest
MAINTAINER "[email protected]"
WORKDIR /go/src/http-fake
ADD . /go/src/http-fake
RUN go build .
EXPOSE 2333
ENTRYPOINT ["./http-fake"]
部署流程
- 編譯Dockerfile文件:
docker build -t bodhiye/http-fake .
編譯完成後在終端輸入docker images
可以查看剛纔編譯好的http-fake鏡像。 - 你得註冊一個Docker Hub賬號,註冊成功後登錄Docker Hub:
docker login -u bodhiye
,之後輸入密碼即可登錄成功。 - 把鏡像上傳到Docker Hub:
docker push bodhiye/http-fake
上傳成功後可以在Docker Hub網站上看到剛剛上傳的http-fake鏡像。 - 在你需要部署的服務器或者本地環境下拉取鏡像:
docker pull bodhiye/http-fake:latest
代碼中latest表示拉取最新的鏡像版本。 - 啓動http-fake服務:
docker run --name test-http -d -p 2048:2333 bodhiye/http-fake
將容器服務內部的2333端口映射到本機的2048端口上,並給該容器服務起了一個my-test-http名稱。 - 測試http-fake服務:
curl -X POST -d '{"uri":"https://img.yeqiongzhou.com/test.jpg"}' 127.0.0.1:2048/fake
通過curl的方式來訪問本地的http-fake服務,可以看到該服務返回了預期的json字段。如果要在本地訪問服務器上的該服務,則127.0.0.1替換成服務器的IP地址。 - 查看日誌:
docker logs test-http
可以打印出服務相關日誌url=https://img.yeqiongzhou.com/test.jpg