Node.js 程序Docker 化
发布于 3 年前 作者 gocpplua 1725 次浏览 来自 分享

准备:文件夹 docker_node,然后进入 docker_node

1.创建package.json 文件

npm init -yes

文件如下:

{
  "name": "docker_node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  1. 创建一个 index.js 文件
console.log(process.version);
console.log("Hello World")

process.on('SIGINT', function() {
  process.exit();
});
  1. 创建一个空文件,命名为 Dockerfile,文件内容如下:
FROM node:14
WORKDIR /data/XXXX/docker_node


# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "index.js" ]
  1. 创建一个空文件,命名为 .dockerignore,文件内容如下:
node_modules
npm-debug.log
  1. 构建镜像
sudo docker build . -t <image name>

For example:
sudo docker build . -t docker_node
  1. 查看镜像:
sudo  docker images
  1. 运行镜像:
docker run -p 49160:8080 -d  <image name>

For example:
docker run -p 49160:8080 -d  docker_node
  1. 查看容器
sudo docker ps -a

Note:STATUS 中 Up表示容器正在运行。

  1. 进入容器:
sudo docker exec -it <CONTAINER ID>/<Names> bash

Note: 命令 exit 表示 退出容器

  1. 进入容器后查看Node版本号:
root@0b5477c9a6a5:/data/XXXX/docker_node# node -v
v14.16.1

如果我们想要看到index.js文件中通过console.log输出的日志,那么我们要以下述方式启动容器:

docker run -d --rm --name index -v "$PWD":/data/XXXX/docker_node -w /data/XXXX/docker_node node:14.16.1 node index.js

For Example:
alibaba\cc@cn0314000510l:/data/XXXX/docker_node$ sudo docker run -d --rm --name index -v "$PWD":/data/XXXX/docker_node -w /data/XXXX/docker_node node:14.16.1 node index.js
f081be45551148018b2103271fe3ffdf20c863cc3734953ab5e23f6a91c808de

接着通过下面命令查看日志:

sudo docker logs $(sudo docker ps -aq --filter name=index)

For Example:
alibaba\cc@cn0314000510l:/data/XXXX/docker_node$ sudo docker logs $(sudo docker ps -aq --filter name=index)
v14.16.1
Started - now try to kill me...

Docker常用命令:

  1. 查看容器:
sudo docker ps -a
  1. 删除容器:
sudo docker rm <CONTAINER ID>

  1. 查看镜像:
sudo docker images
  1. 删除镜像:
sudo docker rmi <REPOSITORY>/<IMAGE ID>

5. 停止容器:

sudo docker stop <CONTAINER ID>

参考文章:

  1. 把一个 Node.js web 应用程序给 Docker 化
  2. What is the easiest way to run a single NodeJS script using Docker and be able to terminate it with Ctrl-C
  3. Docker and Node.js Best Practices
1 回复

特别需要注意的是:如果index.js退出的话,我们是没有办法进入容器的,所以我这里加了一个setTimeout。 如果容器是否在运行,就通过查看文章中提到的STATUS 状态

回到顶部