dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2150
  • 铜币12254枚
  • 威望5540点
  • 银元145个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:64回复:2

如何使用 docker 创建 Node.js 容器?

楼主#
更多 发布于:2018-02-11 10:38
目标
创建一个 Node.js 容器,并运行 node 应用程序;

环境
Docker 1.13.1 On CentOS 7.3

部署
1. 下载镜像
docker pull nodejs:9-apline

2. 创建容器
docker run --name test-node -tid node:9-alpine

3. 容器控制台
docker exec -ti test-node /bin/sh

4. node 版本
~ # node -v
v9.5.0

验证
# 创建一个 Node.js web 应用;
1. 代码
~ # cat server.js
var http = require('http');

http.createServer(function (request, response) {

    // 发送 HTTP 头部
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888);

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/
# 代码详解
示例 Node.js 应用是由以下3个部分组成的:
    1. 引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。
    2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
    3. 接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

2. 启动应用
~ # node server.js
Server running at http://127.0.0.1:8888/

3. 访问应用 (容器的IP)
~ # curl http://172.17.0.2:8888
Hello World

内容参考自: Node.js 创建第一个应用

进一步扩展,可以考虑两方面,
1. 如何使用 Dockerfile 设计一个适合自己项目的 自定义 Node.js 镜像;
2. 如何使用 docker-compose 编排 Node.js 应用;
#
技术QQ群 https://zongming.net/app-index-run?app=qqun
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2150
  • 铜币12254枚
  • 威望5540点
  • 银元145个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2018-02-12 14:58
如何使用 Dockerfile 设计一个适合自己项目的(自定义) Node.js 镜像?
目标
假设,我的 node 应用是一个 web 服务,需要连接后端的 mysql 数据库,所以需要安装 mysql 驱动;

Dockerfile
cat Dockerfile
# my node.js
FROM    node:9-alpine    
MAINTAINER dongnan <http://zongming.net>

WORKDIR    /app
COPY    src/server.js /app/
RUN    npm install -g mysql --registry=https://registry.npm.taobao.org
EXPOSE    8888
CMD    ["node","/app/server.js"]

创建镜像
docker build -t my-node:0.0.1 .
Sending build context to Docker daemon  4.608kB
Step 1/7 : FROM node:9-alpine
 ---> 34a20378e745
...省略
Successfully tagged my-node:0.0.1

创建容器
docker run --name test-node -tid my-node:0.0.1
a5ccdf8430b3272c1cc936be294xxxx08bb93a1bc018c763b15ea79601485747

验证
1. 日志
docker logs test-node
Server running at http://127.0.0.1:8888/

2. 访问 web服务
curl http://172.17.0.2:8888
Hello World

#
技术QQ群 https://zongming.net/app-index-run?app=qqun
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2150
  • 铜币12254枚
  • 威望5540点
  • 银元145个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2018-02-13 16:35
如何使用 docker-compose 编排 Node.js 应用?
目标
承上,当有了自定义的 node 应用镜像,接下来可以通过 docker-compose 来编排应用;
这里假设,演示的项目包括: 一个 web 服务,以及一个 DB 服务;

docker-compose
cat node/docker-compose.yml
version: '2'
services:
  node-app:
    image: my-node:0.0.1
    container_name: node-app
    volumes:
      - web-data:/app
    environment:
      - CID=node-app
    ports:
      - 8888:8888
    links:
      - node-db

  node-db:
    image: mysql
    container_name: node-db
    volumes:
      - /etc/localtime:/etc/localtime
      - db-data:/var/lib/mysql
    environment:
      - TZ=Asia/Chongqing
      - MYSQL_DATABASE=node-db
      - MYSQL_USER=crm
      - MYSQL_PASSWORD=MyNodePasswd
      - MYSQL_ROOT_PASSWORD=MyNodePasswd
    command:
      --character-set-server=utf8
      --collation-server=utf8_general_ci
      --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

volumes:
    db-data:
      driver: local
    web-data:
      driver: local

结构
tree node/
node/
├── docker-compose.yml
├── Dockerfile
└── src
    └── server.js

1 directory, 3 files

创建项目
docker-compose up -d
...省略
Creating node-db
Creating node-app

验证
docker-compose ps
  Name                Command               State           Ports          
--------------------------------------------------------------------------
node-app   node /app/server.js              Up      0.0.0.0:8888->8888/tcp
node-db    docker-entrypoint.sh --cha ...   Up      3306/tcp          

参考
https://hub.docker.com/_/node/
https://github.com/nodejs/docker-node/blob/master/README.md#how-to-use-this-image
#
技术QQ群 https://zongming.net/app-index-run?app=qqun
游客

返回顶部