手机扫一扫访问本页内容

微信扫描点右上角"···"分享到好友或朋友圈

关闭
微信扫一扫可打开小程序

微信长按图片或搜“分享录”可打开小程序

关闭

使用Docker搭Node.js环境

官网介绍Node.js是一个开源、跨平台的JavaScript运行时环境。(Node.js is an open-source, cross-platform JavaScript runtime environment.)

本文三种方式讲解如何在docker中搭nodejs环境。

直接用命令

可以通过“docker search node”搜索nodejs镜像。

通过“docker pull node”拉最新镜像,需要拉指定版本加上对应的TAG。

通过“docker images”查看镜像。

通过“docker run -itd –name nodejs -p 3000:3000 node:latest”将镜像运行到容器中,通过“docker exec -it nodejs /bin/sh”进入nodejs容器,通过“node -v”、“npm -v”查看到nodejs、npm版本信息就已经搭好了。

接下来写个“Hello World”。

先“docker rm nodejs -f”删除nodejs容器,创建目录并映射到容器中且指定该目录为工作目录,然后在该目录下创建内容如下的“demo.js”文件。

const http = require('http');

// const hostname = '127.0.0.1';
const hostname = '172.17.0.2';//要通过docker inspect查看具体IP
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
  console.log('Connecting Success');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

然后通过“docker run -itd –name nodejs -p 3000:3000 -v /Users/xubingtao/docker/nodejs:/workdir -w /workdir node:latest”再次运行nodejs镜像到容器中。

然后通过“docker exec -it nodejs /bin/sh”再进入nodejs容器,然后执行“node demo.js”,最后到浏览器访问“http://localhost:3000”即可看到如下效果。

需要注意的是上面的“hostname”要通过docker inspect查看具体IP,另外可以直接运行“docker run -itd –name nodejs -p 3000:3000 -v /Users/xubingtao/docker/nodejs:/workdir -w /workdir node:latest node demo.js”就不用再进入容器执行“node demo.js”了。

用Dockerfile文件构建

Dockerfile文件内容如下。

# 若不指定TAG则默认用latest
FROM node:alpine

# 项目在docker里面的工作目录,/workdir只是随意指定的目录而已
WORKDIR /workdir

# 把当前目录下的所有文件添加到docker里面的/workdir目录
ADD . /workdir

# build docker镜像时运行npm命令
#RUN npm install

# 暴露3000端口
EXPOSE 3000

#启动容器时执行的命令
#CMD ["npm", "run"]

然后在Dockerfile文件路径下执行“docker build -t xubingtao/node:latest .”,需要注意的是不用在Dockerfile中添加npm相关执行命令,不然会报错。

然后再通过“docker run -itd –name node_js -p 3000:3000 -v /Users/xubingtao/docker/nodejs:/workdir -w /workdir xubingtao/node:latest node demo.js”运行镜像即可以实现上面的效果。

用docker-compose.yml构建

docker-compose.yml文件内容如下。

version: "3.8"
services:
  node-js:
    labels:
      maintainer: "Maintainers www.xubingtao.cn"
#    hostname: node-js
    build:
      context: . #Dockerfile的路径或URL
      dockerfile: Dockerfile
    image: xubingtao/node:latest2
    container_name: node-js
    ports:
      - "3000:3000"
    volumes:
      - /Users/xubingtao/docker/nodejs:/workdir
    working_dir: /workdir
    network_mode: "default"
    stdin_open: true #相当于 run 命令中的 -d
    tty: true #相当于 run 命令中的 -i

然后在docker-compose.yml文件路径下执行“docker compose up -d”或“docker-compose up -d”,或者执行“docker compose -f xxx.yml up -d”或“docker-compose -f xxx.yml up -d”,来构建镜像并运行容器服务。

需要注意的是docker-compose.yml文件中必须加入“stdin_open: true”和“tty: true”,不然无法运行容器,而且通过“docker logs”或“docker compose logs”或“docker-compose logs”都无法查找到任何日志,在Docker Desktop上勉强可以看到“1970-01-01 08:00:00 node-js exited with code 0”,这一点估计坑了很多人很多时间!

需要那三个文件的可以到我公众号发送“s4482”关键字获取,更多相关内容可以查看docker系列


历史上的今天:

展开阅读全文


上一篇:

下一篇:

服务器又要到期了鼓励一下吧
您还可以访问本站的小程序、公众号等所有端,或者下载APP, 在小程序、APP上可以评论文章以及保存图片还有在线客服哦,如您有任何疑问或建议可向作者提出意见反馈
扫码打开小程序可评论文章保存图片,在“我的”有实时在线客服哦,看效果?
关注我的公众号为您分享各类有用信息
分享录多端跨平台系统