前提:
1、已经安装好docker环境
2、已经安装好node.js开发环境
思路:
在docker hub上找到现成的node.js镜像,拉回来,基于这个镜像发布node.js应用!
(当然也可以基于centos镜像,安装node.js,这里使用懒办法)
一:找到合适的node.js基础镜像
到hub.docker.com搜索node
node.js的镜像名称为node,最新版本是: node:latest
也可以使用node:alpine这个版本(体积小,只包含基础node.js运行环境)
二:拉取node镜像(这里拉去node:latest)
$ docker pull node:latest

拉取结束,查看一下镜像
$ docker images | grep node

启动node镜像,确认可用
基于node镜像启动一个名为node-test的容器
$ docker run -itd --name node-test node
--name node-test 指定容器名称
查看容器
$ docker ps

镜像可用!
三:开发node.js应用
用express开发一个简单的web服务:
# 创建工程目录
mkdir ~/Develop/docker/demo-nodejs-docker
# 一路回车新建一个node.js工程
npm init
#安装express库
npm i express -S
新建app.js,并编写一个简单的web服务,代码如下:
'use strict';
const express = require('express');
const PORT = 8888;
const app = express();
app.get('/', function (req, res) {
res.send('Hello Docker image for node.js!\n');
});
app.listen(PORT);
console.log('Running on [http://localhost](http://localhost):' + PORT);
保存退出,测试一下
node app.js
curl [http://localhost:8888](http://localhost:8888)
四:编写Dockerfile
在demo-node-docker目录下新建Dockerfile (文件名就这个),并在其中编写:
# 指定基于node:latest 这个镜像继续制作当前应用镜像
FROM node:latest
# Create app directory在镜像中创建一个目录
RUN mkdir -p /home/Service
# 设定工作目录为 /home/Service
WORKDIR /home/Service
# 把宿主机当前目录下所有文件拷贝到镜像中/home/Service目录
COPY . /home/Service
# RUN npm install
# 暴露8888端口
EXPOSE 8888
# 启动容器时执行应用启动命令
CMD [ "node", "--trace-warnings", "app.js" ]
打包为Docker镜像(docker build 默认会找当前目录下的Dockerfile文件)
$ docker build -t demo-nodejs-docker .
基于镜像启动容器(基于镜像demo-nodejs-docker启动一个名为dnd的容器,并且将宿主机的7777端口映射到容器的8888端口)
$ docker run -itd -p 7777:8888 --name dnd demo-nodejs-docker
调用web服务,通过7777端口访问容器中的web服务:
$ curl [http://localhost:7777](http://localhost:8888)
返回 Hello Docker image for node.js!
进入容器查看内容
$ docker exec -it [容器ID] /bin/bash

看到没,容器里面的文件结构和本地目录一模样!

注意事项:
1、启动容器时需要指定端口映射,才能访问Docker容器中的Web服务;
2、如果忘记指定端口映射,可按《docker容器添加对外映射端口》进行修改
3、如果启动容器失败,可以用docker ps - a 查看到所有容器,再用 docker logs 容器ID查看启动失败的日志排查问题
4、查看镜像:docker images
5、删除镜像:docker rmi [镜像ID]
6、查看容器ID: docker ps -a
7、删除容器:docker rm [容器ID]
网友评论