iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0

今天我們終於要開始用Docker實作和部署微服務系統。

簡易架構圖

簡單說明等下要部署的服務http server和grpc server,使用者可月以透過http來去註冊和登入。
https://ithelp.ithome.com.tw/upload/images/20200918/201297629S0eCbf5vS.png

使Dockerfile建立映像檔

# dockerfile
# Author: 阿榜
# Version: 1.0.0
FROM golang:1.15.2-alpine3.12
LABEL stage=grpcserver
ENV PROJECT /go/src/grpcserver
RUN cd /go/src
RUN mkdir -p $PROJECT
COPY ./ $PROJECT	
RUN cd $PROJECT && export GO111MODULE=on && go build -mod vendor 	
WORKDIR $PROJECT
CMD ["./grpcserver"]

當Dockerfile撰寫完成,可以透過docker build生成映像檔

docker build -t grpcserver:v1.0.0  -f Dockerfile .

執行完成後就可以得到Image
https://ithelp.ithome.com.tw/upload/images/20200918/20129762OxXWKNwNHD.png

使用Dockerfile建立http server,步驟同上方grpcserver建立。

使用Docker Container啟動服務

使用下方指令將系統啟動

  • docker run -d -p 8081:8081 --name gs grpcserver:v1.0.0
  • docker run -d -p 8080:8080 --link gs:gs --name hs httpserver:v1.0.0
➜  ~ docker run -d -p 8081:8081 --name gs grpcserver:v1.0.0
2da78ab780606f6ef95c3c1fbb9de83599e7a743d72f375827cd44d7c514eadb
➜  ~ docker run -d -p 8080:8080 --link gs:gs --name hs httpserver:v1.0.0
f7e5b9c1379d79a8b72b41e7f15746fed30dda3526315d2bc94253f97d275761
➜  ~ docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
f7e5b9c1379d        httpserver:v1.0.0   "./httpserver"      13 seconds ago      Up 12 seconds       0.0.0.0:8080->8080/tcp   hs
2da78ab78060        grpcserver:v1.0.0   "./grpcserver"      22 seconds ago      Up 21 seconds       0.0.0.0:8081->8081/tcp   gs
➜  ~

大家一定很好奇為什麼會有--link,之前我們提過容器之間是相互隔離的,因此我們需要透過--link來把hs和gs的container連接在一起。

測試服務

➜  ~ curl 'http://127.0.0.1:8080/ping'
ping ok
➜  ~ curl -X POST 'http://127.0.0.1:8080/user/add' --data-binary '{"username":"a00017", "password":"1081"}'
使用者新增成功
➜  ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a00017", "password":"1081"}'
使用者登入成功
➜  ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a0001", "password":"1081"}'
使用者登入失敗
➜  ~ curl -X POST 'http://127.0.0.1:8080/user/add' --data-binary '{"username":"a00017", "password":"1081"}'
使用者已新增過
➜  ~ curl -X POST 'http://127.0.0.1:8080/user/add' --data-binary '{"username":"a00018", "password":"0000"}'
使用者新增成功
➜  ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a00018", "password":"0001"}'
使用者登入失敗
➜  ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a00018", "password":"0000"}'
使用者登入成功
➜  ~ curl 'http://127.0.0.1:8080/user/list'
["a00017","a00018"]

範例程式都放在github,有需要請自行下載


上一篇
Day12 Dockerfile
下一篇
Day14 Docker Compose
系列文
微服務系統建置與監控30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言