Docker 如何在kubernetes中部署npm运行构建的dist文件夹?

Docker 如何在kubernetes中部署npm运行构建的dist文件夹?,docker,npm,kubernetes,Docker,Npm,Kubernetes,我有一个node.js应用程序,我正试图部署到Kubernetes。要在我的机器上正常运行而不使用Kubernetes,我将运行命令npm install和npm run build,然后为dist文件夹提供服务。通常我会使用npm安装-g serve安装npm的serve,然后运行serve-s dist。这很好。但是现在要部署到Kubernetes进行生产,我如何创建我的映像?我的意思是,这个docker文件应该是什么样子 注意:我不想使用nginx、apache或任何类型的web服务器。我

我有一个node.js应用程序,我正试图部署到Kubernetes。要在我的机器上正常运行而不使用Kubernetes,我将运行命令npm install和npm run build,然后为dist文件夹提供服务。通常我会使用npm安装-g serve安装npm的serve,然后运行serve-s dist。这很好。但是现在要部署到Kubernetes进行生产,我如何创建我的映像?我的意思是,这个docker文件应该是什么样子

注意:我不想使用nginx、apache或任何类型的web服务器。我想使用node/npm的服务器为dist文件夹提供服务。Plz帮助

Dockerfile我试过的

FROM node:8

WORKDIR /usr/src/app

COPY /dist

RUN npm install -g serve

serve -s dist



我确信此dockerfile是否正确。因此,我需要有关如何正确创建image to service dist文件夹(npm run build.Plz help?

我认为您可以在全球范围内找到大量关于Kubernetes群集中客户web应用程序集成的教程,并进一步向服务访问者公开这些教程

实际上,在环境中封装的应用程序必须从工具中移植或在工具中构建,以保持应用程序的所有服务依赖性;当映像准备就绪时,它可以公开存储或隔离存储,因此Kubernetes容器随后会提取该映像,并根据声明的资源在集群内创建适当的工作负载

我建议采用以下方案:

根据您的初始docker文件构建docker映像我做了一些更正:

FROM node:8

WORKDIR /usr/src/app

COPY dist/ ./dist/

RUN npm install -g serve
$sudo docker图像构建

创建与源映像相关的文件:

$sudo docker标记源\图像[:标记]目标\图像[:标记]

将图像导出到DockerHub或某些专用注册表:

$sudo docker push[选项]名称[:标记]

创建相关的Kubernetes workloadPod并将其应用于Kubernetes群集,启动容器内的节点服务器,侦听5000端口:

如果考虑为外部群集客户端公开应用程序,则查看服务:

$kubectl暴露po节点测试-端口=5000-目标端口=5000-类型=NodePort

更新1:

然后,应用程序服务可能可以在主机上的某个特定端口内访问,您只需检索此端口值:

kubectl get svc nodetest-o jsonpath='{.spec.ports[0].nodePort}'

更新2:

为了在某些所需端口上公开NodePort服务,只需应用以下清单,即端口分配:

apiVersion: v1
kind: Service
metadata:
  labels:
    node: test
  name: nodetest
spec:
  ports:
  - nodePort: 30000
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    node: test
  type: NodePort

您好,我尝试了您所说的,但我的连接被拒绝确实,当您应用NodePort服务类型时,k8s从范围默认值中分配一些端口:30000-32767,它将代理主机上的目标服务5000端口,请参阅我答案中的更新部分。好的,如何将其公开到特定的nodeport值,如30000?最后一个问题…是否可以使用部署来代替pod?是的,我刚刚解释了pod的基本内容,但是,一旦决定控制pod副本和所有其他功能,您可以转移到一些高级资源,如部署。
apiVersion: v1
kind: Service
metadata:
  labels:
    node: test
  name: nodetest
spec:
  ports:
  - nodePort: 30000
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    node: test
  type: NodePort