在本文中,将探讨如何在Windows Server Core 2016上部署运行在MicrosoftIIS10上的Node.js Web应用程序到Docker的Windows Server Core 2016容器中。本文的目标读者将了解到如何在Windows上安装和配置Docker,以及如何通过创建和使用Dockerfile来部署Node.js Web应用程序,本文将详细讨论这一过程。
在本文中部署和运行Web应用程序之前,首先必须在Windows Server上安装Docker。为此,必须从Docker网站下载安装文件,访问以下链接:
在下载特定文件之前,必须创建一个Docker账户。下载Docker安装文件后,现在可以运行Docker安装程序。
在本段落中,将展示如何创建一个Dockerfile,用于自动构建Windows Server Core 2016实例,预配置为在Microsoft IIS 10下运行Node.jsWeb应用程序。在此步骤中,所要做的就是:
为了完成所有这些步骤,需要在Dockerfile中添加以下行:
FROM microsoft/windowsservercore:latest
WORKDIR /inetpub/wwwroot
COPY sources/ .
COPY sources/node_modules/webworker-threads C:/Users/ContainerAdministrator/AppData/Roaming/npm/node_modules/webworker-threads
COPY /sources/package*.json ./
接下来,必须向正在创建的Windows Server Core 2016镜像添加Microsoft IIS 10 Web服务器角色:
RUN powershell Add-WindowsFeature Web-Asp-Net45,Web-Http-Tracing,Web-Scripting-Tools,Web-WebSockets;
下一个重要步骤是提供指令,以自动安装Web应用程序运行所需的软件组件:
ADD https://nodejs.org/dist/v8.11.4/node-v8.11.4-x64.msi node-v8.11.4-x64.msi
RUN powershell Start-Process msiexec -ArgumentList '/i node-v8.11.4-x64.msi /qn /l*v nodejs.log' -Wait ;
ADD http://go.microsoft.com/fwlink/?LinkID=615137 rewrite_amd64.msi
RUN powershell Start-Process msiexec -ArgumentList '/i rewrite_amd64.msi /qn /l*v rewrite.log' -Wait ;
ADD https://github.com/tjanczuk/iisnode/releases/download/v0.2.21/iisnode-full-v0.2.21-x64.msi iisnode-full-v0.2.21-x64.msi
RUN powershell Start-Process msiexec -ArgumentList '/i iisnode-full-v0.2.21-x64.msi /qn /l*v iisnode.log' -Wait ;
具体来说,必须安装Node.js v8.11.4、URL Rewrite和IISNode组件,以供Microsoft IIS 10 Web服务器使用。为了下载这些组件,必须使用ADD指令,该指令使用wget功能下载所需的安装文件并将其保存到正在创建的镜像中。
成功下载并安装Node.js后,需要安装Web应用程序运行所需的Node.js模块数量。为此,向Dockerfile添加以下行:
RUN powershell npm install --global --production npm
RUN powershell npm install --global --production node-gyp
RUN powershell npm --vcc-build-tools-parameters='[""--allWorkloads""]' install --global --production windows-build-tools
为此,使用npm install命令下载并安装特定的Node.js模块,如npm、node-gyp和Visual Studio 2017的构建工具。
另一个重要的配置步骤是,需要设置特定Node.js模块正常运行所需的环境变量数量:
ENV PATH 'C:\users\containeradministrator\.windows-build-tools\Python27;C:\Program Files (x86)\MSBuild\14.0\bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\nodejs;C:\Users\ContainerAdministrator\AppData\Local\Microsoft\WindowsApps;C:\Users\ContainerAdministrator\AppData\Roaming\npm;'
ENV PYTHON '%USERPROFILE%\.windows-build-tools\Python27\python.exe'
ENV PYTHONPATH '%USERPROFILE%\.windows-build-tools\python27'
ENV VCTargetsPath "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140"
ENV NODE_PATH "C:\Users\ContainerAdministrator\AppData\Roaming\npm\node_modules"
最后,还需要下载并安装Web应用程序运行所需的Node.js模块:
RUN powershell npm install --global --production body-parser busboy cluster consolidate cookie-parser debug express express-fileupload favicon http logger math net path querystring url util jade bindings
之后,需要指定TCP端口(例如,TCP-8080端口),该端口将被Web应用程序监听,并提供应用程序的入口点:
EXPOSE 8080
ENTRYPOINT node.exe ./server.js
要使用在前一步中创建的Dockerfile构建镜像,必须进入PowerShell控制台并执行以下命令:
PS C:\antispamnb> docker build --no-cache -t nodejs-core .
由于已经构建了nodejs-core镜像,现在可以运行Web应用程序,通过输入以下命令:
PS C:\antispamnb> docker run -d -p 80:8080 --restart=always --name=antispamnb nodejs-core