如何创建AngularJS应用的Docker容器?

mnemlml8  于 2023-09-30  发布在  Angular
关注(0)|答案(4)|浏览(183)

我有一个AngularJS应用程序,它具有以下结构:

app/
----- controllers/
---------- mainController.js
---------- otherController.js
----- directives/
---------- mainDirective.js
---------- otherDirective.js
----- services/
---------- userService.js
---------- itemService.js
----- js/
---------- bootstrap.js
---------- jquery.js
----- app.js
views/
----- mainView.html
----- otherView.html
----- index.html

我该如何创建自己的镜像并在容器上运行它呢?我试过用Dockerfile运行它,但没有成功,我对Docker相对较新,所以如果这很简单,我道歉。我只是想在http服务器上运行它(也许使用nginx?))
我试过这些方法,但没有成功:

x9ybnkn6

x9ybnkn61#

首先,遵循这个最佳实践指南来构建你的Angular 应用结构。index.html应该放在根文件夹中。我不知道如果下面的步骤将工作,如果它不在那里。
要使用nginx,您可以遵循这个小教程:Dockerized Angular app with nginx
1.在应用的根文件夹中创建一个Dockerfile(在index.html旁边)

FROM nginx
COPY ./ /usr/share/nginx/html
EXPOSE 80

2.在Dockerfile的文件夹中运行docker build -t my-angular-app .
3. docker run -p 80:80 -d my-angular-app然后您可以访问您的应用程序http://localhost

fivyi3re

fivyi3re2#

基于@adebasi的答案,我想强调this Dockerfile将用于当前的Angular CLI应用程序。
它使用了17.05中引入的Dockers的multi-stage build feature。在步骤1中,Node容器仅用于创建构建。最终的图像将使用Nginx并静态交付构建的文件。

### STAGE 1: Build ###    
# We label our stage as 'builder'
FROM node:8-alpine as builder

COPY package.json package-lock.json ./

RUN npm set progress=false && npm config set depth 0 && npm cache clean --force

## Storing node modules on a separate layer will prevent 
## unnecessary npm installs at each build
RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app

WORKDIR /ng-app

COPY . .

## Build the angular app in production mode and store the artifacts in dist folder
RUN $(npm bin)/ng build --prod --build-optimizer

### STAGE 2: Setup ###

FROM nginx:1.13.3-alpine

## Copy our default nginx config
COPY nginx/default.conf /etc/nginx/conf.d/

## Remove default nginx website
RUN rm -rf /usr/share/nginx/html/*

## From 'builder' stage copy over the artifacts in dist folder 
## to default nginx public folder
COPY --from=builder /ng-app/dist /usr/share/nginx/html

CMD ["nginx", "-g", "daemon off;"]
vaj7vani

vaj7vani3#

一般而言,
Docker用于将应用对接。现在一个应用程序不仅仅是由JavaScript组成的(因为AngularJS是一个JS框架),除非你选择一个后端框架,如Node,ASP.NET Core,Python等。因此,如果您只有简单的HTML应用程序,请使用Robbie提到的反向代理或Web服务器容器。举一个简单的例子(Nginx的例子):

  • 从Hub下载Nginx Docker镜像。
  • 使用卷或创建自己的映像来保存配置
  • 从容器向主机公开端口。
hfwmuf9z

hfwmuf9z4#

从angular项目的package-lock.json文件中获取app-name

# Stage 1
FROM node:latest as node
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build  --prod
# Stage 2
FROM nginx:alpine
COPY --from=node /app/dist/{app-name} /usr/share/nginx/html

相关问题