创建helloworld应用程序
创建package.json 文件touch package.json
,描述应用程序以及需要的依赖,内容为如下:
{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.16.1"
}
}
使用npm install
这会自动生成一个 package-lock.json 文件,它将一起被拷贝进入你的 Docker 镜像中。
然后,创建一个 server.js 文件,使用 Express.js 框架定义一个 Web 应用:
touch server.js
'use strict';
const express = require('express');
// Constants
const PORT = 8080;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
创建Dockerfile文件
#node版本好,目前官网更新到14
FROM node:12
# 镜像下的工作目录
WORKDIR /usr/src/app
# 安装应用程序依赖
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# 打包资源
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
创建.dockerignore 文件
在 Dockerfile
的同一个文件夹中创建一个.dockerignore
文件,带有以下内容:
node_modules
npm-debug.log
这将避免你的本地模块以及调试日志被拷贝进入到你的 Docker 镜像中,以至于把你镜像原有安装的模块给覆盖了。
运行Dockerfile并且下载镜像
docker build -t li/node-web-app .
docker images
运行镜像
docker run -p 49160:8080 -d li/node-web-app
#进入容器内
docker exec -it <container id> /bin/bash
测试应用程序是否启动
curl -i localhost:49160
显示为
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-Ck1VqNd45QIvq3AZd8XYQLvEhtA"
Date: Sun, 03 Jan 2021 03:42:36 GMT
Connection: keep-alive
Keep-Alive: timeout=5
Hello World