Docker 201:2020 年使用 NGINX 作为 NodeJS 服务器的反向代理!📦🙌(实用指南)
我将跳过“什么是/为什么使用 Docker?”部分,直接进入正题!🤝
目标:我们将使用 NGINX 作为 NodeJS 服务器的反向代理。⧚
为此,我将使用来自 Docker Hub 的 2 个 Docker 镜像 - 一个用于 NodeJS,另一个用于 NGINX 🤞
让我们看看实际效果!
我已经安装了-
- NodeJS
- Docker
我们将创建一个简单的 Node 服务器。我们将使用http
Node 中的模块并创建一个简单的 http 服务器。server.js
文件包含我们服务器的代码:
var http = require('http');
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Node & Docker Running...");
});
server.listen(3333);
console.log("Node HTTP Server started at http://localhost:3333/");
如果我们node server.js
在终端上运行,它将在本地主机的 3333 端口启动服务器。
我们可以打开浏览器,点击“运行” http://localhost:3333/
,然后可以看到服务器正在发送文本“Node & Docker Running...”。
太棒了👏
现在,我们要为我们的 Node 服务器创建一个 docker 镜像。为此,我们需要Dockerfile
使用以下命令创建一个名为的文件:
FROM mhart/alpine-node
COPY server.js .
EXPOSE 3333
CMD node server.js
在这里,我使用mhart/alpine-node
(最小 Node.js Docker 镜像)来构建 NodeJS 环境。
EXPOSE 3333
意思是——3333
端口即将被发布。
现在我们已经Dockerfile
准备好了,我们将从这个文件构建一个 Docker 镜像。我们可以在终端上运行:
docker build -t docknode .
*这里docknode
是图片名称。我们可以使用任何名称。
我现在将运行docker镜像,它将为我们创建一个容器-
docker run -d -p 3333:3333 --name node-server docknode
我已经使用了-d
它,它将有助于在后台运行容器。
运行此命令后,我们的 NodeJS 服务器应该在名为 的 Docker 容器内运行node-server
。
现在,如果我打开任何浏览器并点击http://localhost:3333
,我们就可以看到服务器正在运行 🎉
好的,太棒了!由于 Node Docker 镜像中的 NodeJS 服务器正在运行,接下来我们需要添加 NGINX 反向代理。
我们将使用 DockerHub 上的官方 NGINX 镜像。
让我们创建一个Dockerfile
。
FROM nginx
COPY default.conf /etc/nginx/conf.d/
我将创建一个名为default.conf
NGINX 的文件,其配置如下 -
server {
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://server:3333;
}
}
请注意,此处的配置中,我们有http://server:3333
。这3333
是来自 NodeJS Docker 容器的端口。我将server
在本文后面讨论这部分。
让我们进入终端并运行-
docker build -t docknginx .
这将为 NGINX 构建 docker 镜像。运行该命令后,我们将看到类似以下内容:
并且,为了验证我们的图像在本地机器上可用,我们可以运行以下命令来查看列表-
docker images
太棒了!我们可以看到我们的两张图片都在这里了👏
由于我们的目标是让 NGINX 作为 NodeJS 服务器的反向代理。因此,当我们运行 NGINX 镜像时,我们需要将 NodeJS 服务器链接到 NGINX。
为此,我将在终端上运行以下命令-
docker run -d -p 8080:80 --link node-server:server --name nginx-proxy docknginx
这里,--link
它帮助将我们的 NodeJS 容器链接到这个 NGINX 容器。如果你仔细检查一下,会发现我将 NodeJS 容器命名为node-server
。它:server
在我们的 NGINX 配置中使用。🤝
运行命令后,如果我们现在转到浏览器并点击http://localhost:8080/
,我们可以看到我们的 NodeJS 应用程序现在正在此端口上运行🎉
我们实际上是通过 NGINX 访问 NodeJS 服务器,因为它在这里充当反向代理。
太棒了🙌
希望你喜欢它。如果你还没用过 Docker,我觉得你应该在 2020 年尝试一下!
下篇文章再见。
到那时,
干杯!
👋
由于我正在尝试在网络上贡献内容,你可以给我买一杯咖啡作为我花在这些内容上的几个小时的回报❤️😊🌸