node 在linux上运行的程序,如何在docker容器中运行node程序

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。

准备demo程序

index.js

'use strict';

const express = require('express');

// Constants

const PORT = 6677;

const HOST = '0.0.0.0';

// App

const app = express();

app.get('/', (req, res) => {

res.send('

Hello world

');

});

app.listen(PORT, HOST);

console.log(`Running on http://${HOST}:${PORT}`);

复制代码根目录新建Dockerfile文件

# 定义我们需要从哪个镜像进行构建

FROM node:8

# 在镜像中创建一个文件夹存放应用程序代码,这将是你的应用程序工作目录

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080

CMD [ "node", "index.js" ]

复制代码.dockerignore文件

node_modules

npm-debug.log

复制代码

这将避免你的本地模块以及调试日志被拷贝进入到你的 Docker 镜像中

构建镜像

进入到 Dockerfile 所在的那个目录中,运行以下命令构建 Docker 镜像。开关符 -t 让你标记你的镜像

//Don’t forget the . character at the end, which sets the build context to the current directory.

docker build -t chenkai/node-web-app:v1.0.0 .

复制代码

检测镜像是否构建成功docker images | grep node-web-app 可以看到构建的镜像

运行镜像,使用 -d 模式运行镜像将以分离模式运行 Docker容器,使得容器在后台自助运行。开关符-p 在容器中把一个公共端口导向到私有的端口,请用以下命令运行你之前构建的镜像

docker run -p 对外暴漏端口:容器内部端口 -d chenkai/应用名称:版本

//如

docker run -p 4444:6677 -d chenkai/node-web-app:v1.0.0

复制代码

docker ps | grep node-web-app可以看到启动的容器

docker logs -f ${CONTAINER ID }可以看到容器输出的日志

浏览器中输入通过容器暴露出的端口http://localhost:4444/即可访问镜像中的node程序

注意事项

npm包大小写

一次构建镜像后提示缺少npm包错误,原因是因为mac开发下对文件名大小写不敏感,程序可以正常跑通,打包成镜像后基础镜像基于linux,对文件大小写敏感,找不到对应库

dockerfile

一次运行容器报sh: app.js,: unknown operand错误,原因是dockerfile文件里面

CMD [ "node", 'app.js' ]

复制代码

js养成了引号、双引号的习惯没检查出来,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值