Skip to content

Latest commit

 

History

History
93 lines (82 loc) · 3.83 KB

使用Docker部署nodejs服务.md

File metadata and controls

93 lines (82 loc) · 3.83 KB

开始之前,我假设你的电脑上已经安装了Docker,如果没有安装过,请自行搜索相应的安装方式。

一、创建容器

首先打开Docker Store,在首页的搜索框抛入node寻找我们需要的合适镜像。

点击进去之后,看到右上角的拉取镜像命令,复制它到你的命令行终端中执行一下,即可将当前镜像安装到你的设备上。

docker pull node

接下来利用此镜像创建一个新容器

docker run -idt -p 8080:8888 node /bin/bash
  • docker run,创建一个新容器
  • -i,让Docker的标准输入保持打开,允许用户与容器进行交互
  • -d,在后台运行Docker
  • -t,让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
  • 8080,我们一会儿要在nodejs服务中使用的端口
  • 8888,Docker用来暴露给外部访问的端口
  • bin/bash,启动Docker的bash终端

不出意外的话,现在你已经成功的启动了一个Docker,运行此命令可以看到当前正在运行的所有Docker

docker ps

二、编写nodejs应用

假设我们打算使用express来启动一个静态服务器,用来输出一行文本Hello World。 首先执行npm init初始化一个package.json文件,然后执行npm install express --save,安装express依赖包

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
     "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.15.2"
  }
}

执行vi service.js,编写nodejs代码:

var express = require('express');
var PORT = 8080;
var app = express();
app.get('/', function (req, res) {
    res.send('Hello world');
});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

注意:此处的PORT要与上面我们创建Docker时用的8080端口保持一致。 编写完毕,可以先在本机执行node service.js测试一下,看服务是否正常。

三、将nodejs应用复制到Docker里

执行docker ps命令,查看Docker的CONTAINER ID

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
cc53e1cefcf5        node                "/bin/bash"         44 minutes ago      Up 44 minutes       0.0.0.0:8080->8888/tcp   grave_jang

执行以下命令就可以将当前目录的文件复制到此cc53e1cefcf5Docker的/var/node目录中

docker cp ./ cc53e1cefcf5:/var/node

为了验证一下,我们可以登录Docker,然后执行ls命令查看是否真的复制成功了

docker attach cc53e1cefcf5
ls /var/node

但是,此docker cp命令在[email protected]以下版本貌似不支持,一直报错误提示:

Error: Path not specified

解决办法有两个,一是升级你的Docker版本,再一个就是在创建Docker的时候加上-v参数,它可以直接把你当前设备上指定的目录复制到指定的Docker目录中。例如下面这条命令就是在创建一个Docker的同时,把我当前设备上的/var/data目录文件直接复制到了Docker中的/home/data目录

docker run -v /var/data:/home/data -i -t node /bin/bash

最后在Docker里执行node server.js启动服务,然后在浏览器中访问http://localhost:8080,就可以看到Hello World

四、参考链接