目标
我们将使用 NGINX 作为 NodeJS 服务器的反向代理
将使用来自 Docker Hub 的 2 个 Docker 镜像:
- NodeJS
- NGINX
环境
- NodeJS
- Docker
示例
NodeJS HTTP服务
我们将创建一个简单的节点服务器。我们将使用httpnode 中的模块并制作一个简单的 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/
现在,我们要为我们的节点服务器创建一个 docker 镜像。为此,我们需要创建一个Dockerfile使用以下命令命名的文件
FROM mhart/alpine-node
COPY server.js .
EXPOSE 3333
CMD node server.js
在这里,我使用了mhart/alpine-node
(Minimal Node.js Docker Image)来拥有 NodeJS 环境
EXPOSE 3333
意味着 3333
作为访问端口
现在我们已经Dockerfile
准备好了,我们将从这个文件构建一个 Docker 镜像
docker build -t docknode .
我现在将运行 docker 镜像,它将为我们创建一个容器
docker run -d -p 3333:3333 --name node-server docknode
运行此命令后,我们的 NodeJS 服务器应该在名为 的 Docker 容器内运行node-server
Nginx 反代
Node Docker 镜像中的 NodeJS 服务器正在运行,接下来我们需要添加 NGINX 反向代理
使用来自 DockerHub 的官方 NGINX 镜像
FROM nginx
COPY default.conf /etc/nginx/conf.d/
default.conf
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
容器的端口
docker build -t docknginx .
为了验证我们的图像在我们的本地机器上可用,我们可以运行以下命令来查看镜像列表
docker images
运行 Nginx 反代服务器容器
docker run -d -p 8080:80 --link node-server:server --name nginx-proxy docknginx
运行命令后,如果我们现在转到浏览器并点击http://localhost:8080/
,我们可以看到我们的 NodeJS 应用程序现在正在这个端口上运行
我们实际上是通过 NGINX 访问 NodeJS 服务器,因为它在这里用作反向代理
发表评论 取消回复