使用 Node js 将 Angular 应用程序作为 docker 镜像运行
Posted
技术标签:
【中文标题】使用 Node js 将 Angular 应用程序作为 docker 镜像运行【英文标题】:Running Angular app as docker image using Node js 【发布时间】:2019-11-04 07:51:45 【问题描述】:尝试在 docker 中构建 Angular 应用程序并使用 Node js 在我的本地作为容器运行。
我已经使用下面的 Dockerfile 构建映像,但我不确定我在运行时缺少什么。谁能指出我?
Dockerfile:
FROM node:10.15.3
ENV HOME=/home
WORKDIR $HOME
RUN npm config set strict-ssl false \
&& npm config set proxy http://proxy.xxxxxx.com:8080
COPY package.json .
RUN npm install
使用以下命令成功创建图像
docker build -t example .
我正在尝试使用以下命令运行映像,但它没有帮助
docker run -p 4201:4200 example
【问题讨论】:
你想达到什么目的?您的构建映像只会为您的 Angular 应用程序安装依赖项。 执行上述 docker run 命令后,我没有看到 docker 容器正在运行。我已经使用 docker ps 进行了验证。 如果我是你,我会添加有关这是用于生产还是开发用例的详细信息。基于此,您可能会得到不同的答案。基本上ng
cli 不适合在生产中为应用程序提供服务。你应该使用合适的服务器,比如 nginx 或类似的东西。
【参考方案1】:
您的 Dockerfile 不会运行/服务于您的应用程序,为此您必须:
安装 angular/cli 复制应用程序 运行/提供应用程序FROM node:10.15.3
RUN npm config set strict-ssl false \
&& npm config set proxy http://proxy.xxxxxx.com:8080
# get the app
WORKDIR /src
COPY . .
# install packages
RUN npm ci
RUN npm install -g @angular/cli
# start app
CMD ng serve --host 0.0.0.0
希望这会有所帮助。
【讨论】:
JFYI,使用ng serve
在生产环境中运行 Angular 应用程序不是最佳实践。
对于完整的 Docker 初学者,如果你想在 Docker 中运行 Angular,这篇文章可能会有所帮助thecodeframework.com/…【参考方案2】:
容器需要一个前台进程运行,然后它不会退出。如果没有,容器将直接退出。
对于您的情况,您需要在docker build
时将您的nodejs 项目COPY
到容器中,并且还需要在CMD
中启动项目,例如CMD [ "npm", "start" ]
。由于网络服务器没有退出,那么你的容器也不会退出。
一篇很好的文章 here 供您参考,了解如何对 Node.js Web 应用程序进行 docker 化。
【讨论】:
这篇文章非常好,了解了每个步骤的一些基本点。【参考方案3】:只需更新您的 Dockerfile 即可实现您的目标,更多选项请参阅here:
# base image
FROM node:12.2.0
RUN npm config set strict-ssl false \
&& npm config set proxy http://proxy.xxxxxx.com:8080
# install chrome for protractor tests
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update && apt-get install -yq google-chrome-stable
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install
RUN npm install -g @angular/cli@7.3.9
# add app
COPY . /app
# start app
CMD ng serve --host 0.0.0.0
【讨论】:
【参考方案4】:也试试下面的 Dockerfile!
FROM node:alpine
# get the app
WORKDIR /src
# install packages
RUN npm ci
RUN npm install -g @angular/cli
COPY package.json .
RUN npm install
COPY . .
# start app
CMD ["ng", "serve", "-o"]
【讨论】:
以上是关于使用 Node js 将 Angular 应用程序作为 docker 镜像运行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?
如何将 Angular 4 添加到现有的 node.js 应用程序
使用 Node 的 http 模块提供 angular.min.js [重复]