使用 Go 和 ReactJS 构建聊天系统(六):Docker 化后端

项目完整源码

在本节中,我们将专注于将 Docker 添加到我们的后端应用程序中。

您现在可能会问为什么我们要这样做? 因为在我们研究身份验证,负载平衡和部署之类的东西之前,最好有一种使用容器化技术来部署我们的应用程序的标准方法。

为什么选择 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 的弹性容器服务来部署和运行我们的容器,只需几个命令。

相反,如果我们想使用谷歌的云,我们可以将其部署到他们的容器中,而不需要额外的工作!这只是容器化对发展的巨大好处之一。

前端没有 Docker 吗?

在这一点上,您可能想知道为什么我们对 frontend/ 应用程序没有做同样的事情?原因是我们打算将此前端应用程序部署到 AWS S3 存储桶之类的应用程序中。

在生产时,我们不需要任何花哨的前端服务,我们只需要能够可靠地服务于内置前端文件的东西。

总结

因此,在本节中,我们设法将 Docker 添加到我们的后端应用程序中,以及在继续开发和部署方面如何使我们(对于开发人员)受益。

本文译自tutorialedge

本作品采用《CC 协议》,转载必须注明作者和本文链接
最初的时候也是最苦的时候,最苦的时候也是最酷的时候。
讨论数量: 1

非常好的教程,全是干货~

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!