我有一个要部署到Kubernetes的node.js应用程序。要在不使用Kubernetes的情况下在我的机器上正常运行它,我将运行命令npm install和npm run build,然后提供“ dist”文件夹。通常我会使用“ npm install -g serve”安装npm的服务,然后运行“ serve -s dist”。这很好。但是现在部署到Kubernetes进行生产时,如何创建映像?我的意思是docker文件应该如何看起来像这样吗?
注意:我不想使用nginx,apache或任何类型的Web服务器。我想使用node / npm的服务器来服务dist文件夹。请帮助
Dockerfile(我尝试过的)
FROM node:8
WORKDIR /usr/src/app
COPY /dist
RUN npm install -g serve
serve -s dist
我确定这个dockerfile是否正确,所以我需要有关如何正确创建映像以为npm的dist文件夹运行build.Plz帮助的指南吗?
答案 0 :(得分:0)
我认为您可以在全球范围内找到大量有关Kubernetes集群中客户Web应用程序集成的教程,并将它们进一步展示给服务访问者。
实际上,在Docker环境中容器化的应用程序必须从Image移植到特定的Dockerfile或在Docker Compose工具中构建,以便保留所有应用程序的服务依赖当映像准备就绪时,可以将其存储在公共DockerHub或隔离的Private registry中,因此Kubernetes容器runtime然后提取此映像并在其中创建适当的工作负载(Pods)集群根据声明的资源model。
我建议以下情况:
从最初的---------------------------------------------
TransactionId | Amount | Account| crdr |
---------------------------------------------
1 | 100 | 11111 | 1 |
1 | 100 | 12111 | 2 |
2 | 130 | 13133 | 1 |
2 | 130 | 13233 | 2 |
构建docker映像(我已进行了一些更正):
Dockerfile
FROM node:8
WORKDIR /usr/src/app
COPY dist/ ./dist/
RUN npm install -g serve
创建与源图像相关的tag:
$ sudo docker image build <PATH>
将映像导出到 DockerHub 或某些私有注册表:
$ sudo docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
创建相关的Kubernetes工作负载(Pod)并将其应用于Kubernetes集群,在容器内启动Node服务器,在$ sudo docker push [OPTIONS] NAME[:TAG]
端口上侦听:
5000
如果您考虑向外部群集客户端公开应用程序,请查看NodePort服务:
apiVersion: v1
kind: Pod
metadata:
name: nodetest
labels:
node: test
spec:
containers:
- name: node-test
image: TARGET_IMAGE[:TAG]
ports:
- containerPort: 5000
command: [ "/bin/bash", "-ce", "serve -s dist" ]
更新_1:
然后可以在主机上某个特定端口上访问应用程序服务,您可以简单地检索以下端口值:
$ kubectl expose po nodetest --port=5000 --target-port=5000 --type=NodePort
更新_2:
要在某个所需的端口上公开kubectl get svc nodetest -o jsonpath='{.spec.ports[0].nodePort}'
服务,只需应用以下清单,即可分配30000个端口:
NodePort