编辑于2016年,观看别人的博客后的笔记,原作者要是看到请联系我注明出处
简单的docker 下nodejs web应用
此应用用于开发环境
第一步 :创建问一个新的文件夹,并在其中创建package.json 和server.js
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.13.3"}}
server.js
'use strict';const express = require('express');// Constantsconst PORT = 8080;// Appconst app = express();
app.get('/', function (req, res) {
res.send('Hello world\n');});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);
第二步:创建一个dockerfile
touch Dockerfile
获取nodejs 版本为agon
FROM node:argon
创建应用的镜像空间文件夹
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
移动package.json /usr/src/app/ 并执行npm install
# Install app dependenciesCOPY package.json /usr/src/app/
RUN npm install
绑定你的源代码到docker镜像
# Bundle app sourceCOPY . /usr/src/app
绑定端口8080 使其成为docker的映射
EXPOSE 8080
最后设置命令 npm start
CMD ["npm","start"]
文件内容如下
FROM node:argon
# Create app directoryRUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependenciesCOPY package.json /usr/src/app/
RUN npm install
# Bundle app sourceCOPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
构建镜像
-t 标记你的镜像为什么名称,最后一个.是当前目录
$ docker build -t <your username>/node-web-app .
使用docker images查看
$ docker images
# Example
REPOSITORY TAG ID CREATED
node argon 539c0211cd76 3 weeks ago
<your username>/node-web-app latest d64d3505b0d2 1 minute ago
执行镜像
使用-d运行可以使你的应用后台运行 -p把私有的端口映射为公共端口
$ docker run -p 49160:8080 -d <your username>/node-web-app
使用以下命令查看
# Get container ID
$ docker ps# Print app output
$ docker logs <container id># Example
Running on http://localhost:8080
如果你想进入应用目录环境
# Enter the container
$ docker exec -it <container id> /bin/bash
测试
获取docker的端口
$ docker ps# Example
ID IMAGE COMMAND ... PORTS
ecce33b30ebf <your username>/node-web-app:latest npm start ... 49160->8080
使用curl(如果没有安装:sudo apt-get install curl)
$ curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 02 Jun 2013 03:53:22 GMT
Connection: keep-alive
Hello world