Node.js 程序Docker 化
准备:文件夹 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"
}
- 创建一个 index.js 文件
console.log(process.version);
console.log("Hello World")
process.on('SIGINT', function() {
process.exit();
});
- 创建一个空文件,命名为 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" ]
- 创建一个空文件,命名为 .dockerignore,文件内容如下:
node_modules
npm-debug.log
- 构建镜像
sudo docker build . -t <image name>
For example:
sudo docker build . -t docker_node
- 查看镜像:
sudo docker images
- 运行镜像:
docker run -p 49160:8080 -d <image name>
For example:
docker run -p 49160:8080 -d docker_node
- 查看容器
sudo docker ps -a
Note:STATUS 中 Up表示容器正在运行。
- 进入容器:
sudo docker exec -it <CONTAINER ID>/<Names> bash
Note: 命令 exit 表示 退出容器
- 进入容器后查看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常用命令:
- 查看容器:
sudo docker ps -a
- 删除容器:
sudo docker rm <CONTAINER ID>
- 查看镜像:
sudo docker images
- 删除镜像:
sudo docker rmi <REPOSITORY>/<IMAGE ID>
5. 停止容器:
sudo docker stop <CONTAINER ID>
参考文章:
1 回复
特别需要注意的是:如果index.js退出的话,我们是没有办法进入容器的,所以我这里加了一个setTimeout。 如果容器是否在运行,就通过查看文章中提到的STATUS 状态