dockerfile如下:
FROM hub.c.163.com/public/nodejs:6.11.0
# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service
# Bundle app source
COPY . /home/Service
EXPOSE 3000
ENTRYPOINT [ "npm", "start" ]
我们来一句一句的解释
FROM hub.c.163.com/public/nodejs:6.11.0
FROM是构建镜像的基础源镜像,hub.c.163.com/public/nodejs:6.11.0 这个是镜像的名称,也就是我们一开始从国内服务器上拉下来的那个Image。如果本地没有Docker 会自己pull镜像。
RUN mkdir -p /home/Service
RUN 用于在Image里创建一个文件夹,将来用于保存我们的代码。
WORKDIR /home/Service
第二句WORKDIR是将我们创建的文件夹做为工作目录。
COPY . /home/Service
第一句的COPY是把本机当前目录下的所有文件拷贝到Image的/home/Service文件夹下。
EXPOSE 8888
由于我们的web app监听的是8888端口,我们把这个端口暴露给主机,这样我就能从外部访问web了。
ENTRYPOINT [ "npm", "start" ]
运行npm start命令,这个命令会运行 node service.js来,,这里我之前网上看的是用的CMD,但是我用CMD不对,真实原因正在研究中,改成ENTRYPOINT 就好了。
这里的start是在node项目的package.json里定义的,如下:
{
"name": "demo2",
"version": "0.0.1",
"description": "demo2",
"main": "meadowlark.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start":" node meadowlark.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.15.4",
"mysql": "^2.14.1"
}
}
构建Image
docker build -t mynodeapp .
运行镜像
docker run -d -p 8888:8888 ac5
网友评论