如何在全栈应用程序中容器化Angular服务?

时间:2018-08-08 15:53:37

标签: angular docker docker-compose angular-cli dockerfile

我是Docker和容器化的新手。我有一个用于后端服务的Spring Boot应用程序,前端使用AngularCLI / Angular4。我尝试使用下面的代码来容器化角度服务,并且运行docker-compose up命令给出以下错误:

  

找不到本地工作区文件('angular.json')。错误:本地   找不到工作区文件('angular.json')。   在WorkspaceLoader._getProjectWorkspaceFilePath(/usr/local/lib/node_modules/@angular/cli/models/workspace-loader.js:44:19)

这是我的 Dockerfile:

FROM node:8.11-alpine as node-angular-cli

WORKDIR src/main/java/frontend

RUN npm install -g @angular/cli

EXPOSE 4200

CMD ["ng", "serve", "--proxy", "-", "config", "proxy.conf.json"]

docker-compose.yaml

version: '3'

services:

  db:
      image: mysql:latest
      restart: always
      environment:
        MYSQL_DATABASE: root
        MYSQL_ROOT_PASSWORD: root
        MYSQL_USER: root
        MYSQL_PASSWORD: root
      ports:
        - "3306:3306"
  angular:
      build:
        context: .
        dockerfile: Dockerfile
      ports:
        - "4200:4200"

是否有更好的方法来容器化此应用程序?我成功地将整个应用程序进行了容器化,但是前端部分似乎无法正常工作,因为在容器化时,我没有包括启动和运行角度服务所需的配置(ng serve cmd及其相关的安装详细信息)因此,创建一个新的DockerFile(如上所示)?我可以仅使用一个Dockerfile来同时运行这两个服务吗?

1 个答案:

答案 0 :(得分:0)

我在Dockerfile中使用以下步骤来容器化Angular应用。

FROM johnpapa/angular-cli as angular-built
WORKDIR /usr/src/app
COPY package.json package.json
RUN npm install --silent
COPY . .
RUN ng build --prod

FROM nginx:alpine
LABEL author="Preston Lamb" 
COPY --from=angular-built /usr/src/app/dist /usr/share/nginx/html
EXPOSE 80 443
CMD [ "nginx", "-g", "daemon off;" ]

第一步是构建Angular图像(此示例具有--prod标志,但是您可以将其更改为--env=test),然后将构建的应用程序复制到基于NGINX的图像中。服务应用程序。