使用 Go 和 ReactJS 構建聊天系統(六):Docker 化後端

SmauelL發表於2020-01-20

專案完整原始碼

在本節中,我們將專注於將 Docker 新增到我們的後端應用程式中。

您現在可能會問為什麼我們要這樣做? 因為在我們研究身份驗證,負載平衡和部署之類的東西之前,最好有一種使用容器化技術來部署我們的應用程式的標準方法。

如果這是您第一次瞭解 Docker 和容器化技術,那麼您可能會質疑我們為什麼使用它?

對我來說,主要的原因之一是它使部署變得非常容易。您可以將基於 Docker 的應用程式部署到支援 Docker 的任何伺服器或平臺。

這意味著無論您將其部署到何處,都可以使用單個命令來啟動應用程式。

不僅如此,它還消除了「它可以在我的機器上工作」的問題,因為在 Dockerfile 中,您指定了應用程式啟動所需的確切環境。

您需要做的第一件事是在您的機器上安裝 Docker。這可以在這裡完成: Docker - 開始

一旦您安裝了 docker 並使其在本地執行,我們就可以深入建立 Dockerfile 了:

FROM golang:1.11.1-alpine3.8
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go mod download
RUN go build -o main ./...
CMD ["/app/main"]

定義 Dockerfile 後,我們可以繼續使用 docker cli 構建我們的 Docker 映象:

注意: 如果您的網路速度很慢,則下一條命令可能需要一段時間才能執行,但是由於快取,後續命令的執行速度會大大提高。

$ docker build -t backend .
Sending build context to Docker daemon  11.26kB
Step 1/8 : FROM golang:1.11.1-alpine3.8
 ---> 95ec94706ff6
Step 2/8 : RUN apk add bash ca-certificates git gcc g++ libc-dev
 ---> Running in 763630b369ca
 ...

成功完成 build 步驟後,我們可以嘗試這樣執行:

$ docker run -it -p 8080:8080 backend
Distributed Chat App v0.01
WebSocket Endpoint Hit
Size of Connection Pool:  1
&{ 0xc000124000 0xc0000902a0 {0 0}}
Message Received: {Type:1 Body:test}
Sending message to all clients in Pool

如您所見,在執行此命令並重新整理客戶端後,我們可以看到現在連線到 Docker-ized 的應用程式的連線,並且可以看到日誌檔案正在列印到終端上。

如果我們現在想把這個應用程式部署到 AWS 之類的應用程式上,我們已經大大簡化了這方面的工作。我們可以利用 AWS 的彈性容器服務來部署和執行我們的容器,只需幾個命令。

相反,如果我們想使用谷歌的雲,我們可以將其部署到他們的容器中,而不需要額外的工作!這只是容器化對發展的巨大好處之一。

在這一點上,您可能想知道為什麼我們對 frontend/ 應用程式沒有做同樣的事情?原因是我們打算將此前端應用程式部署到 AWS S3 儲存桶之類的應用程式中。

在生產時,我們不需要任何花哨的前端服務,我們只需要能夠可靠地服務於內建前端檔案的東西。

因此,在本節中,我們設法將 Docker 新增到我們的後端應用程式中,以及在繼續開發和部署方面如何使我們(對於開發人員)受益。

本文譯自tutorialedge

本作品採用《CC 協議》,轉載必須註明作者和本文連結

最初的時候也是最苦的時候,最苦的時候也是最酷的時候。

相關文章